Module: Pitchfork::SharedMemory
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
- #[](offset) ⇒ Object
- #current_generation ⇒ Object
- #current_generation=(value) ⇒ Object
- #mold_deadline ⇒ Object
- #mold_promotion_deadline ⇒ Object
-
#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.
- #service_deadline ⇒ Object
- #shutting_down! ⇒ Object
- #shutting_down? ⇒ Boolean
- #worker_deadline(worker_nr) ⇒ Object
Instance Method Details
#[](offset) ⇒ Object
63 64 65 |
# File 'lib/pitchfork/shared_memory.rb', line 63 def [](offset) Field.new(offset) end |
#current_generation ⇒ Object
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_deadline ⇒ Object
47 48 49 |
# File 'lib/pitchfork/shared_memory.rb', line 47 def mold_deadline self[MOLD_TICK_OFFSET] end |
#mold_promotion_deadline ⇒ Object
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_deadline ⇒ Object
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
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 |