Class: BackgroundQueue::ServerLib::PriorityQueue

Inherits:
Object
  • Object
show all
Defined in:
lib/background_queue/server_lib/priority_queue.rb

Overview

internally implemented using a list of queues this does not do any locking, subclasses should look after any locking

Direct Known Subclasses

BalancedQueue, Job, Owner

Instance Method Summary collapse

Constructor Details

#initializePriorityQueue

Returns a new instance of PriorityQueue.



6
7
8
9
10
11
# File 'lib/background_queue/server_lib/priority_queue.rb', line 6

def initialize
  @queues = []
  @items = {}
  @stalled_items = {}
  @stalled = false
end

Instance Method Details

#each_item(&block) ⇒ Object



72
73
74
75
76
77
78
# File 'lib/background_queue/server_lib/priority_queue.rb', line 72

def each_item(&block)
  for queue in @queues
    for item in queue
      block.call(item)
    end
  end
end

#empty?Boolean

Returns:

  • (Boolean)


52
53
54
# File 'lib/background_queue/server_lib/priority_queue.rb', line 52

def empty?
  @queues.empty?
end

#number_if_items_at_priority(priority) ⇒ Object



60
61
62
63
64
# File 'lib/background_queue/server_lib/priority_queue.rb', line 60

def number_if_items_at_priority(priority)
  q = get_queue_for_priority(priority, false)
  return 0 if q.nil?
  q.length
end

#number_of_prioritiesObject



56
57
58
# File 'lib/background_queue/server_lib/priority_queue.rb', line 56

def number_of_priorities
  @queues.length
end

#peekObject



66
67
68
69
70
# File 'lib/background_queue/server_lib/priority_queue.rb', line 66

def peek
  q = get_next_queue
  return nil if q.nil?
  q.first
end

#popObject



13
14
15
16
17
18
19
20
21
# File 'lib/background_queue/server_lib/priority_queue.rb', line 13

def pop
  q = get_next_queue
  return nil if q.nil?
  item = q.shift
  if q.empty?
    remove_queue(q)
  end
  item
end

#priorityObject

the highest priority queue



39
40
41
42
# File 'lib/background_queue/server_lib/priority_queue.rb', line 39

def priority
  return nil if @queues.empty?
  get_next_queue.priority
end

#push(item) ⇒ Object



23
24
25
26
# File 'lib/background_queue/server_lib/priority_queue.rb', line 23

def push(item)
  q = get_queue_for_priority(item.priority, true)
  q.push(item)
end

#remove(item, override_priority = nil) ⇒ Object



28
29
30
31
32
33
34
35
36
# File 'lib/background_queue/server_lib/priority_queue.rb', line 28

def remove(item, override_priority=nil)
  override_priority = item.priority if override_priority.nil?
  q = get_queue_for_priority(override_priority, false)
  raise "unable to get queue at priority #{override_priority} when removing" if q.nil?
  q.delete_if { |q_item| q_item.id == item.id }
  if q.empty?
    remove_queue(q)
  end
end

#stalled=(stall) ⇒ Object



48
49
50
# File 'lib/background_queue/server_lib/priority_queue.rb', line 48

def stalled=(stall)
  @stalled = stall
end

#stalled?Boolean

Returns:

  • (Boolean)


44
45
46
# File 'lib/background_queue/server_lib/priority_queue.rb', line 44

def stalled?
  @stalled
end