Class: Qinium::HostManager::Cache

Inherits:
Object
  • Object
show all
Defined in:
lib/qinium/host_manager.rb

Instance Method Summary collapse

Constructor Details

#initialize ⇒ Cache

Returns a new instance of Cache.



4
5
6
7
# File 'lib/qinium/host_manager.rb', line 4

def initialize
  @mutex = Mutex.new
  @hosts = {}
end

Instance Method Details

#cache_key(access_key, bucket) ⇒ Object



38
39
40
# File 'lib/qinium/host_manager.rb', line 38

def cache_key(access_key, bucket)
  Digest::SHA1.base64digest "#{access_key}-#{bucket}"
end

#delete(access_key, bucket) ⇒ Object



32
33
34
35
36
# File 'lib/qinium/host_manager.rb', line 32

def delete(access_key, bucket)
  @mutex.synchronize do
    @hosts.delete(cache_key(access_key, bucket))
  end
end

#read(access_key, bucket, &block) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/qinium/host_manager.rb', line 9

def read(access_key, bucket, &block)
  @mutex.synchronize do
    key = cache_key(access_key, bucket)
    data = @hosts[key]
    if data && Time.now.to_i > data["expires_at"]
      @hosts.delete key
      data = nil
    end
    if data.nil?
      data = block.call
      data["expires_at"] = Time.now.to_i + data["ttl"]
      @hosts[key] = data.freeze
    end
    data
  end
end

#write(access_key, bucket, hosts) ⇒ Object



26
27
28
29
30
# File 'lib/qinium/host_manager.rb', line 26

def write(access_key, bucket, hosts)
  @mutex.synchronize do
    @hosts[cache_key(access_key, bucket)] = hosts
  end
end