Sha256: 0f3b8b94469a2fb6bfaace8ad99c76883b77af29880ccc8eadd43255b17b22e8
Contents?: true
Size: 949 Bytes
Versions: 48
Compression:
Stored size: 949 Bytes
Contents
require 'redlock' module Hyrax class LockManager class UnableToAcquireLockError < StandardError; end attr_reader :client # @param [Fixnum] time_to_live How long to hold the lock in milliseconds # @param [Fixnum] retry_count How many times to retry to acquire the lock before raising UnableToAcquireLockError # @param [Fixnum] retry_delay Maximum wait time in milliseconds before retrying. Wait time is a random value between 0 and retry_delay. def initialize(time_to_live, retry_count, retry_delay) @ttl = time_to_live @client = Redlock::Client.new([Redis.current], retry_count: retry_count, retry_delay: retry_delay) end # Blocks until lock is acquired or timeout. def lock(key) returned_from_block = nil client.lock(key, @ttl) do |locked| raise UnableToAcquireLockError unless locked returned_from_block = yield end returned_from_block end end end
Version data entries
48 entries across 48 versions & 1 rubygems