public QueueMessage ReadNextFrom(string queueName) { using (var connection = Connections.ConnectToInitializedQueue(queueName)) { return(ReadMessage(connection, Locks.TakeQueueLock(queueName))); } }
public void Report(QueueFailure request) { var recoveryAction = HandleFailure(new FailureDescriptor { PathToDbFile = Connections.PathToDbFile(Connections.QueuesDir, request.Name), DbLock = Locks.TakeQueueLock(request.Name), CooperatorAddress = request.Cooperator, RecoveryCategory = "queues", DbName = request.Name }); Propagators.ScheduleQueueOperation(request.Name, recoveryAction); }
public void Delete(DeleteQueue request) { var queueLock = Locks.TakeQueueLock(request.QueueName); lock (queueLock) { if (Locks.QueuesRecoveryLocks.ContainsKey(request.QueueName)) { throw new Exception($"Queue {request.QueueName} is inconsistent"); } Connections.RemoveQueue(request.QueueName); Monitor.PulseAll(queueLock); Propagators.ScheduleQueueOperation(request.QueueName, () => Propagate(request)); Locks.RemoveQueueLock(request.QueueName); } }
public void Create(CreateMessage request) { var queueLock = Locks.TakeQueueLock(request.QueueName); lock (queueLock) { if (Locks.QueuesRecoveryLocks.ContainsKey(request.QueueName)) { throw new Exception($"Queue {request.QueueName} is inconsistent"); } using (var connection = Connections.ConnectToInitializedQueue(request.QueueName)) { Create(connection, request); Monitor.PulseAll(queueLock); } } }
public void Create(CreateQueue request) { var queueLock = Locks.TakeQueueLock(request.Name); lock (queueLock) { if (Locks.QueuesRecoveryLocks.ContainsKey(request.Name)) { throw new Exception($"Queue {request.Name} is inconsistent"); } CreateQueueFile(request.Name); if (!string.IsNullOrEmpty(request.Cooperator)) { Propagators.ScheduleQueueOperation(request.Name, () => PropagateRequestToCo(request)); } } }
public void Delete(DeleteMessage request) { var queueLock = Locks.TakeQueueLock(request.QueueName); lock (queueLock) { if (Locks.QueuesRecoveryLocks.ContainsKey(request.QueueName)) { throw new Exception($"Queue {request.QueueName} is inconsistent"); } using (var connection = Connections.ConnectToInitializedQueue(request.QueueName)) { if (IsDeleteDecisionImposedByCooperator(request)) { ForceDelete(connection, request); } else { TryDelete(connection, request); } } } }