Module: Pitchfork::SharedMemory

Extended by:
SharedMemory
Included in:
SharedMemory
Defined in:
lib/pitchfork/shared_memory.rb

Defined Under Namespace

Classes: Field

Constant Summary collapse

CURRENT_GENERATION_OFFSET =
0
SHUTDOWN_OFFSET =
1
MOLD_TICK_OFFSET =
2
MOLD_PROMOTION_TICK_OFFSET =
3
SERVICE_TICK_OFFSET =
4
WORKER_TICK_OFFSET =
5
PAGES =
[MemoryPage.new(MemoryPage::SLOTS)]

Instance Method Summary collapse

Instance Method Details

#[](offset) ⇒ Object



63
64
65
# File 'lib/pitchfork/shared_memory.rb', line 63

def [](offset)
  Field.new(offset)
end

#current_generationObject



16
17
18
# File 'lib/pitchfork/shared_memory.rb', line 16

def current_generation
  PAGES[0][CURRENT_GENERATION_OFFSET]
end

#current_generation=(value) ⇒ Object



20
21
22
# File 'lib/pitchfork/shared_memory.rb', line 20

def current_generation=(value)
  PAGES[0][CURRENT_GENERATION_OFFSET] = value
end

#mold_deadlineObject



47
48
49
# File 'lib/pitchfork/shared_memory.rb', line 47

def mold_deadline
  self[MOLD_TICK_OFFSET]
end

#mold_promotion_deadlineObject



51
52
53
# File 'lib/pitchfork/shared_memory.rb', line 51

def mold_promotion_deadline
  self[MOLD_PROMOTION_TICK_OFFSET]
end

#preallocate_pages(workers_count) ⇒ Object

Since workers are created from another process, we have to pre-allocate the drops so they are shared between everyone.

However this doesn’t account for TTIN signals that increase the number of workers, but we should probably remove that feature too.



72
73
74
75
76
# File 'lib/pitchfork/shared_memory.rb', line 72

def preallocate_pages(workers_count)
  0.upto(((WORKER_TICK_OFFSET + workers_count) / MemoryPage::SLOTS.to_f).ceil) do |i|
    PAGES[i] ||= MemoryPage.new(MemoryPage::SLOTS)
  end
end

#service_deadlineObject



55
56
57
# File 'lib/pitchfork/shared_memory.rb', line 55

def service_deadline
  self[SERVICE_TICK_OFFSET]
end

#shutting_down!Object



24
25
26
# File 'lib/pitchfork/shared_memory.rb', line 24

def shutting_down!
  PAGES[0][SHUTDOWN_OFFSET] = 1
end

#shutting_down?Boolean

Returns:

  • (Boolean)


28
29
30
# File 'lib/pitchfork/shared_memory.rb', line 28

def shutting_down?
  PAGES[0][SHUTDOWN_OFFSET] > 0
end

#worker_deadline(worker_nr) ⇒ Object



59
60
61
# File 'lib/pitchfork/shared_memory.rb', line 59

def worker_deadline(worker_nr)
  self[WORKER_TICK_OFFSET + worker_nr]
end