Exemple #1
0
 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;
         }
     }
 }
Exemple #2
0
        internal bool RemoveResponse(Common.Net.Address address)
        {
            lock (_responseMutex)
            {
                _responses.Remove(address);

                bool removeRequestFromTable = _responses.Count == 0;

                return removeRequestFromTable;
            }
        }
Exemple #3
0
 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));
         }
     }
 }
Exemple #4
0
        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;
                    }
                }
            }
        }
Exemple #5
0
 internal void InitializeResponse(Common.Net.Address address)
 {
     lock (_responseMutex)
     {
         if (!_responses.ContainsKey(address))
         {
             _responses.Add(address, new ResponseList());
         }
     }
 }
Exemple #6
0
 internal bool ExpectingResponseFrom(Common.Net.Address address)
 {
     lock (_responseMutex)
     {
         bool result = _responses.ContainsKey(address);
         return result;
     }
 }
Exemple #7
0
        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);
                                }
                            }
                        }
                    }
                }
            }
        }
Exemple #8
0
        internal void AddCommand(Common.Net.Address address, CommandBase command)
        {
            _name = command.CommandName;
            command.Parent = this;

            if (!_commands.ContainsKey(address))
                _commands.Add(address, command);
        }