class Fluent::PluginHelper::Storage::PersistentWrapper

def autosave

def autosave
  false
end

def delete(key)

def delete(key)
  @monitor.synchronize do
    @storage.load
    val = @storage.delete(key)
    @storage.save
    val
  end
end

def fetch(key, defval)

def fetch(key, defval)
  @monitor.synchronize do
    @storage.load
    @storage.fetch(key, defval)
  end
end

def get(key)

def get(key)
  @monitor.synchronize do
    @storage.load
    @storage.get(key)
  end
end

def implementation

def implementation
  @storage
end

def initialize(storage)

def initialize(storage)
  @storage = storage
  @monitor = Monitor.new
end

def load

def load
  @monitor.synchronize do
    @storage.load
  end
end

def method_missing(name, *args)

def method_missing(name, *args)
  @monitor.synchronize{ @storage.__send__(name, *args) }
end

def persistent

def persistent
  true
end

def persistent_always?

def persistent_always?
  true
end

def put(key, value)

def put(key, value)
  @monitor.synchronize do
    @storage.load
    @storage.put(key, value)
    @storage.save
    value
  end
end

def save

def save
  @monitor.synchronize do
    @storage.save
  end
end

def synchronized?

def synchronized?
  true
end

def update(key, &block)

def update(key, &block)
  @monitor.synchronize do
    @storage.load
    v = block.call(@storage.get(key))
    @storage.put(key, v)
    @storage.save
    v
  end
end