Simplify cacher
This commit is contained in:
parent
d82702064f
commit
b976be72bd
@ -32,10 +32,10 @@ module VagrantPlugins
|
||||
|
||||
def converter(proto, broker, cacher)
|
||||
cid = proto.addr.to_s if proto.addr.to_s != ""
|
||||
return cacher[cid].value if cid && cacher.registered?(cid)
|
||||
return cacher.get(cid) if cid && cacher.registered?(cid)
|
||||
|
||||
project = Client::Basis.load(proto, broker: broker)
|
||||
cacher[cid] = project if cid
|
||||
cacher.register(cid, project) if cid
|
||||
project
|
||||
end
|
||||
end
|
||||
|
||||
@ -15,10 +15,10 @@ module VagrantPlugins
|
||||
|
||||
def converter(project, ui, cacher)
|
||||
cid = project.resource_id
|
||||
return cacher[cid].value if cacher.registered?(cid)
|
||||
return cacher.get(cid) if cacher.registered?(cid)
|
||||
logger.warn("cache miss for environment with project resource id #{cid} cache=#{cacher} !!")
|
||||
env = Vagrant::Environment.new(ui: ui, client: project)
|
||||
cacher[cid] = env
|
||||
cacher.register(cid, env)
|
||||
env
|
||||
end
|
||||
end
|
||||
@ -65,11 +65,11 @@ module VagrantPlugins
|
||||
|
||||
def converter(project, cacher, mapper)
|
||||
cid = project.resource_id
|
||||
return cacher[cid].value if cacher.registered?(cid)
|
||||
return cacher.get(cid) if cacher.registered?(cid)
|
||||
logger.warn("cache miss for environment with project resource id #{cid} cache=#{cacher}")
|
||||
ui = mapper.map(project, to: Vagrant::UI::Remote)
|
||||
env = Vagrant::Environment.new(client: project, ui: ui)
|
||||
cacher[cid] = env
|
||||
cacher.register(cid, env)
|
||||
env
|
||||
end
|
||||
end
|
||||
|
||||
@ -50,10 +50,10 @@ module VagrantPlugins
|
||||
|
||||
def converter(proto, broker, cacher)
|
||||
cid = proto.addr.to_s if proto.addr.to_s != ""
|
||||
return cacher[cid].value if cid && cacher.registered?(cid)
|
||||
return cacher.get(cid) if cid && cacher.registered?(cid)
|
||||
|
||||
project = Client::Project.load(proto, broker: broker)
|
||||
cacher[cid] = project if cid
|
||||
cacher.register(cid, project) if cid
|
||||
project
|
||||
end
|
||||
end
|
||||
|
||||
@ -5,7 +5,7 @@ module VagrantPlugins
|
||||
class SyncedFolderProtoFromInstance < Mapper
|
||||
def initialize
|
||||
inputs = [].tap do |i|
|
||||
i << Input.new(type: Vagrant::Plugin::V2::SyncedFolder)
|
||||
i << Input.new(type: Vagrant::Plugin::Remote::SyncedFolder)
|
||||
end
|
||||
super(inputs: inputs, output: SDK::Args::SyncedFolder, func: method(:converter))
|
||||
end
|
||||
@ -42,11 +42,11 @@ module VagrantPlugins
|
||||
|
||||
def converter(proto, broker, cacher)
|
||||
cid = proto.addr.to_s if proto.addr.to_s != ""
|
||||
return cacher[cid].value if cid && cacher.registered?(cid)
|
||||
return cacher.get(cid) if cid && cacher.registered?(cid)
|
||||
|
||||
project = Client::SyncedFolder.load(proto, broker: broker)
|
||||
cacher[cid] = project if cid
|
||||
project
|
||||
sf = Client::SyncedFolder.load(proto, broker: broker)
|
||||
cacher.register(cid, sf) if cid
|
||||
sf
|
||||
end
|
||||
end
|
||||
|
||||
@ -56,7 +56,7 @@ module VagrantPlugins
|
||||
inputs = [].tap do |i|
|
||||
i << Input.new(type: Client::SyncedFolder)
|
||||
end
|
||||
super(inputs: inputs, output: Vagrant::Plugin::V2::SyncedFolder, func: method(:converter))
|
||||
super(inputs: inputs, output: Vagrant::Plugin::Remote::SyncedFolder, func: method(:converter))
|
||||
end
|
||||
|
||||
def converter(client)
|
||||
|
||||
@ -1,91 +1,35 @@
|
||||
require "mutex_m"
|
||||
|
||||
module VagrantPlugins
|
||||
module CommandServe
|
||||
module Util
|
||||
class Cacher
|
||||
include Mutex_m
|
||||
|
||||
class Entry
|
||||
attr_reader :value
|
||||
|
||||
def initialize(value)
|
||||
super()
|
||||
@value = value
|
||||
end
|
||||
|
||||
def value
|
||||
@value
|
||||
end
|
||||
end
|
||||
|
||||
def initialize
|
||||
super()
|
||||
@registry = {}
|
||||
end
|
||||
|
||||
def registered?(key)
|
||||
mu_synchronize { @registry.key?(key) }
|
||||
@registry.key?(key)
|
||||
end
|
||||
|
||||
def []=(key, value)
|
||||
entry = Entry.new(value)
|
||||
mu_synchronize { @registry[key] = entry }
|
||||
def register(key, value)
|
||||
@registry[key] = value
|
||||
end
|
||||
|
||||
def [](key)
|
||||
mu_synchronize { @registry[key] }
|
||||
def get(key)
|
||||
@registry[key]
|
||||
end
|
||||
|
||||
def delete(key)
|
||||
entry = @registry[key]
|
||||
return if entry.nil?
|
||||
entry.mu_synchronize do
|
||||
value = entry.value
|
||||
@registry.delete(key)
|
||||
value
|
||||
end
|
||||
def unregister(key)
|
||||
@registry.delete(key)
|
||||
end
|
||||
|
||||
# TODO: need to add a lock/unlock for an entry so
|
||||
# we can "check it out" for use during a request
|
||||
# and then return it without needing to deal with
|
||||
# block wrapping to maintain the lock.
|
||||
def use(key)
|
||||
entry = self[key]
|
||||
if entry.nil?
|
||||
if !@registry.key?(key)
|
||||
raise KeyError,
|
||||
"No value cached with key `#{key}'"
|
||||
end
|
||||
|
||||
entry.mu_synchronize do
|
||||
yield entry.value
|
||||
end
|
||||
end
|
||||
|
||||
def checkout(key, wait: false)
|
||||
entry = self[key]
|
||||
if entry.nil?
|
||||
raise KeyError,
|
||||
"No value cached with key `#{key}'"
|
||||
end
|
||||
if wait
|
||||
entry.mu_lock
|
||||
entry.value
|
||||
else
|
||||
if !entry.mu_try_lock
|
||||
raise LockError,
|
||||
"Failed to lock cached entry with key `#{key}'"
|
||||
end
|
||||
entry.value
|
||||
end
|
||||
end
|
||||
|
||||
def checkin(key)
|
||||
entry = self[key]
|
||||
return if entry.nil?
|
||||
entry.mu_unlock
|
||||
nil
|
||||
yield @registry[key]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user