Class: Undertow::Store::MemoryStore

Inherits:
Base
  • Object
show all
Defined in:
lib/undertow/store/memory_store.rb

Overview

Store adapter backed by in-process memory.

Uses Mutex-protected Ruby Sets for thread safety. Intended for use in test environments and single-process development setups.

Lock operations are no-ops, there is no scheduler race in a single process.

Undertow.configure do |c|
  c.store = Undertow::Store::MemoryStore.new
end

WARNING: State is not shared across processes. Do not use in multi-process or multi-dyno deployments.

Instance Method Summary collapse

Constructor Details

#initializeMemoryStore

Returns a new instance of MemoryStore.



21
22
23
24
25
# File 'lib/undertow/store/memory_store.rb', line 21

def initialize
  super
  @sets  = Hash.new { |h, k| h[k] = Set.new }
  @mutex = Mutex.new
end

Instance Method Details

#add_members(key, members) ⇒ Object



27
28
29
# File 'lib/undertow/store/memory_store.rb', line 27

def add_members(key, members)
  @mutex.synchronize { @sets[key].merge(Array(members)) }
end

#lock_acquireObject

No-op, single process, no scheduler race possible.



52
53
54
# File 'lib/undertow/store/memory_store.rb', line 52

def lock_acquire(*)
  true
end

#lock_release(key) ⇒ Object

No-op.



57
58
59
# File 'lib/undertow/store/memory_store.rb', line 57

def lock_release(key)
  # nothing to do
end

#member_count(key) ⇒ Object



47
48
49
# File 'lib/undertow/store/memory_store.rb', line 47

def member_count(key)
  @mutex.synchronize { @sets[key].size }
end

#members(key) ⇒ Object



35
36
37
# File 'lib/undertow/store/memory_store.rb', line 35

def members(key)
  @mutex.synchronize { @sets[key].to_a }
end

#pop_members(key, count) ⇒ Object



39
40
41
42
43
44
45
# File 'lib/undertow/store/memory_store.rb', line 39

def pop_members(key, count)
  @mutex.synchronize do
    members = @sets[key].first(count)
    members.each { |m| @sets[key].delete(m) }
    members
  end
end

#remove_member(key, member) ⇒ Object



31
32
33
# File 'lib/undertow/store/memory_store.rb', line 31

def remove_member(key, member)
  @mutex.synchronize { @sets[key].delete(member) }
end