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); } }
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)); } }