public SqlServerFetchedJob( [NotNull] SqlServerStorage storage, [NotNull] IDbConnection connection, [NotNull] IDbTransaction transaction, string jobId, string queue) { if (storage == null) throw new ArgumentNullException(nameof(storage)); if (connection == null) throw new ArgumentNullException(nameof(connection)); if (transaction == null) throw new ArgumentNullException(nameof(transaction)); if (jobId == null) throw new ArgumentNullException(nameof(jobId)); if (queue == null) throw new ArgumentNullException(nameof(queue)); _storage = storage; _connection = connection; _transaction = transaction; JobId = jobId; Queue = queue; if (!_storage.IsExistingConnection(_connection)) { _timer = new Timer(ExecuteKeepAliveQuery, null, KeepAliveInterval, KeepAliveInterval); } }
public SqlServerDistributedLock([NotNull] SqlServerStorage storage, [NotNull] string resource, TimeSpan timeout) { if (storage == null) { throw new ArgumentNullException("storage"); } if (String.IsNullOrEmpty(resource)) { throw new ArgumentNullException("resource"); } if ((timeout.TotalSeconds + CommandTimeoutAdditionSeconds) > Int32.MaxValue) { throw new ArgumentException(string.Format("The timeout specified is too large. Please supply a timeout equal to or less than {0} seconds", Int32.MaxValue - CommandTimeoutAdditionSeconds), "timeout"); } _storage = storage; _resource = resource; _connection = storage.CreateAndOpenConnection(); if (!AcquiredLocks.Value.ContainsKey(_resource) || AcquiredLocks.Value[_resource] == 0) { Acquire(_connection, _resource, timeout); if (!_storage.IsExistingConnection(_connection)) { _timer = new Timer(ExecuteKeepAliveQuery, null, TimeSpan.Zero, KeepAliveInterval); } AcquiredLocks.Value[_resource] = 1; } else { AcquiredLocks.Value[_resource]++; } }
public SqlServerDistributedLock([NotNull] SqlServerStorage storage, [NotNull] string resource, TimeSpan timeout) { if (storage == null) throw new ArgumentNullException(nameof(storage)); if (String.IsNullOrEmpty(resource)) throw new ArgumentNullException(nameof(resource)); if (timeout.TotalSeconds + CommandTimeoutAdditionSeconds > Int32.MaxValue) throw new ArgumentException( $"The timeout specified is too large. Please supply a timeout equal to or less than {Int32.MaxValue - CommandTimeoutAdditionSeconds} seconds", nameof(timeout)); _storage = storage; _resource = resource; _connection = storage.CreateAndOpenConnection(); if (!AcquiredLocks.Value.ContainsKey(_resource) || AcquiredLocks.Value[_resource] == 0) { Acquire(_connection, _resource, timeout); if (!_storage.IsExistingConnection(_connection)) { _timer = new Timer(ExecuteKeepAliveQuery, null, KeepAliveInterval, KeepAliveInterval); } AcquiredLocks.Value[_resource] = 1; } else { AcquiredLocks.Value[_resource]++; } }
public SqlServerDistributedLock([NotNull] SqlServerStorage storage, [NotNull] string resource, TimeSpan timeout) { if (storage == null) { throw new ArgumentNullException(nameof(storage)); } if (String.IsNullOrEmpty(resource)) { throw new ArgumentNullException(nameof(resource)); } if (timeout.TotalSeconds + CommandTimeoutAdditionSeconds > Int32.MaxValue) { throw new ArgumentException( $"The timeout specified is too large. Please supply a timeout equal to or less than {Int32.MaxValue - CommandTimeoutAdditionSeconds} seconds", nameof(timeout)); } if (timeout.TotalMilliseconds > Int32.MaxValue) { throw new ArgumentException( $"The timeout specified is too large. Please supply a timeout equal to or less than {(int)TimeSpan.FromMilliseconds(Int32.MaxValue).TotalSeconds} seconds", nameof(timeout)); } _storage = storage; _resource = resource; if (!AcquiredLocks.Value.ContainsKey(_resource) || AcquiredLocks.Value[_resource] == 0) { _connection = storage.CreateAndOpenConnection(); try { Acquire(_connection, _resource, timeout); } catch (Exception) { storage.ReleaseConnection(_connection); throw; } if (!_storage.IsExistingConnection(_connection)) { _timer = new Timer(ExecuteKeepAliveQuery, null, KeepAliveInterval, KeepAliveInterval); } AcquiredLocks.Value[_resource] = 1; } else { AcquiredLocks.Value[_resource]++; } }
public SqlServerFetchedJob( [NotNull] SqlServerStorage storage, [NotNull] IDbConnection connection, [NotNull] IDbTransaction transaction, string jobId, string queue) { if (storage == null) { throw new ArgumentNullException("storage"); } if (connection == null) { throw new ArgumentNullException("connection"); } if (transaction == null) { throw new ArgumentNullException("transaction"); } if (jobId == null) { throw new ArgumentNullException("jobId"); } if (queue == null) { throw new ArgumentNullException("queue"); } _storage = storage; _connection = connection; _transaction = transaction; JobId = jobId; Queue = queue; if (!_storage.IsExistingConnection(_connection)) { _timer = new Timer(ExecuteKeepAliveQuery, null, TimeSpan.Zero, KeepAliveInterval); } }
public SqlServerDistributedLock([NotNull] SqlServerStorage storage, [NotNull] string resource, TimeSpan timeout) { if (storage == null) { throw new ArgumentNullException(nameof(storage)); } if (String.IsNullOrEmpty(resource)) { throw new ArgumentNullException(nameof(resource)); } _storage = storage; _resource = resource; if (!AcquiredLocks.Value.ContainsKey(_resource) || AcquiredLocks.Value[_resource] == 0) { _connection = storage.CreateAndOpenConnection(); try { Acquire(_connection, _resource, timeout); } catch (Exception) { storage.ReleaseConnection(_connection); throw; } if (!_storage.IsExistingConnection(_connection)) { _timer = new Timer(ExecuteKeepAliveQuery, null, KeepAliveInterval, KeepAliveInterval); } AcquiredLocks.Value[_resource] = 1; } else { AcquiredLocks.Value[_resource]++; } }