Пример #1
0
        public StateTxfrInfo TransferBucket(ArrayList bucketIds, bool sparsedBuckets, int expectedTxfrId, bool includeEventMessages = false)
        {
            stream.Seek(0, SeekOrigin.Begin);

            if (bucketIds != null)
            {
                for (int i = bucketIds.Count - 1; i >= 0; i--)
                {
                    int bkId = (int)bucketIds[i];

                    if (_transferType == StateTransferType.MOVE_DATA && !_distMgr.VerifyTemporaryOwnership(bkId, _clientNode))
                    {
                        if (_parent.Context.NCacheLog.IsInfoEnabled)
                        {
                            _parent.Context.NCacheLog.Info("StateTxfrCorresponder.TransferBucket", bkId + " ownership changed");
                        }
                    }
                }
            }

            if (sparsedBuckets)
            {
                return(new StateTxfrInfo(true));
            }
            else
            {
                if (bucketIds != null && bucketIds.Count > 0)
                {
                    foreach (int bucketId in bucketIds)
                    {
                        lock (_parent._bucketStateTxfrStatus.SyncRoot)
                        {
                            _parent._bucketStateTxfrStatus[bucketId] = true;
                        }
                    }

                    if (_currentBucket != (int)bucketIds[0])
                    {
                        if (_parent.Context.NCacheLog.IsInfoEnabled)
                        {
                            _parent.Context.NCacheLog.Info("StateTxfrCorresponder.TxfrBucket", "bucketid : " + bucketIds[0] + " exptxfrId : " + expectedTxfrId);
                        }

                        _lastTxfrId = expectedTxfrId;
                        //request for a new bucket. get its key list from parent.
                        _currentBucket = (int)bucketIds[0];
                        bool enableLogs = _transferType == StateTransferType.MOVE_DATA ? true : false;
                        _parent.InternalCache.GetKeyList(_currentBucket, enableLogs, out _keyList);
                        _collectionStateTransferStarted = false;
                        _collectionsList      = null;
                        _lastStateTrxferInfo  = null;
                        _topicWiseMessageList = _parent.InternalCache.GetMessageList(_currentBucket, includeEventMessages);
                        _logableBuckets.Add(_currentBucket);
                        _messageCount = 0;
                        //reset the _lastLogTblCount
                        sendMesages = false;
                    }
                    else
                    {
                        if (_parent.Context.NCacheLog.IsInfoEnabled)
                        {
                            _parent.Context.NCacheLog.Info("StateTxfrCorresponder.TxfrBucket", "bucketid : " + bucketIds[0] + " exptxfrId : " + expectedTxfrId);
                        }
                        //remove all the last sent keys from keylist that has not been
                        //modified during this time.
                        if (expectedTxfrId > _lastTxfrId)
                        {
                            if (_keyList != null && _keyList.Count > 0)
                            {
                                lock (_keyList.SyncRoot)
                                {
                                    _keyList.RemoveRange(0, _keyCount);
                                    _keyCount = 0;
                                }

                                if (_keyList.Count == 0 && _collectionsList != null && _collectionsList.Count > 0)
                                {
                                    _keyList = _collectionsList;
                                    _collectionStateTransferStarted = true;
                                    _collectionsList = null;
                                }
                            }
                            else if (_topicWiseMessageList != null && _messageCount > 0)
                            {
                                ArrayList removedTopics = new ArrayList();

                                foreach (DictionaryEntry topicWiseMessage in _topicWiseMessageList)
                                {
                                    ClusteredArrayList messageList = topicWiseMessage.Value as ClusteredArrayList;

                                    if (_messageCount <= 0)
                                    {
                                        break;
                                    }

                                    if (_messageCount < messageList.Count)
                                    {
                                        messageList.RemoveRange(0, _messageCount);
                                        _messageCount = 0;
                                    }
                                    else
                                    {
                                        _messageCount -= messageList.Count;
                                        removedTopics.Add(topicWiseMessage.Key);
                                    }
                                }

                                foreach (string topic in removedTopics)
                                {
                                    _topicWiseMessageList.Remove(topic);
                                }
                            }
                            _lastTxfrId          = expectedTxfrId;
                            _lastStateTrxferInfo = null;
                        }
                        else if (_lastStateTrxferInfo != null)
                        {
                            return(_lastStateTrxferInfo);
                        }
                    }
                }
                else
                {
                    return(new StateTxfrInfo(new HashVector(), true, 0, null, DataType.None));
                }

                //take care that we need to send data in chunks if
                //bucket is too large.
                _lastStateTrxferInfo = GetData(_currentBucket, includeEventMessages);
                return(_lastStateTrxferInfo);
            }
        }
Пример #2
0
        public StateTxfrInfo TransferBucket(ArrayList bucketIds, bool sparsedBuckets, int expectedTxfrId)
        {
            if (bucketIds != null)
            {
                for (int i = bucketIds.Count - 1; i >= 0; i--)
                {
                    int bkId = (int)bucketIds[i];
                    if (_transferType == StateTransferType.MOVE_DATA && !_distMgr.VerifyTemporaryOwnership(bkId, _clientNode))
                    {
                        if (_parent.Context.NCacheLog.IsInfoEnabled)
                        {
                            _parent.Context.NCacheLog.Info("StateTxfrCorresponder.TransferBucket", bkId + " ownership changed");
                        }
                    }
                }
            }

            if (sparsedBuckets)
            {
                return(GetData(bucketIds));
            }
            else
            {
                if (bucketIds != null && bucketIds.Count > 0)
                {
                    foreach (int bucketId in bucketIds)
                    {
                        lock (_parent._bucketStateTxfrStatus.SyncRoot)
                        {
                            _parent._bucketStateTxfrStatus[bucketId] = true;
                        }
                    }

                    if (_currentBucket != (int)bucketIds[0])
                    {
                        if (_parent.Context.NCacheLog.IsInfoEnabled)
                        {
                            _parent.Context.NCacheLog.Info("StateTxfrCorresponder.TxfrBucket", "bucketid : " + bucketIds[0] + " exptxfrId : " + expectedTxfrId);
                        }

                        _lastTxfrId = expectedTxfrId;
                        //request for a new bucket.
                        //get its key list from parent.
                        _currentBucket = (int)bucketIds[0];
                        bool      enableLogs = _transferType == StateTransferType.MOVE_DATA ? true : false;
                        ArrayList keyList    = _parent.InternalCache.GetKeyList(_currentBucket, enableLogs);
                        _logableBuckets.Add(_currentBucket);

                        if (keyList != null)
                        {
                            _keyList = keyList.Clone() as ArrayList;
                        }

                        //muds:
                        //reset the _lastLogTblCount
                        _sendLogData = false;
                    }
                    else
                    {
                        if (_parent.Context.NCacheLog.IsInfoEnabled)
                        {
                            _parent.Context.NCacheLog.Info("StateTxfrCorresponder.TxfrBucket", "bucketid : " + bucketIds[0] + " exptxfrId : " + expectedTxfrId);
                        }
                        //remove all the last sent keys from keylist that has not been
                        //modified during this time.
                        if (_keyList != null && expectedTxfrId > _lastTxfrId)
                        {
                            lock (_keyList.SyncRoot)
                            {
                                _keyList.RemoveRange(0, _keyCount);
                                _keyCount = 0;
                            }
                            _lastTxfrId = expectedTxfrId;
                        }
                    }
                }
                else
                {
                    return(new StateTxfrInfo(new Hashtable(), null, null, true));
                }


                //take care that we need to send data in chunks if
                //bucket is too large.
                return(GetData(_currentBucket));
            }
        }