void Create(IDbConnection connection, CreateMessage request)
 {
     connection.Insert(new QueueMessage
     {
         Content = request.Content,
         Readed  = false
     });
     if (!string.IsNullOrEmpty(request.Cooperator))
     {
         Propagators.ScheduleQueueOperation(request.QueueName, () => PropagateRequest(request));
     }
 }
        void TryDelete(IDbConnection connection, DeleteMessage request)
        {
            var firstMessageInQueue = connection.FirstOrDefault(FirstMessageQuery.make(connection));

            if (firstMessageInQueue == null || firstMessageInQueue.Id != request.MessageId)
            {
                throw new ArgumentException("Provided message was not first in queue");
            }
            firstMessageInQueue.Readed = true;
            connection.Update(firstMessageInQueue);
            Propagators.ScheduleQueueOperation(request.QueueName, () => PropagateRequest(request));
        }
Exemple #3
0
        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(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));
                }
            }
        }