internal void ResetResponseNodeForShutDown(Common.Net.Address ip) { lock (_responseMutex) { if (_responses.ContainsKey(ip)) { ResponseList responseList = _responses[ip]; responseList.Clear(); responseList.AddResponse(new CommandResponse(false, ip)); _resend = true; } } }
internal bool RemoveResponse(Common.Net.Address address) { lock (_responseMutex) { _responses.Remove(address); bool removeRequestFromTable = _responses.Count == 0; return removeRequestFromTable; } }
internal void ResetFailedResponse(Common.Net.Address ip) { lock (_responseMutex) { if (_responses.ContainsKey(ip)) { ResponseList responseList = _responses[ip]; responseList.Clear(); responseList.AddResponse(new CommandResponse(true, ip)); } } }
internal void MergeResponse(Common.Net.Address address, CommandResponse response) { if (_finalResponse == null && response.Type != Alachisoft.NCache.Common.Protobuf.Response.Type.GET_NEXT_CHUNK) { _finalResponse = response; if (response.IsBrokerReset) { MergeFailedResponse(response); } } else { if (response.IsBrokerReset) { MergeFailedResponse(response); } else { IDictionaryEnumerator ide = null; switch (response.Type) { case Alachisoft.NCache.Common.Protobuf.Response.Type.ADD_BULK: case Alachisoft.NCache.Common.Protobuf.Response.Type.INSERT_BULK: case Alachisoft.NCache.Common.Protobuf.Response.Type.GET_BULK: case Alachisoft.NCache.Common.Protobuf.Response.Type.REMOVE_BULK: ide = response.KeyValueDic.GetEnumerator(); while (ide.MoveNext()) { _finalResponse.KeyValueDic[ide.Key] = ide.Value; } break; case Alachisoft.NCache.Common.Protobuf.Response.Type.SEARCH: if ((_finalResponse.ExceptionType == Alachisoft.NCache.Common.Enum.ExceptionType.TYPE_INDEX_NOT_FOUND) || (_finalResponse.ExceptionType == Alachisoft.NCache.Common.Enum.ExceptionType.ATTRIBUTE_INDEX_NOT_FOUND)) { _finalResponse = response; break; } switch (response.ResultSet.AggregateFunctionType) { case Alachisoft.NCache.Common.Enum.AggregateFunctionType.NOTAPPLICABLE: _finalResponse.KeyList.AddRange(response.KeyList); break; default: if (!_finalResponse.ResultSet.IsInitialized) { SetAggregateFunctionResult(); _finalResponse.ResultSet.Initialize(_finalResponse.ResultSet); } _finalResponse.ResultSet.Compile(response.ResultSet); break; } break; case Alachisoft.NCache.Common.Protobuf.Response.Type.SEARCH_ENTRIES: if ((_finalResponse.ExceptionType == Alachisoft.NCache.Common.Enum.ExceptionType.TYPE_INDEX_NOT_FOUND) || (_finalResponse.ExceptionType == Alachisoft.NCache.Common.Enum.ExceptionType.ATTRIBUTE_INDEX_NOT_FOUND)) { _finalResponse = response; break; } switch (response.ResultSet.AggregateFunctionType) { case Alachisoft.NCache.Common.Enum.AggregateFunctionType.NOTAPPLICABLE: ide = response.KeyValueDic.GetEnumerator(); while (ide.MoveNext()) { _finalResponse.KeyValueDic[ide.Key] = ide.Value; } break; default: if (!_finalResponse.ResultSet.IsInitialized) { SetAggregateFunctionResult(); _finalResponse.ResultSet.Initialize(_finalResponse.ResultSet); } _finalResponse.ResultSet.Compile(response.ResultSet); break; } break; case Alachisoft.NCache.Common.Protobuf.Response.Type.GET_NEXT_CHUNK: if (_finalResponse == null) _finalResponse = response; EnumerationDataChunk chunk = null; if (_chunks.ContainsKey(address)) { chunk = _chunks[address]; } else { chunk = new EnumerationDataChunk(); chunk.Data = new List<string>(); _chunks.Add(address, chunk); } for (int i = 0; i < response.NextChunk.Count; i++) { chunk.Data.AddRange(response.NextChunk[i].Data); chunk.Pointer = response.NextChunk[i].Pointer; if (chunk.Pointer.NodeIpAddress==null) chunk.Pointer.NodeIpAddress = address; } _finalResponse.NextChunk = new List<EnumerationDataChunk>(_chunks.Values); break; case Alachisoft.NCache.Common.Protobuf.Response.Type.EXCEPTION: if (response.ExceptionType == Common.Enum.ExceptionType.STATE_TRANSFER_EXCEPTION) { _finalResponse = response; } break; default: break; } } } }
internal void InitializeResponse(Common.Net.Address address) { lock (_responseMutex) { if (!_responses.ContainsKey(address)) { _responses.Add(address, new ResponseList()); } } }
internal bool ExpectingResponseFrom(Common.Net.Address address) { lock (_responseMutex) { bool result = _responses.ContainsKey(address); return result; } }
internal void AddResponse(Common.Net.Address address, CommandResponse response) { _type = response.Type; lock (_responseMutex) { if (_responses.ContainsKey(address)) { ResponseList responseList = _responses[address]; if (!responseList.IsComplete) { responseList.AddResponse(response); } else { if (_reRoutedAddress != null && !_reRoutedAddress.Equals(address)) { if (!_responses.ContainsKey(_reRoutedAddress)) { ResponseList rspList = new ResponseList(); if (!rspList.IsComplete) { rspList.AddResponse(response); } _responses.Add(_reRoutedAddress, rspList); } else { responseList = _responses[_reRoutedAddress]; if (!responseList.IsComplete) { responseList.AddResponse(response); } } } } } } }
internal void AddCommand(Common.Net.Address address, CommandBase command) { _name = command.CommandName; command.Parent = this; if (!_commands.ContainsKey(address)) _commands.Add(address, command); }