/// <summary>
        /// Called after the membership has been changed. Lets the members do some
        /// member oriented tasks.
        /// </summary>
        public override void OnAfterMembershipChange()
        {
            //Ata
            //nTrace.error("PartitionedCache.OnAfterMembershipChanged", "membership changed");
            try
            {
                NotifyHashmapChanged(Cluster.LastViewID, _distributionMgr.GetOwnerHashMapTable(Cluster.Renderers), GetClientMappedServers(Cluster.Servers.Clone() as ArrayList),true, true);
            }
            catch (Exception exc)
            {
            }

            base.OnAfterMembershipChange();

            if (_taskUpdate == null)
            {
                _taskUpdate = new PeriodicPresenceAnnouncer(this, _statsReplInterval);
                _context.TimeSched.AddTask(_taskUpdate);
                _statusLatch.SetStatusBit(NodeStatus.Running, NodeStatus.Initializing);

                //Set joining completion status.
                _initialJoiningStatusLatch.SetStatusBit(NodeStatus.Running, NodeStatus.Initializing);
            }

            //muds:
            //coordinator is responsible for carrying out the automatic load
            //balancing...
            if (Cluster.IsCoordinator)
            {
                if (_isAutoBalancingEnabled)
                {
                    if (_autoBalancingTask == null)
                    {
                        _autoBalancingTask = new AutomaticDataLoadBalancer(this, _autoBalancingInterval);
                        _context.TimeSched.AddTask(_autoBalancingTask);
                    }
                }
            }

           StartStateTransfer(false);

            UpdateCacheStatistics();
            //We announces our status aa uninitalized
        }
        /// <summary>
        /// Performs application-defined tasks associated with freeing, releasing, or 
        /// resetting unmanaged resources.
        /// </summary>
        public override void Dispose()
        {
            HasDisposed = true;

            if (_taskUpdate != null)
            {
                _taskUpdate.Cancel();
                _taskUpdate = null;
            }
            if (_autoBalancingTask != null)
            {
                _autoBalancingTask.Cancel();
                _autoBalancingTask = null;
            }
            if (_internalCache != null)
            {
                _internalCache.Dispose();
                _internalCache = null;
            }
            if (_stateTransferTask != null)
            {
                _stateTransferTask.Stop();
                _stateTransferTask = null;
            }

            threadRunning = false;
            base.Dispose();
        }