Пример #1
0
 public void RemoveTaskCallbackInfo(TaskCallbackInfo taskCallbackInfo)
 {
     if (CallbackListeners != null && CallbackListeners.Contains(taskCallbackInfo))
     {
         CallbackListeners.Remove(taskCallbackInfo);
     }
 }
Пример #2
0
 public void AddTaskCallbackInfo(TaskCallbackInfo taskCallbackInfo)
 {
     if (CallbackListeners != null && !CallbackListeners.Contains(taskCallbackInfo))
     {
         CallbackListeners.Add(taskCallbackInfo);
     }
 }
Пример #3
0
 public void AddToListeners(TaskCallbackInfo listener)
 {
     lock (_mutex)
     {
         if (this.listeners != null)
         {
             listeners.Add(listener);
         }
     }
 }
Пример #4
0
 public void Deserialize(Runtime.Serialization.IO.CompactReader reader)
 {
     _opCode           = (MapReduceOpCodes)reader.ReadObject();
     _taskId           = reader.ReadString();
     _data             = reader.ReadObject();
     _source           = (Address)reader.ReadObject();
     _sequenceId       = reader.ReadInt64();
     _operationContext = (OperationContext)reader.ReadObject();
     _callbackInfo     = (TaskCallbackInfo)reader.ReadObject();
     _filter           = (Filter)reader.ReadObject();
 }
Пример #5
0
 public void RemoveFromListeners(TaskCallbackInfo listener)
 {
     if (this.listeners != null)
     {
         lock (_mutex)
         {
             if (listeners.Contains(listener))
             {
                 listeners.Remove(listener);
             }
         }
     }
 }
Пример #6
0
 private bool IsValidPointer(TaskEnumeratorPointer pointer)
 {
     if (this.listeners != null)
     {
         lock (_mutex)
         {
             IEnumerator it = this.listeners.GetEnumerator();
             while (it.MoveNext())
             {
                 TaskCallbackInfo callbackInfo = (TaskCallbackInfo)it.Current;
                 if ((callbackInfo.Client.Equals(pointer.ClientId) && (callbackInfo.CallbackId.Equals(pointer.CallbackId))))
                 {
                     return(true);
                 }
             }
         }
     }
     return(false);
 }
Пример #7
0
 private void RemoveFromListeners(TaskEnumeratorPointer pointer)
 {
     if (listeners != null)
     {
         lock (_mutex)
         {
             IEnumerator itListeners = listeners.GetEnumerator();
             // change to for loop.
             for (int i = 0; i < listeners.Count; i++)
             {
                 TaskCallbackInfo callBackInfo = (TaskCallbackInfo)listeners[i];
                 if (callBackInfo.Client.Equals(pointer.ClientId) && ((short)callBackInfo.CallbackId).Equals(pointer.CallbackId))
                 {
                     listeners.RemoveAt(i);
                 }
             }
         }
     }
 }
Пример #8
0
        public void RemoveDeadClientsTasks(ArrayList clients)
        {
            //Locking with starttask
            lock (_lock) {
                //Removing callback entries of dead clients from waiting tasks
                ICollection waitingTaskList = waitingTasks.Keys;
                for (IEnumerator it = clients.GetEnumerator(); it.MoveNext();)
                {
                    string client = (string)it.Current;
                    if (_context.NCacheLog.IsInfoEnabled)
                    {
                        _context.NCacheLog.Info("TaskTracker.RemoveDeadClients", "Removing waiting task listeners for client " + client);
                    }
                    foreach (string taskId in waitingTaskList)
                    {
                        TaskBase t = (TaskBase)waitingTasks[taskId];
                        if (t != null && t.CallbackListeners.Count != 0)
                        {
                            for (IEnumerator cbit = t.CallbackListeners.GetEnumerator(); cbit.MoveNext();)
                            {
                                TaskCallbackInfo taskCallbackInfo = (TaskCallbackInfo)cbit.Current;
                                if (taskCallbackInfo.Client.Equals(client))
                                {
                                    t.CallbackListeners.Remove(taskCallbackInfo);
                                }
                            }
                            if (t.CallbackListeners.Count == 0)
                            {
                                if (_context.NCacheLog.IsInfoEnabled)
                                {
                                    _context.NCacheLog.Info("TaskTracker.RemoveDeadClients", "No listeners remaining therefore removing waiting task " + t.TaskId);
                                }
                                waitingTasks.Remove(t.TaskId);
                                if (_context.PerfStatsColl != null)
                                {
                                    _context.PerfStatsColl.DecrementWaitingTasks();
                                }
                            }
                        }
                    }
                }
                //Removing callback entries of dead clients from running tasks
                ICollection runningTaskList = runningTasks.Keys;

                for (IEnumerator it = clients.GetEnumerator(); it.MoveNext();)
                {
                    string client = (string)it.Current;
                    if (_context.NCacheLog.IsInfoEnabled)
                    {
                        _context.NCacheLog.Info("TaskTracker.RemoveDeadClients", "Removing running task listeners for client " + client);
                    }
                    foreach (string taskId in runningTaskList)
                    {
                        TaskBase t = (TaskBase)runningTasks[taskId];
                        if (t != null && t.CallbackListeners.Count != 0)
                        {
                            for (IEnumerator cbit = t.CallbackListeners.GetEnumerator(); cbit.MoveNext();)
                            {
                                TaskCallbackInfo taskCallbackInfo = (TaskCallbackInfo)cbit.Current;
                                if (taskCallbackInfo.Client.Equals(client))
                                {
                                    t.CallbackListeners.Remove(taskCallbackInfo);
                                }
                            }
                            if (t.CallbackListeners.Count == 0)
                            {
                                if (_context.NCacheLog.IsInfoEnabled)
                                {
                                    _context.NCacheLog.Info("TaskTracker.RemoveDeadClients", "No listeners remaining therefore removing running task " + t.TaskId);
                                }
                                waitingTasks.Remove(t.TaskId);
                                if (_context.PerfStatsColl != null)
                                {
                                    _context.PerfStatsColl.DecrementWaitingTasks();
                                }
                            }
                        }
                    }
                }
            }
            //Remove Iterators from the task output list
            //Remove Listeners for these clients
        }