diff --git a/plugins/commands/serve/mappers/basis.rb b/plugins/commands/serve/mappers/basis.rb index 1b624bb01..c112c563b 100644 --- a/plugins/commands/serve/mappers/basis.rb +++ b/plugins/commands/serve/mappers/basis.rb @@ -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 diff --git a/plugins/commands/serve/mappers/environment.rb b/plugins/commands/serve/mappers/environment.rb index 19cd725c0..750dc9c54 100644 --- a/plugins/commands/serve/mappers/environment.rb +++ b/plugins/commands/serve/mappers/environment.rb @@ -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 diff --git a/plugins/commands/serve/mappers/project.rb b/plugins/commands/serve/mappers/project.rb index b77e64a51..1afaaf382 100644 --- a/plugins/commands/serve/mappers/project.rb +++ b/plugins/commands/serve/mappers/project.rb @@ -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 diff --git a/plugins/commands/serve/mappers/synced_folder.rb b/plugins/commands/serve/mappers/synced_folder.rb index 9bb356584..9379cc229 100644 --- a/plugins/commands/serve/mappers/synced_folder.rb +++ b/plugins/commands/serve/mappers/synced_folder.rb @@ -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) diff --git a/plugins/commands/serve/util/cacher.rb b/plugins/commands/serve/util/cacher.rb index be23d87ed..7e52f53a2 100644 --- a/plugins/commands/serve/util/cacher.rb +++ b/plugins/commands/serve/util/cacher.rb @@ -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