Exemple #1
0
        //PROTOBUF
        private CommandInfo ParseCommand(Alachisoft.NCache.Common.Protobuf.Command command, ClientManager clientManager)
        {
            CommandInfo cmdInfo   = new CommandInfo();
            Hashtable   eventList = new Hashtable();

            Alachisoft.NCache.Common.Protobuf.SyncEventsCommand     syncEventsCommand = command.syncEventsCommand;
            List <Alachisoft.NCache.Common.Protobuf.EventIdCommand> eventIds          = syncEventsCommand.eventIds;

            Alachisoft.NCache.Caching.EventId cacheEventId = null;
            foreach (EventIdCommand eventId in eventIds)
            {
                cacheEventId = new Alachisoft.NCache.Caching.EventId();
                cacheEventId.EventUniqueID    = eventId.eventUniqueId;
                cacheEventId.EventCounter     = eventId.eventCounter;
                cacheEventId.OperationCounter = eventId.operationCounter;
                cacheEventId.EventType        = (Persistence.EventType)eventId.eventType;
                cacheEventId.QueryChangeType  = (Caching.Queries.QueryChangeType)eventId.queryChangeType;
                cacheEventId.QueryId          = eventId.queryId;

                if (String.IsNullOrEmpty(cacheEventId.QueryId))
                {
                    cacheEventId.QueryId = null;
                }
                // Need to assing querychnagetype and query id here

                eventList.Add(cacheEventId, null);
            }
            cmdInfo.EventsList = eventList;
            cmdInfo.RequestId  = syncEventsCommand.requestId.ToString();
            return(cmdInfo);
        }
Exemple #2
0
        private CommandInfo ParseCommand(Alachisoft.NCache.Common.Protobuf.Command command, ClientManager clientManager)
        {
            CommandInfo cmdInfo = new CommandInfo();

            Alachisoft.NCache.Common.Protobuf.GetCacheBindingCommand getCacheBindingCommand = command.getCacheBindingCommand;
            cmdInfo.CacheId = getCacheBindingCommand.cacheId;
            return(cmdInfo);
        }
Exemple #3
0
        protected CommandInfo ParseCommand(Alachisoft.NCache.Common.Protobuf.Command command, ClientManager clientManager)
        {
            CommandInfo cmdInfo = new CommandInfo();

            Alachisoft.NCache.Common.Protobuf.PollCommand pollCommand = command.pollCommand;

            cmdInfo.RequestId        = pollCommand.requestId.ToString();
            cmdInfo.ClientLastViewId = command.clientLastViewId;
            cmdInfo.CommandVersion   = command.commandVersion;
            return(cmdInfo);
        }
Exemple #4
0
        private CommandInfo ParseCommand(Caching.Cache cache, Alachisoft.NCache.Common.Protobuf.Command command)
        {
            CommandInfo cmdInfo = new CommandInfo();

            Alachisoft.NCache.Common.Protobuf.AddAttributeCommand addAttributeCommand = command.addAttributeCommand;
            cmdInfo.ExpHint   = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetExpirationHintObj(cache.Context.FakeObjectPool, null, addAttributeCommand.absExpiration, 0, false, serializationContext);
            cmdInfo.Key       = addAttributeCommand.key;
            cmdInfo.RequestId = addAttributeCommand.requestId.ToString();

            return(cmdInfo);
        }
        private GetCacheBindingCommand.CommandInfo ParseCommand(Alachisoft.NCache.Common.Protobuf.Command command, ClientManager clientManager)
        {
            CommandInfo cmdInfo = new CommandInfo();

            Alachisoft.NCache.Common.Protobuf.GetCacheBindingCommand getCacheBindingCommand = command.getCacheBindingCommand;

            cmdInfo.CacheId      = getCacheBindingCommand.cacheId;
            cmdInfo.IsJavaClient = getCacheBindingCommand.isJavaClient;
            cmdInfo.RequestId    = command.requestID.ToString();

            return(cmdInfo);
        }
        private GetCacheManagementPortCommand.CommandInfo ParseCommand(Alachisoft.NCache.Common.Protobuf.Command command, ClientManager clientManager)
        {
            CommandInfo cmdInfo = new CommandInfo();

            Alachisoft.NCache.Common.Protobuf.GetCacheManagementPortCommand getCacheManagementPortCommand = command.getCacheManagementPortCommand;

            cmdInfo.CacheId      = getCacheManagementPortCommand.cacheId;
            cmdInfo.IsJavaClient = getCacheManagementPortCommand.isJavaClient;
            cmdInfo.RequestId    = command.requestID.ToString();
            cmdInfo.Password     = getCacheManagementPortCommand.pwd;
            cmdInfo.UserName     = getCacheManagementPortCommand.userId;

            cmdInfo.PasswordBinary = getCacheManagementPortCommand.binaryPassword;
            cmdInfo.UserNameBinary = getCacheManagementPortCommand.binaryUserId;

            return(cmdInfo);
        }
Exemple #7
0
        private CommandInfo ParseCommand(Alachisoft.NCache.Common.Protobuf.Command command, ClientManager clientManager)
        {
            CommandInfo cmdInfo = new CommandInfo();

            Alachisoft.NCache.Common.Protobuf.DeleteCommand removeCommand = command.deleteCommand;
            cmdInfo.DoAsync         = removeCommand.isAsync;
            cmdInfo.DsItemRemovedId = (short)removeCommand.datasourceItemRemovedCallbackId;
            BitSet bitset = BitSet.CreateAndMarkInUse(clientManager.CacheTransactionalPool, NCModulesConstants.SocketServer);

            bitset.Data            = ((byte)removeCommand.flag);
            cmdInfo.FlagMap        = bitset;
            cmdInfo.Key            = clientManager.CacheTransactionalPool.StringPool.GetString(removeCommand.key);
            cmdInfo.LockAccessType = (LockAccessType)removeCommand.lockAccessType;
            cmdInfo.LockId         = removeCommand.lockId;
            cmdInfo.RequestId      = removeCommand.requestId;
            cmdInfo.Version        = removeCommand.version;
            cmdInfo.ProviderName   = !string.IsNullOrEmpty(removeCommand.providerName) ? removeCommand.providerName : null;

            return(cmdInfo);
        }
Exemple #8
0
        //PROTOBUF
        private CommandInfo ParseCommand(Alachisoft.NCache.Common.Protobuf.Command command, ClientManager clientManager)
        {
            CommandInfo cmdInfo   = new CommandInfo();
            Hashtable   eventList = new Hashtable();

            Alachisoft.NCache.Common.Protobuf.SyncEventsCommand     syncEventsCommand = command.syncEventsCommand;
            List <Alachisoft.NCache.Common.Protobuf.EventIdCommand> eventIds          = syncEventsCommand.eventIds;

            Alachisoft.NCache.Caching.EventId cacheEventId = null;
            foreach (EventIdCommand eventId in eventIds)
            {
                cacheEventId = new Alachisoft.NCache.Caching.EventId();
                cacheEventId.EventUniqueID    = eventId.eventUniqueId;
                cacheEventId.EventCounter     = eventId.eventCounter;
                cacheEventId.OperationCounter = eventId.operationCounter;
                cacheEventId.EventType        = (Persistence.EventType)eventId.eventType;
                eventList.Add(cacheEventId, null);
            }
            cmdInfo.EventsList = eventList;
            cmdInfo.RequestId  = syncEventsCommand.requestId.ToString();
            return(cmdInfo);
        }
        private CommandInfo ParseCommand(Alachisoft.NCache.Common.Protobuf.Command command, ClientManager clientManager)
        {
            CommandInfo cmdInfo = new CommandInfo();

            Alachisoft.NCache.Common.Protobuf.GetCacheItemCommand getCacheItemCommand = command.getCacheItemCommand;

            cmdInfo.CacheItemVersion = getCacheItemCommand.version;
            BitSet bitset = BitSet.CreateAndMarkInUse(clientManager.CacheTransactionalPool, NCModulesConstants.SocketServer);

            bitset.Data            = ((byte)getCacheItemCommand.flag);
            cmdInfo.FlagMap        = bitset;
            cmdInfo.Group          = null;
            cmdInfo.Key            = clientManager.CacheTransactionalPool.StringPool.GetString(getCacheItemCommand.key);
            cmdInfo.LockAccessType = (LockAccessType)getCacheItemCommand.lockInfo.lockAccessType;
            cmdInfo.LockId         = getCacheItemCommand.lockInfo.lockId;
            cmdInfo.LockTimeout    = new TimeSpan(getCacheItemCommand.lockInfo.lockTimeout);
            cmdInfo.ProviderName   = getCacheItemCommand.providerName.Length == 0 ? null : getCacheItemCommand.providerName;
            cmdInfo.RequestId      = getCacheItemCommand.requestId.ToString();
            MiscUtil.ReturnBitsetToPool(cmdInfo.FlagMap, clientManager.CacheTransactionalPool);

            return(cmdInfo);
        }
Exemple #10
0
        public override void ExecuteCommand(ClientManager clientManager, Alachisoft.NCache.Common.Protobuf.Command command)
        {
            CommandInfo cmdInfo;

            try
            {
                cmdInfo = ParseCommand(command, clientManager);
            }
            catch (System.Exception exc)
            {
                _syncEventResult = OperationResult.Failure;
                if (!base.immatureId.Equals("-2"))
                {
                    //PROTOBUF:RESPONSE
                    _serializedResponsePackets.Add(Alachisoft.NCache.Common.Util.ResponseHelper.SerializeExceptionResponseWithType(exc, command.requestID, command.commandID, clientManager.ClientVersion));
                    //_resultPacket = clientManager.ReplyPacket(base.ExceptionPacket(exc, base.immatureId), base.ParsingExceptionMessage(exc));
                }
                return;
            }

            //TODO
            byte[] data = null;

            try
            {
                NCache nCache = clientManager.CmdExecuter as NCache;

                EventStatus eventStatus = nCache.GetEventsStatus();
                List <Alachisoft.NCache.Persistence.Event> syncEventResult = nCache.Cache.GetFilteredEvents(clientManager.ClientID, cmdInfo.EventsList, eventStatus);
                SyncEventResponseBuilder.BuildResponse(syncEventResult, cmdInfo.RequestId, _serializedResponsePackets, clientManager.ClientID, command.commandID, nCache.Cache, clientManager);
            }
            catch (System.Exception exc)
            {
                _syncEventResult = OperationResult.Failure;
                //PROTOBUF:RESPONSE
                _serializedResponsePackets.Add(Alachisoft.NCache.Common.Util.ResponseHelper.SerializeExceptionResponseWithType(exc, command.requestID, command.commandID, clientManager.ClientVersion));
            }
        }
Exemple #11
0
 public override void ExecuteCommand(ClientManager clientManager, Alachisoft.NCache.Common.Protobuf.Command command)
 {
 }
Exemple #12
0
        public override void ExecuteCommand(ClientManager clientManager, Alachisoft.NCache.Common.Protobuf.Command command)
        {
            int       overload;
            string    exception = null;
            Stopwatch stopWatch = new Stopwatch();

            stopWatch.Start();
            try
            {
                overload = command.MethodOverload;
                cmdInfo  = ParseCommand(command, clientManager);
            }
            catch (System.Exception exc)
            {
                _removeResult = OperationResult.Failure;
                if (!base.immatureId.Equals("-2"))
                {
                    //PROTOBUF:RESPONSE
                    _serializedResponsePackets.Add(Alachisoft.NCache.Common.Util.ResponseHelper.SerializeExceptionResponseWithType(exc, command.requestID, command.commandID, clientManager.ClientVersion));
                }
                return;
            }

            CompressedValueEntry flagValueEntry = null;
            NCache nCache = clientManager.CmdExecuter as NCache;

            if (!cmdInfo.DoAsync)
            {
                OperationContext operationContext = null;

                try
                {
                    Notifications notification = null;
                    if (cmdInfo.DsItemRemovedId != -1)
                    {
                        notification = new Notifications(clientManager.ClientID, -1, -1, -1, -1, cmdInfo.DsItemRemovedId
                                                         , Runtime.Events.EventDataFilter.None, Runtime.Events.EventDataFilter.None); //DataFilter not required
                    }

                    operationContext = _operationContext;
                    operationContext.Add(OperationContextFieldName.OperationType, OperationContextOperationType.CacheOperation);
                    operationContext.Add(OperationContextFieldName.ClientId, clientManager.ClientID);
                    operationContext.Add(OperationContextFieldName.MethodOverload, overload);
                    operationContext.Add(OperationContextFieldName.RaiseCQNotification, true);
                    CommandsUtil.PopulateClientIdInContext(ref operationContext, clientManager.ClientAddress);
                    flagValueEntry = nCache.Cache.Remove(cmdInfo.Key, cmdInfo.FlagMap, notification, cmdInfo.LockId, cmdInfo.Version, cmdInfo.LockAccessType, cmdInfo.ProviderName, operationContext);
                    stopWatch.Stop();
                    UserBinaryObject ubObject = null;
                    if (flagValueEntry != null)
                    {
                        if (flagValueEntry.Value is UserBinaryObject)
                        {
                            ubObject = (UserBinaryObject)flagValueEntry.Value;
                        }
                        else
                        {
                            var flag = flagValueEntry.Flag;
                            ubObject = (flagValueEntry == null) ? null : (UserBinaryObject)nCache.Cache.SocketServerDataService.GetClientData(flagValueEntry.Value, ref flag, LanguageContext.DOTNET);
                        }
                    }


                    //PROTOBUF:RESPONSE
                    RemoveResponse removeResponse = _removeResponse;

                    if (ubObject != null)
                    {
                        removeResponse.value.AddRange(ubObject.DataList);
                        removeResponse.flag     = flagValueEntry.Flag.Data;
                        removeResponse.itemType = MiscUtil.EntryTypeToProtoItemType(flagValueEntry.Type);
                    }

                    if (clientManager.ClientVersion >= 5000)
                    {
                        ResponseHelper.SetResponse(removeResponse, command.requestID, command.commandID);
                        _serializedResponsePackets.Add(ResponseHelper.SerializeResponse(removeResponse, Response.Type.REMOVE));
                    }
                    else
                    {
                        Response response = Stash.ProtobufResponse;
                        {
                            response.remove = removeResponse;
                        };

                        ResponseHelper.SetResponse(response, command.requestID, command.commandID, Response.Type.REMOVE);
                        _serializedResponsePackets.Add(Alachisoft.NCache.Common.Util.ResponseHelper.SerializeResponse(response));
                    }
                }
                catch (System.Exception exc)
                {
                    _removeResult = OperationResult.Failure;
                    exception     = exc.ToString();

                    _serializedResponsePackets.Add(Alachisoft.NCache.Common.Util.ResponseHelper.SerializeExceptionResponseWithType(exc, command.requestID, command.commandID, clientManager.ClientVersion));
                }
                finally
                {
                    operationContext?.MarkFree(NCModulesConstants.SocketServer);

                    cmdInfo.FlagMap?.MarkFree(NCModulesConstants.SocketServer);
                    TimeSpan executionTime = stopWatch.Elapsed;

                    if (flagValueEntry != null)
                    {
                        MiscUtil.ReturnEntryToPool(flagValueEntry.Entry, clientManager.CacheTransactionalPool);
                        MiscUtil.ReturnCompressedEntryToPool(flagValueEntry, clientManager.CacheTransactionalPool);
                    }

                    try
                    {
                        if (Alachisoft.NCache.Management.APILogging.APILogManager.APILogManger != null && Alachisoft.NCache.Management.APILogging.APILogManager.EnableLogging)
                        {
                            APILogItemBuilder log = new APILogItemBuilder(MethodsName.REMOVE.ToLower());
                            log.GenerateRemoveAPILogItem(cmdInfo.Key, cmdInfo.FlagMap, cmdInfo.LockId, (long)cmdInfo.Version, cmdInfo.LockAccessType, cmdInfo.ProviderName, cmdInfo.DsItemRemovedId, overload, exception, executionTime, clientManager.ClientID.ToLower(), clientManager.ClientSocketId.ToString());
                        }
                    }
                    catch
                    {
                    }
                }
            }

            else
            {
                OperationContext operationContext = null;

                try
                {
                    cmdInfo.FlagMap = new BitSet {
                        Data = cmdInfo.FlagMap.Data
                    };

                    object[] package = null;
                    if (cmdInfo.RequestId != -1 || cmdInfo.DsItemRemovedId != -1)
                    {
                        package = new object[] { cmdInfo.Key, cmdInfo.FlagMap, new Notifications(clientManager.ClientID,
                                                                                                 Convert.ToInt32(cmdInfo.RequestId),
                                                                                                 -1,
                                                                                                 -1,
                                                                                                 (short)(cmdInfo.RequestId == -1 ? -1 : 0),
                                                                                                 cmdInfo.DsItemRemovedId
                                                                                                 , Runtime.Events.EventDataFilter.None, Runtime.Events.EventDataFilter.None), cmdInfo.ProviderName }; //DataFilter not required
                    }
                    else
                    {
                        package = new object[] { cmdInfo.Key, cmdInfo.FlagMap, null, cmdInfo.ProviderName };
                    }

                    operationContext = OperationContext.CreateAndMarkInUse(clientManager.CacheFakePool, NCModulesConstants.SocketServer);
                    operationContext.Add(OperationContextFieldName.OperationType, OperationContextOperationType.CacheOperation);
                    operationContext.Add(OperationContextFieldName.RaiseCQNotification, true);
                    operationContext.Add(OperationContextFieldName.MethodOverload, overload);
                    nCache.Cache.RemoveAsync(package, operationContext);
                    stopWatch.Stop();
                }
                finally
                {
                    operationContext?.MarkFree(NCModulesConstants.SocketServer);

                    TimeSpan executionTime = stopWatch.Elapsed;
                    try
                    {
                        if (Alachisoft.NCache.Management.APILogging.APILogManager.APILogManger != null && Alachisoft.NCache.Management.APILogging.APILogManager.EnableLogging)
                        {
                            APILogItemBuilder log = new APILogItemBuilder(MethodsName.RemoveAsync.ToLower());
                            log.GenerateRemoveAPILogItem(cmdInfo.Key, cmdInfo.FlagMap, cmdInfo.LockId, (long)cmdInfo.Version, cmdInfo.LockAccessType, cmdInfo.ProviderName, cmdInfo.DsItemRemovedId, overload, exception, executionTime, clientManager.ClientID.ToLower(), clientManager.ClientSocketId.ToString());
                        }
                    }
                    catch { }
                }
            }
        }
Exemple #13
0
        //PROTOBUF
        protected virtual CommandInfo ParseCommand(Alachisoft.NCache.Common.Protobuf.Command command, ClientManager clientManager, string cacheId)
        {
            if (ServerMonitor.MonitorActivity)
            {
                ServerMonitor.LogClientActivity("AddInsertCmd.Parse", "enter");
            }

            CommandInfo cmdInfo = new CommandInfo();

            Hashtable queryInfoHashtable = null;

            string version = string.Empty;

            switch (command.type)
            {
            case Alachisoft.NCache.Common.Protobuf.Command.Type.ADD:
                Alachisoft.NCache.Common.Protobuf.AddCommand addCommand = command.addCommand;
                cmdInfo.Key            = addCommand.key;
                cmdInfo.EvictionHint   = new PriorityEvictionHint((CacheItemPriority)addCommand.priority);
                cmdInfo.ExpirationHint = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetExpirationHintObj(addCommand.absExpiration, addCommand.sldExpiration, serializationContext);
                cmdInfo.Flag           = new BitSet((byte)addCommand.flag);
                cmdInfo.queryInfo      = new Hashtable();

                version = command.version;

                //version added in 4.2 [Dated: 18-Nov-2013; Author: Sami]
                if (string.IsNullOrEmpty(version))
                {
                    queryInfoHashtable = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromQueryInfoObj(addCommand.queryInfo);
                }
                else
                {
                    ObjectQueryInfo objectQueryInfo;
                    objectQueryInfo = addCommand.objectQueryInfo;

                    queryInfoHashtable = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromQueryInfoObj(objectQueryInfo.queryInfo);
                }

                if (queryInfoHashtable != null)
                {
                    if (cmdInfo.queryInfo == null)
                    {
                        cmdInfo.queryInfo = new Hashtable();
                    }
                    cmdInfo.queryInfo.Add("query-info", queryInfoHashtable);
                }

                cmdInfo.RemoveCallbackId = (short)addCommand.removeCallbackId;
                //for old clients data fitler information will be missing
                if (addCommand.removeDataFilter != -1)
                {
                    cmdInfo.RemoveDataFilter = (int)addCommand.removeDataFilter;
                }
                else
                {
                    cmdInfo.RemoveDataFilter = (int)Runtime.Events.EventDataFilter.DataWithMetadata;
                }

                cmdInfo.RequestId        = addCommand.requestId.ToString();
                cmdInfo.UpdateCallbackId = (short)addCommand.updateCallbackId;

                if (addCommand.updateDataFilter != -1)
                {
                    cmdInfo.UpdateDataFilter = addCommand.updateDataFilter;
                }
                else
                {
                    cmdInfo.UpdateDataFilter = (int)Runtime.Events.EventDataFilter.None;
                }

                cmdInfo.value = UserBinaryObject.CreateUserBinaryObject(addCommand.data.ToArray());
                break;

            case Alachisoft.NCache.Common.Protobuf.Command.Type.INSERT:
                Alachisoft.NCache.Common.Protobuf.InsertCommand insertCommand = command.insertCommand;
                cmdInfo.Key            = insertCommand.key;
                cmdInfo.EvictionHint   = new PriorityEvictionHint((CacheItemPriority)insertCommand.priority);
                cmdInfo.ExpirationHint = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetExpirationHintObj(insertCommand.absExpiration, insertCommand.sldExpiration, serializationContext);
                cmdInfo.Flag           = new BitSet((byte)insertCommand.flag);
                version = command.version;

                //version added in 4.2 [Dated: 18-Nov-2013; Author: Sami]
                if (string.IsNullOrEmpty(version))
                {
                    queryInfoHashtable = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromQueryInfoObj(insertCommand.queryInfo);
                }
                else
                {
                    ObjectQueryInfo objectQueryInfo;
                    objectQueryInfo = insertCommand.objectQueryInfo;

                    queryInfoHashtable = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromQueryInfoObj(objectQueryInfo.queryInfo);
                }

                if (queryInfoHashtable != null)
                {
                    if (cmdInfo.queryInfo == null)
                    {
                        cmdInfo.queryInfo = new Hashtable();
                    }
                    cmdInfo.queryInfo.Add("query-info", queryInfoHashtable);
                }

                cmdInfo.RemoveCallbackId = (short)insertCommand.removeCallbackId;

                if (insertCommand.removeDataFilter != -1)
                {
                    cmdInfo.RemoveDataFilter = insertCommand.removeDataFilter;
                }
                else
                {
                    cmdInfo.RemoveDataFilter = (int)Runtime.Events.EventDataFilter.DataWithMetadata;
                }

                cmdInfo.RequestId        = insertCommand.requestId.ToString();
                cmdInfo.UpdateCallbackId = (short)insertCommand.updateCallbackId;

                if (insertCommand.updateDataFilter != -1)
                {
                    cmdInfo.UpdateDataFilter = insertCommand.updateDataFilter;
                }
                else
                {
                    cmdInfo.UpdateDataFilter = (int)Runtime.Events.EventDataFilter.None;
                }
                cmdInfo.LockAccessType = (LockAccessType)insertCommand.lockAccessType;
                cmdInfo.LockId         = insertCommand.lockId;
                cmdInfo.value          = UserBinaryObject.CreateUserBinaryObject(insertCommand.data.ToArray());
                break;
            }
            return(cmdInfo);
        }
        public override void ExecuteCommand(ClientManager clientManager, Alachisoft.NCache.Common.Protobuf.Command command)
        {
            int       overload;
            string    exception = null;
            Stopwatch stopWatch = new Stopwatch();

            stopWatch.Start();
            try
            {
                overload = command.MethodOverload;
                cmdInfo  = ParseCommand(command, clientManager);
            }
            catch (System.Exception exc)
            {
                if (!base.immatureId.Equals("-2"))
                {
                    //_resultPacket = clientManager.ReplyPacket(base.ExceptionPacket(exc, base.immatureId), base.ParsingExceptionMessage(exc));
                    _serializedResponsePackets.Add(Alachisoft.NCache.Common.Util.ResponseHelper.SerializeExceptionResponseWithType(exc, command.requestID, command.commandID, clientManager.ClientVersion));
                }
                return;
            }

            NCache     nCache = clientManager.CmdExecuter as NCache;
            CacheEntry entry  = null;

            try
            {
                object           lockId           = cmdInfo.LockId;
                DateTime         lockDate         = new DateTime();
                OperationContext operationContext = new OperationContext(OperationContextFieldName.OperationType, OperationContextOperationType.CacheOperation);
                // ReadThruOptions readOptions = new ReadThruOptions(cmdInfo.ReadMode, cmdInfo.ProviderName);
                //operationContext.Add(OperationContextFieldName.ReadThruOptions, readOptions);
                operationContext.Add(OperationContextFieldName.GenerateQueryInfo, true);

                entry = (CacheEntry)nCache.Cache.GetCacheEntry(cmdInfo.Key, cmdInfo.Group, cmdInfo.SubGroup, ref lockId, ref lockDate, cmdInfo.LockTimeout, cmdInfo.LockAccessType, operationContext, ref cmdInfo.CacheItemVersion);
                stopWatch.Stop();


                GetCacheItemResponse getCacheItemResponse = new GetCacheItemResponse();
                getCacheItemResponse.lockId    = lockId == null ? string.Empty : lockId.ToString();
                getCacheItemResponse.lockTicks = lockDate.Ticks;
                if (clientManager.ClientVersion >= 5000)
                {
                    ResponseHelper.SetResponse(getCacheItemResponse, command.requestID, command.commandID);
                    if (entry == null)
                    {
                        _serializedResponsePackets.Add(ResponseHelper.SerializeResponse(getCacheItemResponse, Response.Type.GET_CACHE_ITEM));
                        return;
                    }
                    else
                    {
                        getCacheItemResponse.itemType = MiscUtil.EntryTypeToProtoItemType(entry.Type);
                    }
                    getCacheItemResponse = PopulateResponse(entry, getCacheItemResponse, clientManager, nCache.Cache);
                    _serializedResponsePackets.Add(ResponseHelper.SerializeResponse(getCacheItemResponse, Response.Type.GET_CACHE_ITEM));
                }

                else
                {
                    Response response = new Response();
                    ResponseHelper.SetResponse(response, command.requestID, command.commandID, Response.Type.GET_CACHE_ITEM);
                    if (entry == null)
                    {
                        response.getItem = getCacheItemResponse;
                        _serializedResponsePackets.Add(Alachisoft.NCache.Common.Util.ResponseHelper.SerializeResponse(response));
                        return;
                    }
                    else
                    {
                        getCacheItemResponse.itemType = MiscUtil.EntryTypeToProtoItemType(entry.Type);
                    }
                    getCacheItemResponse = PopulateResponse(entry, getCacheItemResponse, clientManager, nCache.Cache);
                    response.getItem     = getCacheItemResponse;
                    _serializedResponsePackets.Add(Alachisoft.NCache.Common.Util.ResponseHelper.SerializeResponse(response));
                }
            }
            catch (System.Exception exc)
            {
                exception = exc.ToString();
                //_resultPacket = clientManager.ReplyPacket(base.ExceptionPacket(exc, cmdInfo.RequestId), base.ExceptionMessage(exc));
                _serializedResponsePackets.Add(Alachisoft.NCache.Common.Util.ResponseHelper.SerializeExceptionResponseWithType(exc, command.requestID, command.commandID, clientManager.ClientVersion));
            }
            finally
            {
                TimeSpan executionTime = stopWatch.Elapsed;
                try
                {
                    if (Alachisoft.NCache.Management.APILogging.APILogManager.APILogManger != null && Alachisoft.NCache.Management.APILogging.APILogManager.EnableLogging)
                    {
                        int result = 0;
                        if (entry != null)
                        {
                            result = 1;
                        }
                        else
                        {
                            result = 0;
                        }

                        APILogItemBuilder log = new APILogItemBuilder(MethodsName.GetCacheItem.ToLower());
                    }
                    if (entry != null)
                    {
                        MiscUtil.ReturnEntryToPool(entry, clientManager.CacheTransactionalPool);
                    }
                }
                catch
                {
                }
                if (entry != null)
                {
                    entry.MarkFree(NCModulesConstants.Global);
                }
                cmdInfo.FlagMap?.MarkFree(NCModulesConstants.SocketServer);
            }
        }
Exemple #15
0
        public override void ExecuteCommand(ClientManager clientManager, Alachisoft.NCache.Common.Protobuf.Command command)
        {
            int       overload;
            string    exception = null;
            Stopwatch stopWatch = new Stopwatch();

            stopWatch.Start();
            try
            {
                try
                {
                    overload = command.MethodOverload;
                    cmdInfo  = ParseCommand(command, clientManager);
                }
                catch (System.Exception exc)
                {
                    _removeResult = OperationResult.Failure;
                    if (!base.immatureId.Equals("-2"))
                    {
                        //PROTOBUF:RESPONSE
                        _serializedResponsePackets.Add(Alachisoft.NCache.Common.Util.ResponseHelper.SerializeExceptionResponseWithType(exc, command.requestID, command.commandID, clientManager.ClientVersion));
                    }
                    return;
                }
                NCache nCache = clientManager.CmdExecuter as NCache;
                if (!cmdInfo.DoAsync)
                {
                    try
                    {
                        Notifications notification = null;
                        if (cmdInfo.DsItemRemovedId != -1)
                        {
                            notification = new Notifications(clientManager.ClientID, -1, -1, -1, -1, cmdInfo.DsItemRemovedId
                                                             , Runtime.Events.EventDataFilter.None, Runtime.Events.EventDataFilter.None); //DataFilter not required
                        }

                        OperationContext operationContext = new OperationContext(OperationContextFieldName.OperationType, OperationContextOperationType.CacheOperation);
                        operationContext.Add(OperationContextFieldName.RaiseCQNotification, true);
                        operationContext.Add(OperationContextFieldName.MethodOverload, overload);
                        operationContext.Add(OperationContextFieldName.ClientId, clientManager.ClientID);
                        CommandsUtil.PopulateClientIdInContext(ref operationContext, clientManager.ClientAddress);

                        nCache.Cache.Delete(cmdInfo.Key, cmdInfo.FlagMap, notification, cmdInfo.LockId, cmdInfo.Version, cmdInfo.LockAccessType, operationContext);
                        stopWatch.Stop();
                        //PROTOBUF: RESPONSE
                        DeleteResponse deleteResponse = new DeleteResponse();

                        if (clientManager.ClientVersion >= 5000)
                        {
                            ResponseHelper.SetResponse(deleteResponse, command.requestID, command.commandID);
                            _serializedResponsePackets.Add(ResponseHelper.SerializeResponse(deleteResponse, Response.Type.DELETE));
                        }
                        else
                        {
                            //PROTOBUF:RESPONSE
                            Response response = new Response();
                            response.deleteResponse = deleteResponse;
                            ResponseHelper.SetResponse(response, command.requestID, command.commandID, Response.Type.DELETE);
                            _serializedResponsePackets.Add(Alachisoft.NCache.Common.Util.ResponseHelper.SerializeResponse(response));
                        }
                    }
                    catch (System.Exception exc)
                    {
                        _removeResult = OperationResult.Failure;
                        exception     = exc.ToString();
                        //PROTOBUF:RESPONSE
                        _serializedResponsePackets.Add(Alachisoft.NCache.Common.Util.ResponseHelper.SerializeExceptionResponseWithType(exc, command.requestID, command.commandID, clientManager.ClientVersion));
                    }
                    finally
                    {
                        TimeSpan executionTime = stopWatch.Elapsed;
                        try
                        {
                            if (Alachisoft.NCache.Management.APILogging.APILogManager.APILogManger != null && Alachisoft.NCache.Management.APILogging.APILogManager.EnableLogging)
                            {
                                APILogItemBuilder log = new APILogItemBuilder(MethodsName.DELETE.ToLower());
                                log.GenerateDeleteAPILogItem(cmdInfo.Key, cmdInfo.FlagMap, cmdInfo.LockId, (long)cmdInfo.Version, cmdInfo.LockAccessType, cmdInfo.ProviderName, cmdInfo.DsItemRemovedId, overload, exception, executionTime, clientManager.ClientID.ToLower(), clientManager.ClientSocketId.ToString());
                            }
                        }
                        catch { }
                    }
                }

                else
                {
                    object[] package = null;
                    if (cmdInfo.RequestId != -1 || cmdInfo.DsItemRemovedId != -1)
                    {
                        package = new object[] { cmdInfo.Key, cmdInfo.FlagMap, new Notifications(clientManager.ClientID,

                                                                                                 Convert.ToInt32(cmdInfo.RequestId),
                                                                                                 -1,
                                                                                                 -1,
                                                                                                 (short)(cmdInfo.RequestId == -1 ? -1 : 0),
                                                                                                 cmdInfo.DsItemRemovedId,
                                                                                                 EventDataFilter.None, EventDataFilter.None) }; //DataFilter not required
                    }
                    else
                    {
                        package = new object[] { cmdInfo.Key, cmdInfo.FlagMap, null, cmdInfo.ProviderName };
                    }

                    OperationContext operationContext = new OperationContext(OperationContextFieldName.OperationType, OperationContextOperationType.CacheOperation);
                    operationContext.Add(OperationContextFieldName.RaiseCQNotification, true);
                    operationContext.Add(OperationContextFieldName.MethodOverload, overload);
                    nCache.Cache.RemoveAsync(package, operationContext);
                    stopWatch.Stop();
                    TimeSpan executionTime = stopWatch.Elapsed;
                    try
                    {
                        if (Alachisoft.NCache.Management.APILogging.APILogManager.APILogManger != null && Alachisoft.NCache.Management.APILogging.APILogManager.EnableLogging)
                        {
                            APILogItemBuilder log = new APILogItemBuilder(MethodsName.DELETEASYNC.ToLower());
                            log.GenerateDeleteAPILogItem(cmdInfo.Key, cmdInfo.FlagMap, cmdInfo.LockId, (long)cmdInfo.Version, cmdInfo.LockAccessType, cmdInfo.ProviderName, cmdInfo.DsItemRemovedId, overload, exception, executionTime, clientManager.ClientID.ToLower(), clientManager.ClientSocketId.ToString());
                        }
                    }
                    catch { }
                }
            }
            finally
            {
                MiscUtil.ReturnBitsetToPool(cmdInfo.FlagMap, clientManager.CacheTransactionalPool);
                cmdInfo.FlagMap.MarkFree(NCModulesConstants.SocketServer);
            }
        }
        protected CommandInfo ParseCommand(Alachisoft.NCache.Common.Protobuf.Command command, ClientManager clientManager, string cacheId)
        {
            CommandInfo cmdInfo     = new CommandInfo();
            int         packageSize = 0;
            int         index       = 0;
            string      version     = string.Empty;
            NCache      nCache      = clientManager.CmdExecuter as NCache;

            Caching.Cache cache = nCache.Cache;
            Hashtable     queryInfoHashtable = null;
            Hashtable     tagHashtable       = null;
            Hashtable     namedTagHashtable  = null;

            try
            {
                switch (command.type)
                {
                case Alachisoft.NCache.Common.Protobuf.Command.Type.ADD_BULK:
                    Alachisoft.NCache.Common.Protobuf.BulkAddCommand bulkAddCommand = command.bulkAddCommand;
                    packageSize = bulkAddCommand.addCommand.Count;

                    cmdInfo.Keys    = new string[packageSize];
                    cmdInfo.Entries = new CacheEntry[packageSize];
                    cmdInfo.OnDsItemsAddedCallback = (short)bulkAddCommand.datasourceItemAddedCallbackId;
                    cmdInfo.ProviderName           = bulkAddCommand.providerName.Length == 0 ? null : bulkAddCommand.providerName;
                    cmdInfo.RequestId         = bulkAddCommand.requestId;
                    cmdInfo.ClientLastViewId  = command.clientLastViewId;
                    cmdInfo.IntendedRecipient = command.intendedRecipient;

                    cmdInfo.returnVersion = bulkAddCommand.returnVersions;

                    foreach (Alachisoft.NCache.Common.Protobuf.AddCommand addCommand in bulkAddCommand.addCommand)
                    {
                        cmdInfo.Keys[index] = addCommand.key;
                        cmdInfo.ClientID    = addCommand.clientID;

                        BitSet flag = BitSet.CreateAndMarkInUse(clientManager.CacheFakePool, NCModulesConstants.SocketServer);
                        flag.Data = ((byte)addCommand.flag);
                        if (index == 0)
                        {
                            cmdInfo.Flag = flag;
                        }

                        object value = cache.SocketServerDataService.GetCacheData(addCommand.data.ToArray(), cmdInfo.Flag);

                        cmdInfo.Entries[index]            = CacheEntry.CreateCacheEntry(clientManager.CacheTransactionalPool, value, Alachisoft.NCache.Caching.Util.ProtobufHelper.GetExpirationHintObj(clientManager.CacheTransactionalPool, null, addCommand.absExpiration, addCommand.sldExpiration, addCommand.isResync, serailizationContext), PriorityEvictionHint.Create(clientManager.CacheTransactionalPool, (CacheItemPriority)addCommand.priority));
                        cmdInfo.Entries[index].Flag.Data |= flag.Data;

                        Notifications notification = null;
                        if ((short)addCommand.updateCallbackId != -1 || (short)addCommand.removeCallbackId != -1 || cmdInfo.OnDsItemsAddedCallback != -1)
                        {
                            notification = new Notifications(!string.IsNullOrEmpty(cmdInfo.ClientID) ? cmdInfo.ClientID : clientManager.ClientID,
                                                             Convert.ToInt32(cmdInfo.RequestId),
                                                             (short)addCommand.removeCallbackId,
                                                             (short)addCommand.updateCallbackId,
                                                             (short)(cmdInfo.RequestId == -1 ? -1 : 0),
                                                             cmdInfo.OnDsItemsAddedCallback,
                                                             (EventDataFilter)(addCommand.updateDataFilter != -1 ? (int)addCommand.updateDataFilter : (int)EventDataFilter.None),
                                                             (EventDataFilter)(addCommand.removeDataFilter != -1 ? (int)addCommand.removeDataFilter : (int)EventDataFilter.None)
                                                             );
                            cmdInfo.Entries[index].Notifications = notification;
                        }

                        cmdInfo.onUpdateCallbackId = (short)addCommand.updateCallbackId;
                        if (!String.IsNullOrEmpty(cmdInfo.Group))
                        {
                            cmdInfo.Entries[index].GroupInfo = new GroupInfo(cmdInfo.Group, cmdInfo.SubGroup, cmdInfo.type);
                        }

                        version = command.version;
                        if (queryInfoHashtable != null)
                        {
                            if (cmdInfo.Entries[index].QueryInfo == null)
                            {
                                cmdInfo.Entries[index].QueryInfo = new Hashtable();
                            }
                            cmdInfo.Entries[index].QueryInfo.Add("query-info", queryInfoHashtable);
                        }
                        cmdInfo.Entries[index].MarkInUse(NCModulesConstants.SocketServer);
                        index++;

                        if (addCommand?.PoolManager != null)
                        {
                            addCommand.PoolManager.GetProtobufAddCommandPool()?.Return(addCommand);
                        }
                    }

                    break;

                case Alachisoft.NCache.Common.Protobuf.Command.Type.INSERT_BULK:
                    Alachisoft.NCache.Common.Protobuf.BulkInsertCommand bulkInsertCommand = command.bulkInsertCommand;

                    packageSize = bulkInsertCommand.insertCommand.Count;

                    cmdInfo.Keys    = new string[packageSize];
                    cmdInfo.Entries = new CacheEntry[packageSize];

                    cmdInfo.OnDsItemsAddedCallback = (short)bulkInsertCommand.datasourceUpdatedCallbackId;
                    cmdInfo.ProviderName           = bulkInsertCommand.providerName.Length == 0 ? null : bulkInsertCommand.providerName;
                    cmdInfo.RequestId         = bulkInsertCommand.requestId;
                    cmdInfo.ClientLastViewId  = command.clientLastViewId;
                    cmdInfo.IntendedRecipient = command.intendedRecipient;

                    cmdInfo.returnVersion = bulkInsertCommand.returnVersions;

                    foreach (Alachisoft.NCache.Common.Protobuf.InsertCommand insertCommand in bulkInsertCommand.insertCommand)
                    {
                        cmdInfo.Keys[index] = insertCommand.key;
                        cmdInfo.ClientID    = insertCommand.clientID;
                        BitSet flag = BitSet.CreateAndMarkInUse(clientManager.CacheFakePool, NCModulesConstants.SocketServer);
                        flag.Data = ((byte)insertCommand.flag);
                        if (index == 0)
                        {
                            cmdInfo.Flag = flag;
                        }
                        object value = cache.SocketServerDataService.GetCacheData(insertCommand.data.ToArray(), cmdInfo.Flag);

                        cmdInfo.Entries[index]            = CacheEntry.CreateCacheEntry(clientManager.CacheTransactionalPool, value, Alachisoft.NCache.Caching.Util.ProtobufHelper.GetExpirationHintObj(clientManager.CacheTransactionalPool, null, insertCommand.absExpiration, insertCommand.sldExpiration, insertCommand.isResync, serailizationContext), PriorityEvictionHint.Create(clientManager.CacheTransactionalPool, (CacheItemPriority)insertCommand.priority));
                        cmdInfo.Entries[index].Flag.Data |= flag.Data;

                        Notifications notification = null;
                        if (insertCommand.updateCallbackId != -1 || insertCommand.removeCallbackId != -1 || cmdInfo.OnDsItemsAddedCallback != -1)
                        {
                            notification = new Notifications(!string.IsNullOrEmpty(cmdInfo.ClientID) ? cmdInfo.ClientID : clientManager.ClientID,
                                                             Convert.ToInt32(cmdInfo.RequestId),
                                                             (short)insertCommand.removeCallbackId,
                                                             (short)insertCommand.updateCallbackId,
                                                             (short)(cmdInfo.RequestId == -1 ? -1 : 0),
                                                             cmdInfo.OnDsItemsAddedCallback,
                                                             (EventDataFilter)(insertCommand.updateDataFilter != -1 ? (int)insertCommand.updateDataFilter : (int)EventDataFilter.None),
                                                             (EventDataFilter)(insertCommand.removeDataFilter != -1 ? (int)insertCommand.removeDataFilter : (int)EventDataFilter.None)
                                                             );
                            cmdInfo.Entries[index].Notifications = notification;
                        }

                        cmdInfo.onUpdateCallbackId = (short)insertCommand.updateCallbackId;

                        if (!String.IsNullOrEmpty(cmdInfo.Group))
                        {
                            cmdInfo.Entries[index].GroupInfo = new GroupInfo(cmdInfo.Group, cmdInfo.SubGroup, cmdInfo.type);
                        }



                        version = command.version;

                        if (queryInfoHashtable != null)
                        {
                            if (cmdInfo.Entries[index].QueryInfo == null)
                            {
                                cmdInfo.Entries[index].QueryInfo = new Hashtable();
                            }
                            cmdInfo.Entries[index].QueryInfo.Add("query-info", queryInfoHashtable);
                        }

                        if (tagHashtable != null)
                        {
                            if (cmdInfo.Entries[index].QueryInfo == null)
                            {
                                cmdInfo.Entries[index].QueryInfo = new Hashtable();
                            }
                            cmdInfo.Entries[index].QueryInfo.Add("tag-info", tagHashtable);
                        }

                        cmdInfo.Entries[index].MarkInUse(NCModulesConstants.SocketServer);
                        index++;

                        if (insertCommand?.PoolManager != null)
                        {
                            insertCommand.PoolManager.GetProtobufInsertCommandPool()?.Return(insertCommand);
                        }
                    }

                    break;
                }
            }
            finally
            {
            }
            return(cmdInfo);
        }
Exemple #17
0
        //public override void ExecuteCommand(ClientManager clientManager, string command, byte[] data)
        //{
        //}

        //PROTOBUF
        protected virtual CommandInfo ParseCommand(Alachisoft.NCache.Common.Protobuf.Command command, ClientManager clientManager, string cacheId)
        {
            //if (ServerMonitor.MonitorActivity) ServerMonitor.LogClientActivity("AddInsertCmd.Parse", "enter");

            CommandInfo cmdInfo = new CommandInfo();

            Hashtable queryInfoHashtable = null;
            Hashtable tagHashtable       = null;
            Hashtable namedTagHashtable  = null;
            string    version            = string.Empty;

            NCache nCache = clientManager.CmdExecuter as NCache;

            Caching.Cache cache = nCache.Cache;
            switch (command.type)
            {
            case Alachisoft.NCache.Common.Protobuf.Command.Type.ADD:
                Alachisoft.NCache.Common.Protobuf.AddCommand addCommand = command.addCommand;
                if (clientManager.ClientVersion < 5000 && !clientManager.CreateEventSubscription)
                {
                    if (addCommand.removeCallbackId != -1 || addCommand.updateCallbackId != -1)
                    {
                        Util.EventHelper.SubscribeEvents(clientManager.ClientID, TopicConstant.ItemLevelEventsTopic, nCache, null);
                        clientManager.CreateEventSubscription = true;
                    }
                }
                cmdInfo.Key     = clientManager.CacheTransactionalPool.StringPool.GetString(addCommand.key);
                cmdInfo.DoAsync = addCommand.isAsync;
                cmdInfo.DsItemAddedCallbackId = (short)addCommand.datasourceItemAddedCallbackId;

                cmdInfo.EvictionHint          = _priorityEvictionHint;
                cmdInfo.EvictionHint.Priority = (CacheItemPriority)addCommand.priority;
                cmdInfo.ExpirationHint        = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetExpirationHintObj(clientManager.CacheTransactionalPool, null, addCommand.absExpiration, addCommand.sldExpiration, addCommand.isResync, serializationContext);

                BitSet bitset = _bitSet;
                bitset.Data  = ((byte)addCommand.flag);
                cmdInfo.Flag = bitset;

                cmdInfo.ProviderName = addCommand.providerName.Length == 0 ? null : addCommand.providerName;
                cmdInfo.queryInfo    = new Hashtable();

                cmdInfo.ClientID = addCommand.clientID;
                version          = command.version;

                if (queryInfoHashtable != null)
                {
                    if (cmdInfo.queryInfo == null)
                    {
                        cmdInfo.queryInfo = new Hashtable();
                    }
                    cmdInfo.queryInfo.Add("query-info", queryInfoHashtable);
                }

                cmdInfo.RemoveCallbackId = (short)addCommand.removeCallbackId;
                //for old clients data fitler information will be missing
                if (addCommand.removeDataFilter != -1)
                {
                    cmdInfo.RemoveDataFilter = (EventDataFilter)addCommand.removeDataFilter;
                }
                else
                {
                    cmdInfo.RemoveDataFilter = Runtime.Events.EventDataFilter.None;
                }

                cmdInfo.RequestId          = addCommand.requestId;
                cmdInfo.ResyncProviderName = addCommand.resyncProviderName.Length == 0 ? null : addCommand.resyncProviderName;
                if (addCommand.subGroup != null)
                {
                    cmdInfo.SubGroup = addCommand.subGroup.Length == 0 ? null : addCommand.subGroup;
                }
                cmdInfo.UpdateCallbackId = (short)addCommand.updateCallbackId;

                if (addCommand.updateDataFilter != -1)
                {
                    cmdInfo.UpdateDataFilter = (EventDataFilter)addCommand.updateDataFilter;
                }
                else
                {
                    cmdInfo.UpdateDataFilter = (int)Runtime.Events.EventDataFilter.None;
                }

                cmdInfo.value = cache.SocketServerDataService.GetCacheData(addCommand.data.ToArray(), cmdInfo.Flag);
                try
                {
                    for (int count = 0; count < addCommand.data.Count; count++)
                    {
                        cmdInfo.DataFormatValue = cmdInfo.DataFormatValue + addCommand.data[count].Length;
                    }
                }
                catch
                {
                }
                break;

            case Alachisoft.NCache.Common.Protobuf.Command.Type.INSERT:
                Alachisoft.NCache.Common.Protobuf.InsertCommand insertCommand = command.insertCommand;
                if (clientManager.ClientVersion < 5000 && !clientManager.CreateEventSubscription)
                {
                    if (insertCommand.removeCallbackId != -1 || insertCommand.updateCallbackId != -1)
                    {
                        Util.EventHelper.SubscribeEvents(clientManager.ClientID, TopicConstant.ItemLevelEventsTopic, nCache, null);
                        clientManager.CreateEventSubscription = true;
                    }
                }
                cmdInfo.Key     = clientManager.CacheTransactionalPool.StringPool.GetString(insertCommand.key);
                cmdInfo.DoAsync = insertCommand.isAsync;
                cmdInfo.DsItemAddedCallbackId = (short)insertCommand.datasourceUpdatedCallbackId;

                cmdInfo.EvictionHint          = _priorityEvictionHint;
                cmdInfo.EvictionHint.Priority = (CacheItemPriority)insertCommand.priority;
                cmdInfo.ExpirationHint        = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetExpirationHintObj(clientManager.CacheTransactionalPool, null, insertCommand.absExpiration, insertCommand.sldExpiration, insertCommand.isResync, serializationContext);

                bitset       = _bitSet;
                bitset.Data  = ((byte)insertCommand.flag);
                cmdInfo.Flag = bitset;

                cmdInfo.ProviderName = insertCommand.providerName.Length == 0 ? null : insertCommand.providerName;
                cmdInfo.ClientID     = insertCommand.clientID;
                cmdInfo.CallbackType = insertCommand.CallbackType;
                version = command.version;

                //version added in 4.2 [Dated: 18-Nov-2013; Author: Sami]

                if (tagHashtable != null)
                {
                    if (cmdInfo.queryInfo == null)
                    {
                        cmdInfo.queryInfo = new Hashtable();
                    }
                    cmdInfo.queryInfo.Add("tag-info", tagHashtable);
                }



                cmdInfo.RemoveCallbackId = (short)insertCommand.removeCallbackId;

                if (insertCommand.removeDataFilter != -1)
                {
                    cmdInfo.RemoveDataFilter = (EventDataFilter)insertCommand.removeDataFilter;
                }
                else
                {
                    cmdInfo.RemoveDataFilter = Runtime.Events.EventDataFilter.None;
                }

                cmdInfo.RequestId          = insertCommand.requestId;
                cmdInfo.ResyncProviderName = insertCommand.resyncProviderName.Length == 0 ? null : insertCommand.resyncProviderName;
                cmdInfo.UpdateCallbackId   = (short)insertCommand.updateCallbackId;

                if (insertCommand.updateDataFilter != -1)
                {
                    cmdInfo.UpdateDataFilter = (EventDataFilter)insertCommand.updateDataFilter;
                }
                else
                {
                    cmdInfo.UpdateDataFilter = (int)Runtime.Events.EventDataFilter.None;
                }

                cmdInfo.ItemVersion    = insertCommand.itemVersion;
                cmdInfo.LockAccessType = (LockAccessType)insertCommand.lockAccessType;
                cmdInfo.LockId         = insertCommand.lockId;
                cmdInfo.value          = cache.SocketServerDataService.GetCacheData(insertCommand.data, cmdInfo.Flag);

                try
                {
                    for (int count = 0; count < insertCommand.data.Count; count++)
                    {
                        cmdInfo.DataFormatValue = cmdInfo.DataFormatValue + insertCommand.data[count].Length;
                    }
                }
                catch
                {
                }
                break;
            }

            return(cmdInfo);
        }
Exemple #18
0
        public override void ExecuteCommand(ClientManager clientManager, Alachisoft.NCache.Common.Protobuf.Command command)
        {
            ClientId = clientManager.ClientID;

            NCache         nCache = clientManager.CmdExecuter as NCache;
            int            overload;
            Hashtable      queryInfo = null;
            ExpirationHint expHint   = null;
            string         exception = null;
            Stopwatch      stopWatch = new Stopwatch();

            stopWatch.Start();
            try
            {
                overload             = command.MethodOverload;
                serailizationContext = nCache.CacheId;
                cmdInfo = base.ParseCommand(command, clientManager, serailizationContext);
            }
            catch (System.Exception exc)
            {
                _addBulkResult = OperationResult.Failure;
                {
                    //PROTOBUF:RESPONSE
                    _serializedResponsePackets.Add(Alachisoft.NCache.Common.Util.ResponseHelper.SerializeExceptionResponseWithType(exc, command.requestID, command.commandID, clientManager.ClientVersion));
                }
                return;
            }

            try
            {
                //PROTOBUF:RESPONSE
                OperationContext operationContext = new OperationContext(OperationContextFieldName.OperationType, OperationContextOperationType.CacheOperation);
                operationContext.Add(OperationContextFieldName.RaiseCQNotification, true);
                CommandsUtil.PopulateClientIdInContext(ref operationContext, clientManager.ClientAddress);
                operationContext.Add(OperationContextFieldName.ClientLastViewId, cmdInfo.ClientLastViewId);

                operationContext.Add(OperationContextFieldName.WriteThru, cmdInfo.Flag.IsBitSet(BitSetConstants.WriteThru));
                operationContext.Add(OperationContextFieldName.WriteBehind, cmdInfo.Flag.IsBitSet(BitSetConstants.WriteBehind));
                operationContext.Add(OperationContextFieldName.ClientOperationTimeout, clientManager.RequestTimeout);
                operationContext.CancellationToken = CancellationToken;

                if (!string.IsNullOrEmpty(cmdInfo.IntendedRecipient))
                {
                    operationContext.Add(OperationContextFieldName.IntendedRecipient, cmdInfo.IntendedRecipient);
                }
                queryInfo = cmdInfo.Entries[0].QueryInfo;
                expHint   = cmdInfo.Entries[0].ExpirationHint;

                IDictionary itemVersions = null;

                Hashtable addResult = (Hashtable)nCache.Cache.Add(cmdInfo.Keys, cmdInfo.Entries, cmdInfo.Flag, cmdInfo.ProviderName, out itemVersions, operationContext);
                stopWatch.Stop();
                BulkAddResponse addResponse = new BulkAddResponse();


                addResponse.keyExceptionPackage = new Alachisoft.NCache.Common.Protobuf.KeyExceptionPackageResponse();
                addResponse.keyVersionPackage   = new Alachisoft.NCache.Common.Protobuf.KeyVersionPackageResponse();
                Alachisoft.NCache.SocketServer.Util.KeyPackageBuilder.PackageKeysExceptions(addResult, addResponse.keyExceptionPackage);

                if (cmdInfo.returnVersion)
                {
                    Alachisoft.NCache.SocketServer.Util.KeyPackageBuilder.PackageKeysVersion(itemVersions, addResponse.keyVersionPackage);
                }

                if (clientManager.ClientVersion >= 5000)
                {
                    addResponse.intendedRecipient = cmdInfo.IntendedRecipient;
                    ResponseHelper.SetResponse(addResponse, command.requestID, command.commandID);
                    _serializedResponsePackets.Add(ResponseHelper.SerializeResponse(addResponse, Response.Type.ADD_BULK));
                }
                else
                {
                    //PROTOBUF:RESPONSE
                    Response response = new Response();
                    response.intendedRecipient = cmdInfo.IntendedRecipient;
                    response.bulkAdd           = addResponse;
                    ResponseHelper.SetResponse(response, command.requestID, command.commandID, Response.Type.ADD_BULK);
                    _serializedResponsePackets.Add(Alachisoft.NCache.Common.Util.ResponseHelper.SerializeResponse(response));
                }
            }
            catch (OperationCanceledException ex)
            {
                exception = ex.ToString();
                Dispose();
            }
            catch (System.Exception exc)
            {
                _addBulkResult = OperationResult.Failure;
                exception      = exc.ToString();
                _serializedResponsePackets.Add(Alachisoft.NCache.Common.Util.ResponseHelper.SerializeExceptionResponseWithType(exc, command.requestID, command.commandID, clientManager.ClientVersion));
            }

            finally
            {
                TimeSpan executionTime = stopWatch.Elapsed;
                try
                {
                    if (Alachisoft.NCache.Management.APILogging.APILogManager.APILogManger != null && Alachisoft.NCache.Management.APILogging.APILogManager.EnableLogging)
                    {
                        APILogItemBuilder log            = new APILogItemBuilder(MethodsName.ADDBULK.ToLower());
                        Hashtable         expirationHint = log.GetDependencyExpirationAndQueryInfo(expHint, queryInfo);
                        log.GenerateADDInsertBulkAPILogItem(cmdInfo.Keys.Length, cmdInfo.Entries.Length, expirationHint["dependency"] != null ? expirationHint["dependency"] as ArrayList : null, expirationHint["absolute-expiration"] != null ? (long)expirationHint["absolute-expiration"] : -1, expirationHint["sliding-expiration"] != null ? (long)expirationHint["sliding-expiration"] : -1, cmdInfo.Entries[0].Priority, expirationHint["tag-info"] != null ? expirationHint["tag-info"] as Hashtable : null, expirationHint["named-tags"] != null ? expirationHint["named-tags"] as Hashtable : null, cmdInfo.Group != null ? cmdInfo.Group : null, cmdInfo.SubGroup != null ? cmdInfo.SubGroup : null, cmdInfo.Entries[0].Flag, cmdInfo.Entries[0].ProviderName, cmdInfo.Entries[0].ResyncProviderName, false, cmdInfo.Entries[0].HasQueryInfo, (long)cmdInfo.Entries[0].Version, cmdInfo.onUpdateCallbackId, cmdInfo.OnDsItemsAddedCallback, false, false, overload, exception, executionTime, clientManager.ClientID, clientManager.ClientSocketId.ToString());
                    }
                }
                catch
                {
                }
                if (cmdInfo.Entries != null)
                {
                    foreach (var entry in cmdInfo.Entries)
                    {
                        entry.Flag?.MarkFree(NCModulesConstants.SocketServer);
                    }
                }

                if (cmdInfo.Entries != null)
                {
                    cmdInfo.Entries.MarkFree(NCModulesConstants.SocketServer);
                    MiscUtil.ReturnEntriesToPool(cmdInfo.Entries, clientManager.CacheTransactionalPool);
                }
            }
        }
Exemple #19
0
        public override void ExecuteCommand(ClientManager clientManager, Alachisoft.NCache.Common.Protobuf.Command command)
        {
            NCache    nCache = clientManager.CmdExecuter as NCache;
            int       overload;
            long      dataLength = 0;
            string    exception  = null;
            Stopwatch stopWatch  = new Stopwatch();

            stopWatch.Start();
            bool itemUpdated = false;
            bool itemRemove  = false;

            try
            {
                try
                {
                    overload             = command.MethodOverload;
                    serializationContext = nCache.CacheId;
                    cmdInfo = ParseCommand(command, clientManager, serializationContext);
                }
                catch (System.Exception exc)
                {
                    _insertResult = OperationResult.Failure;
                    {
                        //PROTOBUF:RESPONSE
                        _serializedResponsePackets.Add(Alachisoft.NCache.Common.Util.ResponseHelper.SerializeExceptionResponseWithType(exc, command.requestID, command.commandID, clientManager.ClientVersion));
                    }
                    return;
                }

                Notifications callbackEntry = null;

                if (cmdInfo.UpdateCallbackId != -1 || cmdInfo.RemoveCallbackId != -1 || (!cmdInfo.RequestId.Equals("-1") && cmdInfo.DoAsync) || cmdInfo.DsItemAddedCallbackId != -1)
                {
                    if (cmdInfo.RemoveCallbackId != -1)
                    {
                        itemRemove = true;
                    }
                    if (cmdInfo.UpdateCallbackId != -1)
                    {
                        itemUpdated = true;
                    }

                    callbackEntry = new Notifications(!string.IsNullOrEmpty(cmdInfo.ClientID) ? cmdInfo.ClientID : clientManager.ClientID,
                                                      Convert.ToInt32(cmdInfo.RequestId),
                                                      cmdInfo.RemoveCallbackId,
                                                      cmdInfo.UpdateCallbackId,
                                                      (short)(cmdInfo.RequestId.Equals("-1") ? -1 : 0),
                                                      cmdInfo.DsItemAddedCallbackId,
                                                      (Runtime.Events.EventDataFilter)cmdInfo.UpdateDataFilter,
                                                      (Runtime.Events.EventDataFilter)cmdInfo.RemoveDataFilter,
                                                      CallbackType(cmdInfo.CallbackType)
                                                      );
                }

                UserBinaryObject data = cmdInfo.value as UserBinaryObject;
                if (data != null)
                {
                    dataLength = data.Length;
                }

                if (!cmdInfo.DoAsync)
                {
                    OperationContext operationContext = null;

                    try
                    {
                        operationContext = _operationContext;
                        operationContext.Add(OperationContextFieldName.OperationType, OperationContextOperationType.CacheOperation);

                        operationContext.Add(OperationContextFieldName.RaiseCQNotification, true);
                        UInt64 itemVersion = 0;
                        if (cmdInfo.ItemVersion == 0)
                        {
                            itemVersion = (ulong)(DateTime.UtcNow - Common.Util.Time.ReferenceTime).TotalMilliseconds;
                        }
                        else
                        {
                            itemVersion = cmdInfo.ItemVersion;
                        }

                        operationContext.Add(OperationContextFieldName.ItemVersion, itemVersion);
                        operationContext.Add(OperationContextFieldName.MethodOverload, overload);

                        operationContext.MarkInUse(NCModulesConstants.SocketServer);
                        ulong version = nCache.Cache.Insert(cmdInfo.Key,
                                                            cmdInfo.value,
                                                            cmdInfo.ExpirationHint,
                                                            cmdInfo.EvictionHint,
                                                            cmdInfo.Group,
                                                            cmdInfo.SubGroup,
                                                            cmdInfo.queryInfo,
                                                            cmdInfo.Flag,
                                                            cmdInfo.LockId,
                                                            cmdInfo.ItemVersion,
                                                            cmdInfo.LockAccessType,
                                                            cmdInfo.ProviderName,
                                                            cmdInfo.ResyncProviderName,
                                                            operationContext,
                                                            callbackEntry,
                                                            cmdInfo.Type
                                                            );

                        stopWatch.Stop();

                        //PROTOBUF:RESPONSE
                        _insertResponse.version = version;

                        if (clientManager.ClientVersion >= 5000)
                        {
                            ResponseHelper.SetResponse(_insertResponse, command.requestID, command.commandID);

                            _serializedResponsePackets.Add(ResponseHelper.SerializeInsertResponse(_insertResponse, Response.Type.INSERT));
                        }
                        else
                        {
                            var response = Stash.ProtobufResponse;
                            response.insert = _insertResponse;
                            ResponseHelper.SetResponse(response, command.requestID, command.commandID, Response.Type.INSERT);

                            _serializedResponsePackets.Add(Alachisoft.NCache.Common.Util.ResponseHelper.SerializeResponse(response));
                        }
                    }
                    catch (System.Exception exc)
                    {
                        _insertResult = OperationResult.Failure;
                        exception     = exc.ToString();

                        //PROTOBUF:RESPONSE
                        _serializedResponsePackets.Add(Alachisoft.NCache.Common.Util.ResponseHelper.SerializeExceptionResponseWithType(exc, command.requestID, command.commandID, clientManager.ClientVersion));
                    }
                    finally
                    {
                        operationContext?.MarkFree(NCModulesConstants.SocketServer);

                        // Returning these here explicitly because the CacheEntry created for this operation is actually
                        // fetched from Stash rather than pool. Since the return call for that entry is going to fail, the
                        // metadata (such as these objects) attached to that entry won't be returned to pool. Therefore,
                        // we return them here explicitly.
                        if (cmdInfo.value is UserBinaryObject userBinaryObject)
                        {
                            MiscUtil.ReturnUserBinaryObjectToPool(userBinaryObject, userBinaryObject.PoolManager);
                        }

                        MiscUtil.ReturnExpirationHintToPool(cmdInfo.ExpirationHint, cmdInfo.ExpirationHint?.PoolManager);
                        //MiscUtil.ReturnSyncDependencyToPool(cmdInfo.SyncDependency, cmdInfo.SyncDependency?.PoolManager);

                        TimeSpan executionTime = stopWatch.Elapsed;

                        try
                        {
                            if (Alachisoft.NCache.Management.APILogging.APILogManager.APILogManger != null && Alachisoft.NCache.Management.APILogging.APILogManager.EnableLogging)
                            {
                                APILogItemBuilder log = new APILogItemBuilder(MethodsName.INSERT.ToLower());
                                object            toInsert;
                                if (cmdInfo.value is UserBinaryObject)
                                {
                                    toInsert = dataLength;
                                }
                                else
                                {
                                    toInsert = cmdInfo.DataFormatValue;
                                }
                                Hashtable expirationHint = log.GetDependencyExpirationAndQueryInfo(cmdInfo.ExpirationHint, cmdInfo.queryInfo);
                                log.GenerateADDInsertAPILogItem(cmdInfo.Key, toInsert, expirationHint["dependency"] != null ? expirationHint["dependency"] as ArrayList : null, expirationHint["absolute-expiration"] != null ? (long)expirationHint["absolute-expiration"] : -1, expirationHint["sliding-expiration"] != null ? (long)expirationHint["sliding-expiration"] : -1, cmdInfo.EvictionHint.Priority, expirationHint["tag-info"] != null ? expirationHint["tag-info"] as Hashtable : null, cmdInfo.Group, cmdInfo.SubGroup, cmdInfo.Flag, cmdInfo.ProviderName, cmdInfo.ResyncProviderName, false, expirationHint["named-tags"] != null ? expirationHint["named-tags"] as Hashtable : null, cmdInfo.UpdateCallbackId, cmdInfo.DsItemAddedCallbackId, false, itemUpdated, itemRemove, overload, exception, executionTime, clientManager.ClientID, clientManager.ClientSocketId.ToString());
                            }
                        }
                        catch
                        {
                        }
                    }
                }
                else
                {
                    OperationContext operationContext = null;

                    try
                    {
                        operationContext = new OperationContext();

                        operationContext.Add(OperationContextFieldName.WriteThru, cmdInfo.Flag.IsBitSet(BitSetConstants.WriteThru));
                        operationContext.Add(OperationContextFieldName.WriteBehind, cmdInfo.Flag.IsBitSet(BitSetConstants.WriteBehind));

                        if (cmdInfo.ProviderName != null)
                        {
                            operationContext.Add(OperationContextFieldName.WriteThruProviderName, cmdInfo.ProviderName);
                        }

                        operationContext.Add(OperationContextFieldName.RaiseCQNotification, true);

                        UInt64 itemVersion = 0;
                        if (cmdInfo.ItemVersion == 0)
                        {
                            itemVersion = (ulong)(DateTime.UtcNow - Common.Util.Time.ReferenceTime).TotalMilliseconds;
                        }
                        else
                        {
                            itemVersion = cmdInfo.ItemVersion;
                        }

                        operationContext.Add(OperationContextFieldName.ItemVersion, itemVersion);

                        operationContext.Add(OperationContextFieldName.MethodOverload, overload);

                        bool onAsyncCall = false;
                        if (callbackEntry != null)
                        {
                            onAsyncCall = true;
                        }

                        // Fetching this from pool to avoid value corruption for eviction hint
                        cmdInfo.EvictionHint = Caching.EvictionPolicies.PriorityEvictionHint.Create(
                            clientManager.CacheTransactionalPool, cmdInfo.EvictionHint.Priority
                            );

                        nCache.Cache.InsertAsync(cmdInfo.Key,
                                                 (object)cmdInfo.value,
                                                 cmdInfo.ExpirationHint,
                                                 cmdInfo.EvictionHint,
                                                 cmdInfo.Group,
                                                 cmdInfo.SubGroup,
                                                 cmdInfo.Flag,
                                                 cmdInfo.queryInfo,
                                                 cmdInfo.ProviderName,
                                                 operationContext,
                                                 callbackEntry,
                                                 cmdInfo.Type
                                                 );
                        stopWatch.Stop();
                        TimeSpan executionTime = stopWatch.Elapsed;
                        try
                        {
                            if (Alachisoft.NCache.Management.APILogging.APILogManager.APILogManger != null && Alachisoft.NCache.Management.APILogging.APILogManager.EnableLogging)
                            {
                                APILogItemBuilder log = new APILogItemBuilder(MethodsName.INSERTASYNC.ToLower());
                                object            toInsert;
                                if (cmdInfo.value is UserBinaryObject)
                                {
                                    toInsert = dataLength;
                                }
                                else
                                {
                                    toInsert = cmdInfo.DataFormatValue;
                                }
                                Hashtable expirationHint = log.GetDependencyExpirationAndQueryInfo(cmdInfo.ExpirationHint, cmdInfo.queryInfo);
                                log.GenerateADDInsertAPILogItem(cmdInfo.Key, toInsert, expirationHint["dependency"] != null ? expirationHint["dependency"] as ArrayList : null, expirationHint["absolute-expiration"] != null ? (long)expirationHint["absolute-expiration"] : -1, expirationHint["sliding-expiration"] != null ? (long)expirationHint["sliding-expiration"] : -1, cmdInfo.EvictionHint.Priority, expirationHint["tag-info"] != null ? expirationHint["tag-info"] as Hashtable : null, cmdInfo.Group, cmdInfo.SubGroup, cmdInfo.Flag, cmdInfo.ProviderName, cmdInfo.ResyncProviderName, false, expirationHint["named-tags"] != null ? expirationHint["named-tags"] as Hashtable : null, cmdInfo.UpdateCallbackId, cmdInfo.DsItemAddedCallbackId, onAsyncCall, itemUpdated, itemRemove, overload, null, executionTime, clientManager.ClientID, clientManager.ClientSocketId.ToString());
                            }
                        }
                        catch
                        {
                        }
                    }
                    finally
                    {
                        operationContext?.MarkFree(NCModulesConstants.SocketServer);
                    }
                }
            }
            finally
            {
                cmdInfo.Flag?.MarkFree(NCModulesConstants.SocketServer);
            }
        }
Exemple #20
0
        protected CommandInfo ParseCommand(Alachisoft.NCache.Common.Protobuf.Command command, ClientManager clientManager, string cacheId)
        {
            CommandInfo cmdInfo     = new CommandInfo();
            int         packageSize = 0;
            int         index       = 0;
            string      version     = string.Empty;
            NCache      nCache      = clientManager.CmdExecuter as NCache;

            Caching.Cache cache = nCache.Cache;
            Hashtable     queryInfoHashtable = null;
            Hashtable     tagHashtable       = null;
            Hashtable     namedTagHashtable  = null;

            switch (command.type)
            {
            case Alachisoft.NCache.Common.Protobuf.Command.Type.ADD_BULK:
                Alachisoft.NCache.Common.Protobuf.BulkAddCommand bulkAddCommand = command.bulkAddCommand;

                packageSize = bulkAddCommand.addCommand.Count;

                cmdInfo.Keys    = new string[packageSize];
                cmdInfo.Entries = new CacheEntry[packageSize];
                cmdInfo.OnDsItemsAddedCallback = (short)bulkAddCommand.datasourceItemAddedCallbackId;
                cmdInfo.ProviderName           = bulkAddCommand.providerName.Length == 0 ? null : bulkAddCommand.providerName;
                cmdInfo.RequestId         = bulkAddCommand.requestId.ToString();
                cmdInfo.ClientLastViewId  = command.clientLastViewId;
                cmdInfo.IntendedRecipient = command.intendedRecipient;

                cmdInfo.returnVersion = bulkAddCommand.returnVersions;

                foreach (Alachisoft.NCache.Common.Protobuf.AddCommand addCommand in bulkAddCommand.addCommand)
                {
                    cmdInfo.Keys[index] = addCommand.key;
                    cmdInfo.ClientID    = addCommand.clientID;
                    if (index == 0)
                    {
                        cmdInfo.Flag = new BitSet((byte)addCommand.flag);
                    }
                    object value = cache.SocketServerDataService.GetCacheData(addCommand.data.ToArray(), cmdInfo.Flag);
                    cmdInfo.Entries[index] = new CacheEntry(value, Alachisoft.NCache.Caching.Util.ProtobufHelper.GetExpirationHintObj(cache.Configuration.ExpirationPolicy, addCommand.dependency, addCommand.absExpiration, addCommand.sldExpiration, addCommand.isResync, serailizationContext), new PriorityEvictionHint((CacheItemPriority)addCommand.priority));
                    CallbackEntry cbEntry = null;
                    if ((short)addCommand.updateCallbackId != -1 || (short)addCommand.removeCallbackId != -1 || cmdInfo.OnDsItemsAddedCallback != -1)
                    {
                        cbEntry = new CallbackEntry(!string.IsNullOrEmpty(cmdInfo.ClientID) ? cmdInfo.ClientID : clientManager.ClientID,
                                                    Convert.ToInt32(cmdInfo.RequestId),
                                                    value,
                                                    (short)addCommand.removeCallbackId,
                                                    (short)addCommand.updateCallbackId,
                                                    (short)(cmdInfo.RequestId.Equals("-1") ? -1 : 0),
                                                    cmdInfo.OnDsItemsAddedCallback,
                                                    new BitSet((byte)addCommand.flag),
                                                    (EventDataFilter)(addCommand.updateDataFilter != -1 ? (int)addCommand.updateDataFilter : (int)EventDataFilter.None),
                                                    (EventDataFilter)(addCommand.removeDataFilter != -1 ? (int)addCommand.removeDataFilter : (int)EventDataFilter.DataWithMetadata)
                                                    );
                        cmdInfo.Entries[index].Value = cbEntry.Clone();
                    }

                    cmdInfo.onUpdateCallbackId = (short)addCommand.updateCallbackId;
                    if (addCommand.group != null)
                    {
                        cmdInfo.Group = addCommand.group.Length == 0 ? null : addCommand.group;
                    }
                    if (addCommand.subGroup != null)
                    {
                        cmdInfo.SubGroup = addCommand.subGroup.Length == 0 ? null : addCommand.subGroup;
                    }

                    if (!String.IsNullOrEmpty(cmdInfo.Group))
                    {
                        cmdInfo.Entries[index].GroupInfo = new GroupInfo(cmdInfo.Group, cmdInfo.SubGroup);
                    }

                    version = command.version;

                    if (string.IsNullOrEmpty(version))
                    {
                        queryInfoHashtable = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromQueryInfoObj(addCommand.queryInfo);
                        tagHashtable       = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromTagInfoObj(addCommand.tagInfo);
                        if (clientManager.IsDotNetClient)
                        {
                            namedTagHashtable = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromNamedTagInfoObjFromDotNet(addCommand.namedTagInfo);
                        }
                        else
                        {
                            namedTagHashtable = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromNamedTagInfoObjFromJava(addCommand.namedTagInfo);
                        }
                    }
                    else
                    {
                        ObjectQueryInfo objectQueryInfo = addCommand.objectQueryInfo;

                        queryInfoHashtable = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromQueryInfoObj(objectQueryInfo.queryInfo);
                        tagHashtable       = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromTagInfoObj(objectQueryInfo.tagInfo);
                        if (clientManager.IsDotNetClient)
                        {
                            namedTagHashtable = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromNamedTagInfoObjFromDotNet(objectQueryInfo.namedTagInfo);
                        }
                        else
                        {
                            namedTagHashtable = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromNamedTagInfoObjFromJava(objectQueryInfo.namedTagInfo);
                        }
                    }
                    if (queryInfoHashtable != null)
                    {
                        if (cmdInfo.Entries[index].QueryInfo == null)
                        {
                            cmdInfo.Entries[index].QueryInfo = new Hashtable();
                        }
                        cmdInfo.Entries[index].QueryInfo.Add("query-info", queryInfoHashtable);
                    }

                    if (tagHashtable != null)
                    {
                        if (cmdInfo.Entries[index].QueryInfo == null)
                        {
                            cmdInfo.Entries[index].QueryInfo = new Hashtable();
                        }
                        cmdInfo.Entries[index].QueryInfo.Add("tag-info", tagHashtable);
                    }

                    if (namedTagHashtable != null)
                    {
                        if (cmdInfo.Entries[index].QueryInfo == null)
                        {
                            cmdInfo.Entries[index].QueryInfo = new Hashtable();
                        }
                        cmdInfo.Entries[index].QueryInfo.Add("named-tag-info", namedTagHashtable);
                    }

                    cmdInfo.Entries[index].SyncDependency = base.GetCacheSyncDependencyObj(addCommand.syncDependency);
                    index++;
                }

                break;

            case Alachisoft.NCache.Common.Protobuf.Command.Type.INSERT_BULK:
                Alachisoft.NCache.Common.Protobuf.BulkInsertCommand bulkInsertCommand = command.bulkInsertCommand;

                packageSize = bulkInsertCommand.insertCommand.Count;

                cmdInfo.Keys    = new string[packageSize];
                cmdInfo.Entries = new CacheEntry[packageSize];

                cmdInfo.OnDsItemsAddedCallback = (short)bulkInsertCommand.datasourceUpdatedCallbackId;
                cmdInfo.ProviderName           = bulkInsertCommand.providerName.Length == 0 ? null : bulkInsertCommand.providerName;
                cmdInfo.RequestId         = bulkInsertCommand.requestId.ToString();
                cmdInfo.ClientLastViewId  = command.clientLastViewId;
                cmdInfo.IntendedRecipient = command.intendedRecipient;

                cmdInfo.returnVersion = bulkInsertCommand.returnVersions;

                foreach (Alachisoft.NCache.Common.Protobuf.InsertCommand insertCommand in bulkInsertCommand.insertCommand)
                {
                    cmdInfo.Keys[index] = insertCommand.key;
                    cmdInfo.ClientID    = insertCommand.clientID;
                    if (index == 0)
                    {
                        cmdInfo.Flag = new BitSet((byte)insertCommand.flag);
                    }
                    object value = cache.SocketServerDataService.GetCacheData(insertCommand.data.ToArray(), cmdInfo.Flag);
                    cmdInfo.Entries[index] = new CacheEntry(value, Alachisoft.NCache.Caching.Util.ProtobufHelper.GetExpirationHintObj(cache.Configuration.ExpirationPolicy, insertCommand.dependency, insertCommand.absExpiration, insertCommand.sldExpiration, insertCommand.isResync, serailizationContext), new PriorityEvictionHint((CacheItemPriority)insertCommand.priority));


                    CallbackEntry cbEntry = null;
                    if (insertCommand.updateCallbackId != -1 || insertCommand.removeCallbackId != -1 || cmdInfo.OnDsItemsAddedCallback != -1)
                    {
                        cbEntry = new CallbackEntry(!string.IsNullOrEmpty(cmdInfo.ClientID) ? cmdInfo.ClientID : clientManager.ClientID,
                                                    Convert.ToInt32(cmdInfo.RequestId),
                                                    value,
                                                    (short)insertCommand.removeCallbackId,
                                                    (short)insertCommand.updateCallbackId,
                                                    (short)(cmdInfo.RequestId.Equals("-1") ? -1 : 0),
                                                    cmdInfo.OnDsItemsAddedCallback,
                                                    new BitSet((byte)insertCommand.flag),
                                                    (EventDataFilter)(insertCommand.updateDataFilter != -1 ? (int)insertCommand.updateDataFilter : (int)EventDataFilter.None),
                                                    (EventDataFilter)(insertCommand.removeDataFilter != -1 ? (int)insertCommand.removeDataFilter : (int)EventDataFilter.None)
                                                    );
                        cmdInfo.Entries[index].Value = cbEntry.Clone();
                    }

                    cmdInfo.onUpdateCallbackId = (short)insertCommand.updateCallbackId;

                    if (insertCommand.group != null)
                    {
                        cmdInfo.Group = insertCommand.group.Length == 0 ? null : insertCommand.group;
                    }
                    if (insertCommand.subGroup != null)
                    {
                        cmdInfo.SubGroup = insertCommand.subGroup.Length == 0 ? null : insertCommand.subGroup;
                    }
                    if (!String.IsNullOrEmpty(cmdInfo.Group))
                    {
                        cmdInfo.Entries[index].GroupInfo = new GroupInfo(cmdInfo.Group, cmdInfo.SubGroup);
                    }

                    version = command.version;

                    if (string.IsNullOrEmpty(version))
                    {
                        queryInfoHashtable = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromQueryInfoObj(insertCommand.queryInfo);
                        tagHashtable       = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromTagInfoObj(insertCommand.tagInfo);
                        if (clientManager.IsDotNetClient)
                        {
                            namedTagHashtable = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromNamedTagInfoObjFromDotNet(insertCommand.namedTagInfo);
                        }
                        else
                        {
                            namedTagHashtable = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromNamedTagInfoObjFromJava(insertCommand.namedTagInfo);
                        }
                    }
                    else
                    {
                        ObjectQueryInfo objectQueryInfo = insertCommand.objectQueryInfo;

                        queryInfoHashtable = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromQueryInfoObj(objectQueryInfo.queryInfo);

                        tagHashtable = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromTagInfoObj(objectQueryInfo.tagInfo);

                        if (clientManager.IsDotNetClient)
                        {
                            namedTagHashtable = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromNamedTagInfoObjFromDotNet(objectQueryInfo.namedTagInfo);
                        }
                        else
                        {
                            namedTagHashtable = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromNamedTagInfoObjFromJava(objectQueryInfo.namedTagInfo);
                        }
                    }

                    if (queryInfoHashtable != null)
                    {
                        if (cmdInfo.Entries[index].QueryInfo == null)
                        {
                            cmdInfo.Entries[index].QueryInfo = new Hashtable();
                        }
                        cmdInfo.Entries[index].QueryInfo.Add("query-info", queryInfoHashtable);
                    }

                    if (tagHashtable != null)
                    {
                        if (cmdInfo.Entries[index].QueryInfo == null)
                        {
                            cmdInfo.Entries[index].QueryInfo = new Hashtable();
                        }
                        cmdInfo.Entries[index].QueryInfo.Add("tag-info", tagHashtable);
                    }

                    if (namedTagHashtable != null)
                    {
                        if (cmdInfo.Entries[index].QueryInfo == null)
                        {
                            cmdInfo.Entries[index].QueryInfo = new Hashtable();
                        }
                        cmdInfo.Entries[index].QueryInfo.Add("named-tag-info", namedTagHashtable);
                    }

                    cmdInfo.Entries[index].SyncDependency = base.GetCacheSyncDependencyObj(insertCommand.syncDependency);

                    index++;
                }

                break;
            }

            return(cmdInfo);
        }
        //PROTOBUF
        protected CommandInfo ParseCommand(Alachisoft.NCache.Common.Protobuf.Command command, ClientManager clientManager, string cacheId)
        {
            CommandInfo cmdInfo            = new CommandInfo();
            int         packageSize        = 0;
            int         index              = 0;
            string      version            = string.Empty;
            Hashtable   queryInfoHashtable = null;

            switch (command.type)
            {
            case Alachisoft.NCache.Common.Protobuf.Command.Type.ADD_BULK:
                Alachisoft.NCache.Common.Protobuf.BulkAddCommand bulkAddCommand = command.bulkAddCommand;

                packageSize = bulkAddCommand.addCommand.Count;

                cmdInfo.Keys    = new string[packageSize];
                cmdInfo.Entries = new CacheEntry[packageSize];

                cmdInfo.RequestId         = bulkAddCommand.requestId.ToString();
                cmdInfo.ClientLastViewId  = command.clientLastViewId;
                cmdInfo.IntendedRecipient = command.intendedRecipient;
                foreach (Alachisoft.NCache.Common.Protobuf.AddCommand addCommand in bulkAddCommand.addCommand)
                {
                    cmdInfo.Keys[index] = addCommand.key;

                    cmdInfo.Entries[index] = new CacheEntry(UserBinaryObject.CreateUserBinaryObject(addCommand.data.ToArray()), Alachisoft.NCache.Caching.Util.ProtobufHelper.GetExpirationHintObj(addCommand.absExpiration, addCommand.sldExpiration, serailizationContext), new PriorityEvictionHint((CacheItemPriority)addCommand.priority));
                    if (index == 0)
                    {
                        cmdInfo.Flag = new BitSet((byte)addCommand.flag);
                    }

                    CallbackEntry cbEntry = null;
                    if ((short)addCommand.updateCallbackId != -1 || (short)addCommand.removeCallbackId != -1)
                    {
                        cbEntry = new CallbackEntry(ClientId,
                                                    Convert.ToInt32(cmdInfo.RequestId),
                                                    UserBinaryObject.CreateUserBinaryObject(addCommand.data.ToArray()),
                                                    (short)addCommand.removeCallbackId,
                                                    (short)addCommand.updateCallbackId,
                                                    new BitSet((byte)addCommand.flag),
                                                    (EventDataFilter)(addCommand.updateDataFilter != -1 ? (int)addCommand.updateDataFilter : (int)EventDataFilter.None),
                                                    (EventDataFilter)(addCommand.removeDataFilter != -1 ? (int)addCommand.removeDataFilter : (int)EventDataFilter.DataWithMetadata)
                                                    );
                        cmdInfo.Entries[index].Value = cbEntry.Clone();
                    }



                    version = command.version;

                    if (string.IsNullOrEmpty(version))
                    {
                        queryInfoHashtable = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromQueryInfoObj(addCommand.queryInfo);
                    }
                    else
                    {
                        ObjectQueryInfo objectQueryInfo;

                        objectQueryInfo = addCommand.objectQueryInfo;

                        queryInfoHashtable = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromQueryInfoObj(objectQueryInfo.queryInfo);
                    }

                    if (queryInfoHashtable != null)
                    {
                        if (cmdInfo.Entries[index].QueryInfo == null)
                        {
                            cmdInfo.Entries[index].QueryInfo = new Hashtable();
                        }
                        cmdInfo.Entries[index].QueryInfo.Add("query-info", queryInfoHashtable);
                    }



                    index++;
                }

                break;

            case Alachisoft.NCache.Common.Protobuf.Command.Type.INSERT_BULK:
                Alachisoft.NCache.Common.Protobuf.BulkInsertCommand bulkInsertCommand = command.bulkInsertCommand;

                packageSize = bulkInsertCommand.insertCommand.Count;

                cmdInfo.Keys              = new string[packageSize];
                cmdInfo.Entries           = new CacheEntry[packageSize];
                cmdInfo.RequestId         = bulkInsertCommand.requestId.ToString();
                cmdInfo.ClientLastViewId  = command.clientLastViewId;
                cmdInfo.IntendedRecipient = command.intendedRecipient;
                foreach (Alachisoft.NCache.Common.Protobuf.InsertCommand insertCommand in bulkInsertCommand.insertCommand)
                {
                    cmdInfo.Keys[index]    = insertCommand.key;
                    cmdInfo.Entries[index] = new CacheEntry(UserBinaryObject.CreateUserBinaryObject(insertCommand.data.ToArray()), Alachisoft.NCache.Caching.Util.ProtobufHelper.GetExpirationHintObj(insertCommand.absExpiration, insertCommand.sldExpiration, serailizationContext), new PriorityEvictionHint((CacheItemPriority)insertCommand.priority));
                    if (index == 0)
                    {
                        cmdInfo.Flag = new BitSet((byte)insertCommand.flag);
                    }

                    CallbackEntry cbEntry = null;
                    if (insertCommand.updateCallbackId != -1 || insertCommand.removeCallbackId != -1)
                    {
                        cbEntry = new CallbackEntry(ClientId,
                                                    Convert.ToInt32(cmdInfo.RequestId),
                                                    UserBinaryObject.CreateUserBinaryObject(insertCommand.data.ToArray()),
                                                    (short)insertCommand.removeCallbackId,
                                                    (short)insertCommand.updateCallbackId,
                                                    new BitSet((byte)insertCommand.flag),
                                                    (EventDataFilter)(insertCommand.updateDataFilter != -1 ? (int)insertCommand.updateDataFilter : (int)EventDataFilter.None),
                                                    (EventDataFilter)(insertCommand.removeDataFilter != -1 ? (int)insertCommand.removeDataFilter : (int)EventDataFilter.None)
                                                    );
                        cmdInfo.Entries[index].Value = cbEntry.Clone();
                    }


                    version = command.version;

                    if (string.IsNullOrEmpty(version))
                    {
                        queryInfoHashtable = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromQueryInfoObj(insertCommand.queryInfo);
                    }
                    else
                    {
                        ObjectQueryInfo objectQueryInfo;

                        objectQueryInfo    = insertCommand.objectQueryInfo;
                        queryInfoHashtable = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromQueryInfoObj(objectQueryInfo.queryInfo);
                    }

                    if (queryInfoHashtable != null)
                    {
                        if (cmdInfo.Entries[index].QueryInfo == null)
                        {
                            cmdInfo.Entries[index].QueryInfo = new Hashtable();
                        }
                        cmdInfo.Entries[index].QueryInfo.Add("query-info", queryInfoHashtable);
                    }

                    index++;
                }

                break;
            }

            return(cmdInfo);
        }
        //PROTOBUF
        protected virtual CommandInfo ParseCommand(Alachisoft.NCache.Common.Protobuf.Command command, ClientManager clientManager, string cacheId)
        {
            if (ServerMonitor.MonitorActivity)
            {
                ServerMonitor.LogClientActivity("AddInsertCmd.Parse", "enter");
            }

            CommandInfo cmdInfo = new CommandInfo();

            Hashtable queryInfoHashtable = null;
            Hashtable tagHashtable       = null;
            Hashtable namedTagHashtable  = null;
            string    version            = string.Empty;

            NCache nCache = clientManager.CmdExecuter as NCache;

            Caching.Cache cache      = nCache.Cache;
            bool          expEnabled = cache.Configuration.ExpirationPolicy.IsExpirationEnabled;

            switch (command.type)
            {
            case Alachisoft.NCache.Common.Protobuf.Command.Type.ADD:
                Alachisoft.NCache.Common.Protobuf.AddCommand addCommand = command.addCommand;
                cmdInfo.Key     = addCommand.key;
                cmdInfo.DoAsync = addCommand.isAsync;
                cmdInfo.DsItemAddedCallbackId = (short)addCommand.datasourceItemAddedCallbackId;
                cmdInfo.EvictionHint          = new PriorityEvictionHint((CacheItemPriority)addCommand.priority);
                cmdInfo.ExpirationHint        = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetExpirationHintObj(cache.Configuration.ExpirationPolicy, addCommand.dependency, addCommand.absExpiration, addCommand.sldExpiration, addCommand.isResync, serializationContext);
                cmdInfo.Flag = new BitSet((byte)addCommand.flag);
                if (addCommand.group != null)
                {
                    cmdInfo.Group = addCommand.group.Length == 0 ? null : addCommand.group;
                }
                cmdInfo.ProviderName = addCommand.providerName.Length == 0 ? null : addCommand.providerName;
                cmdInfo.queryInfo    = new Hashtable();

                cmdInfo.ClientID = addCommand.clientID;
                version          = command.version;

                // version added in 4.2 [Dated: 18-Nov-2013]
                if (string.IsNullOrEmpty(version))
                {
                    queryInfoHashtable = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromQueryInfoObj(addCommand.queryInfo);
                    tagHashtable       = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromTagInfoObj(addCommand.tagInfo);
                    if (clientManager.IsDotNetClient)
                    {
                        namedTagHashtable = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromNamedTagInfoObjFromDotNet(addCommand.namedTagInfo);
                    }
                    else
                    {
                        namedTagHashtable = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromNamedTagInfoObjFromJava(addCommand.namedTagInfo);
                    }
                }
                else
                {
                    ObjectQueryInfo objectQueryInfo = addCommand.objectQueryInfo;

                    queryInfoHashtable = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromQueryInfoObj(objectQueryInfo.queryInfo);
                    tagHashtable       = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromTagInfoObj(objectQueryInfo.tagInfo);
                    if (clientManager.IsDotNetClient)
                    {
                        namedTagHashtable = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromNamedTagInfoObjFromDotNet(objectQueryInfo.namedTagInfo);
                    }
                    else
                    {
                        namedTagHashtable = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromNamedTagInfoObjFromJava(objectQueryInfo.namedTagInfo);
                    }
                }

                if (queryInfoHashtable != null)
                {
                    if (cmdInfo.queryInfo == null)
                    {
                        cmdInfo.queryInfo = new Hashtable();
                    }
                    cmdInfo.queryInfo.Add("query-info", queryInfoHashtable);
                }

                if (tagHashtable != null)
                {
                    if (cmdInfo.queryInfo == null)
                    {
                        cmdInfo.queryInfo = new Hashtable();
                    }
                    cmdInfo.queryInfo.Add("tag-info", tagHashtable);
                }

                if (namedTagHashtable != null)
                {
                    if (cmdInfo.queryInfo == null)
                    {
                        cmdInfo.queryInfo = new Hashtable();
                    }
                    cmdInfo.queryInfo.Add("named-tag-info", namedTagHashtable);
                }

                cmdInfo.RemoveCallbackId = (short)addCommand.removeCallbackId;
                // for old clients data fitler information will be missing
                if (addCommand.removeDataFilter != -1)
                {
                    cmdInfo.RemoveDataFilter = (int)addCommand.removeDataFilter;
                }
                else
                {
                    cmdInfo.RemoveDataFilter = (int)Runtime.Events.EventDataFilter.DataWithMetadata;
                }

                cmdInfo.RequestId          = addCommand.requestId.ToString();
                cmdInfo.ResyncProviderName = addCommand.resyncProviderName.Length == 0 ? null : addCommand.resyncProviderName;
                if (addCommand.subGroup != null)
                {
                    cmdInfo.SubGroup = addCommand.subGroup.Length == 0 ? null : addCommand.subGroup;
                }
                cmdInfo.SyncDependency   = base.GetCacheSyncDependencyObj(addCommand.syncDependency);
                cmdInfo.UpdateCallbackId = (short)addCommand.updateCallbackId;

                if (addCommand.updateDataFilter != -1)
                {
                    cmdInfo.UpdateDataFilter = addCommand.updateDataFilter;
                }
                else
                {
                    cmdInfo.UpdateDataFilter = (int)Runtime.Events.EventDataFilter.None;
                }

                cmdInfo.value = cache.SocketServerDataService.GetCacheData(addCommand.data.ToArray(), cmdInfo.Flag);
                try
                {
                    for (int count = 0; count < addCommand.data.Count; count++)
                    {
                        cmdInfo.DataFormatValue = cmdInfo.DataFormatValue + addCommand.data[count].Length;
                    }
                }
                catch
                {
                }
                break;

            case Alachisoft.NCache.Common.Protobuf.Command.Type.INSERT:
                Alachisoft.NCache.Common.Protobuf.InsertCommand insertCommand = command.insertCommand;
                cmdInfo.Key     = insertCommand.key;
                cmdInfo.DoAsync = insertCommand.isAsync;
                cmdInfo.DsItemAddedCallbackId = (short)insertCommand.datasourceUpdatedCallbackId;
                cmdInfo.EvictionHint          = new PriorityEvictionHint((CacheItemPriority)insertCommand.priority);
                cmdInfo.ExpirationHint        = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetExpirationHintObj(cache.Configuration.ExpirationPolicy, insertCommand.dependency, insertCommand.absExpiration, insertCommand.sldExpiration, insertCommand.isResync, serializationContext);
                cmdInfo.Flag = new BitSet((byte)insertCommand.flag);
                if (insertCommand.group != null)
                {
                    cmdInfo.Group = insertCommand.group.Length == 0 ? null : insertCommand.group;
                }
                cmdInfo.ProviderName = insertCommand.providerName.Length == 0 ? null : insertCommand.providerName;

                cmdInfo.ClientID     = insertCommand.clientID;
                cmdInfo.CallbackType = insertCommand.CallbackType;
                version = command.version;

                // version added in 4.2 [Dated: 18-Nov-2013]
                if (string.IsNullOrEmpty(version))
                {
                    if (insertCommand.queryInfo != null)
                    {
                        queryInfoHashtable = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromQueryInfoObj(insertCommand.queryInfo);
                    }

                    if (insertCommand.tagInfo != null)
                    {
                        tagHashtable = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromTagInfoObj(insertCommand.tagInfo);
                    }

                    if (insertCommand.namedTagInfo != null)
                    {
                        if (clientManager.IsDotNetClient)
                        {
                            namedTagHashtable = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromNamedTagInfoObjFromDotNet(insertCommand.namedTagInfo);
                        }
                        else
                        {
                            namedTagHashtable = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromNamedTagInfoObjFromJava(insertCommand.namedTagInfo);
                        }
                    }
                }
                else
                {
                    ObjectQueryInfo objectQueryInfo = insertCommand.objectQueryInfo;

                    if (objectQueryInfo.queryInfo != null)
                    {
                        queryInfoHashtable = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromQueryInfoObj(objectQueryInfo.queryInfo);
                    }

                    if (objectQueryInfo.tagInfo != null)
                    {
                        tagHashtable = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromTagInfoObj(objectQueryInfo.tagInfo);
                    }

                    if (objectQueryInfo.namedTagInfo != null)
                    {
                        if (clientManager.IsDotNetClient)
                        {
                            namedTagHashtable = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromNamedTagInfoObjFromDotNet(objectQueryInfo.namedTagInfo);
                        }
                        else
                        {
                            namedTagHashtable = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromNamedTagInfoObjFromJava(objectQueryInfo.namedTagInfo);
                        }
                    }
                }

                if (queryInfoHashtable != null)
                {
                    if (cmdInfo.queryInfo == null)
                    {
                        cmdInfo.queryInfo = new Hashtable();
                    }
                    cmdInfo.queryInfo.Add("query-info", queryInfoHashtable);
                }

                if (tagHashtable != null)
                {
                    if (cmdInfo.queryInfo == null)
                    {
                        cmdInfo.queryInfo = new Hashtable();
                    }
                    cmdInfo.queryInfo.Add("tag-info", tagHashtable);
                }

                if (namedTagHashtable != null)
                {
                    if (cmdInfo.queryInfo == null)
                    {
                        cmdInfo.queryInfo = new Hashtable();
                    }
                    cmdInfo.queryInfo.Add("named-tag-info", namedTagHashtable);
                }

                cmdInfo.RemoveCallbackId = (short)insertCommand.removeCallbackId;

                if (insertCommand.removeDataFilter != -1)
                {
                    cmdInfo.RemoveDataFilter = insertCommand.removeDataFilter;
                }
                else
                {
                    cmdInfo.RemoveDataFilter = (int)Runtime.Events.EventDataFilter.DataWithMetadata;
                }

                cmdInfo.RequestId          = insertCommand.requestId.ToString();
                cmdInfo.ResyncProviderName = insertCommand.resyncProviderName.Length == 0 ? null : insertCommand.resyncProviderName;
                if (insertCommand.subGroup != null)
                {
                    cmdInfo.SubGroup = insertCommand.subGroup.Length == 0 ? null : insertCommand.subGroup;
                }
                if (insertCommand.syncDependency != null)
                {
                    cmdInfo.SyncDependency = base.GetCacheSyncDependencyObj(insertCommand.syncDependency);
                }
                cmdInfo.UpdateCallbackId = (short)insertCommand.updateCallbackId;

                if (insertCommand.updateDataFilter != -1)
                {
                    cmdInfo.UpdateDataFilter = insertCommand.updateDataFilter;
                }
                else
                {
                    cmdInfo.UpdateDataFilter = (int)Runtime.Events.EventDataFilter.None;
                }

                cmdInfo.ItemVersion    = insertCommand.itemVersion;
                cmdInfo.LockAccessType = (LockAccessType)insertCommand.lockAccessType;
                cmdInfo.LockId         = insertCommand.lockId;
                cmdInfo.value          = cache.SocketServerDataService.GetCacheData(insertCommand.data.ToArray(), cmdInfo.Flag);
                try
                {
                    for (int count = 0; count < insertCommand.data.Count; count++)
                    {
                        cmdInfo.DataFormatValue = cmdInfo.DataFormatValue + insertCommand.data[count].Length;
                    }
                }
                catch
                {
                }
                break;
            }
            return(cmdInfo);
        }
Exemple #23
0
        //PROTOBUF

        public override void ExecuteCommand(ClientManager clientManager, Alachisoft.NCache.Common.Protobuf.Command command)
        {
            CommandInfo cmdInfo;

            byte[] data = null;

            NCache    nCache = clientManager.CmdExecuter as NCache;
            int       overload;
            string    exception = null;
            Stopwatch stopWatch = new Stopwatch();

            stopWatch.Start();
            try
            {
                overload             = command.MethodOverload;
                serializationContext = nCache.CacheId;
                cmdInfo = ParseCommand(nCache.Cache, command);
            }
            catch (System.Exception exc)
            {
                if (!base.immatureId.Equals("-2"))
                {
                    _serializedResponsePackets.Add(Alachisoft.NCache.Common.Util.ResponseHelper.SerializeExceptionResponseWithType(exc, command.requestID, command.commandID, clientManager.ClientVersion));
                }
                return;
            }

            data = new byte[1];
            try
            {
                //PROTOBUF:RESPONSE
                bool result = nCache.Cache.AddExpirationHint(cmdInfo.Key, cmdInfo.ExpHint, new OperationContext(OperationContextFieldName.OperationType, OperationContextOperationType.CacheOperation));
                //PROTOBUF:RESPONSE
                stopWatch.Stop();

                AddAttributeResponse addResponse = new AddAttributeResponse();
                addResponse.success = result;
                if (clientManager.ClientVersion >= 5000)
                {
                    ResponseHelper.SetResponse(addResponse, command.requestID, command.commandID);
                    _serializedResponsePackets.Add(ResponseHelper.SerializeResponse(addResponse, Response.Type.ADD_ATTRIBUTE));
                }
                else
                {
                    //PROTOBUF:RESPONSE
                    Response response = new Response();
                    response.addAttributeResponse = addResponse;
                    ResponseHelper.SetResponse(response, command.requestID, command.commandID, Response.Type.ADD_ATTRIBUTE);
                    _serializedResponsePackets.Add(Alachisoft.NCache.Common.Util.ResponseHelper.SerializeResponse(response));
                }
            }
            catch (System.Exception exc)
            {
                //_resultPacket = clientManager.ReplyPacket(base.ExceptionPacket(exc, cmdInfo.RequestId), base.ExceptionMessage(exc));
                //PROTOBUF:RESPONSEexception = exc.ToString();
                exception = exc.ToString();
                //_resultPacket = Alachisoft.NCache.Common.Util.ResponseHelper.SerializeExceptionResponse(exc, command.requestID);
                _serializedResponsePackets.Add(Alachisoft.NCache.Common.Util.ResponseHelper.SerializeExceptionResponseWithType(exc, command.requestID, command.commandID, clientManager.ClientVersion));
            }
            finally
            {
                stopWatch.Stop();
                TimeSpan executionTime = stopWatch.Elapsed;
                try
                {
                    if (Alachisoft.NCache.Management.APILogging.APILogManager.APILogManger != null && Alachisoft.NCache.Management.APILogging.APILogManager.EnableLogging)
                    {
                        APILogItemBuilder log            = new APILogItemBuilder(MethodsName.SetAttributes.ToLower());
                        Hashtable         expirationHint = log.GetDependencyExpirationAndQueryInfo(cmdInfo.ExpHint, null);
                        log.GenerateAddAttributeAPILogItem(cmdInfo.Key, expirationHint["absolute-expiration"] != null ? (long)expirationHint["absolute-expiration"] : -1, expirationHint["dependency"] != null ? expirationHint["dependency"] as ArrayList : null, overload, exception, executionTime, clientManager.ClientID, clientManager.ClientSocketId.ToString());
                    }
                }
                catch { }
            }
        }
        //PROTOBUF
        protected CommandInfo ParseCommand(Alachisoft.NCache.Common.Protobuf.Command command, ClientManager clientManager, string cacheId)
        {
            CommandInfo cmdInfo     = new CommandInfo();
            int         packageSize = 0;
            int         index       = 0;
            string      version     = string.Empty;

            switch (command.type)
            {
            case Alachisoft.NCache.Common.Protobuf.Command.Type.ADD_BULK:
                Alachisoft.NCache.Common.Protobuf.BulkAddCommand bulkAddCommand = command.bulkAddCommand;

                packageSize = bulkAddCommand.addCommand.Count;

                cmdInfo.Keys             = new string[packageSize];
                cmdInfo.UpdateCallbackId = new short[packageSize];
                cmdInfo.UpdateDataFilter = new int[packageSize];
                cmdInfo.RemoveCallbackId = new short[packageSize];
                cmdInfo.RemoveDataFilter = new int[packageSize];
                cmdInfo.CallbackEnteries = new CallbackEntry[packageSize];
                cmdInfo.EvictionHint     = new PriorityEvictionHint[packageSize];
                cmdInfo.ExpirationHint   = new ExpirationHint[packageSize];
                cmdInfo.Flags            = new BitSet[packageSize];
                cmdInfo.Values           = new object[packageSize];
                cmdInfo.QueryInfo        = new Hashtable[packageSize];

                cmdInfo.RequestId         = bulkAddCommand.requestId.ToString();
                cmdInfo.ClientLastViewId  = command.clientLastViewId;
                cmdInfo.IntendedRecipient = command.intendedRecipient;
                foreach (Alachisoft.NCache.Common.Protobuf.AddCommand addCommand in bulkAddCommand.addCommand)
                {
                    cmdInfo.Keys[index]             = addCommand.key;
                    cmdInfo.UpdateCallbackId[index] = (short)addCommand.updateCallbackId;

                    if (addCommand.updateDataFilter != -1)
                    {
                        cmdInfo.UpdateDataFilter[index] = addCommand.updateDataFilter;
                    }
                    else
                    {
                        cmdInfo.UpdateDataFilter[index] = (int)EventDataFilter.None;
                    }

                    cmdInfo.RemoveCallbackId[index] = (short)addCommand.removeCallbackId;

                    if (addCommand.removeDataFilter != -1)
                    {
                        cmdInfo.RemoveDataFilter[index] = addCommand.removeDataFilter;
                    }
                    else
                    {
                        cmdInfo.RemoveDataFilter[index] = (int)EventDataFilter.DataWithMetadata;
                    }

                    cmdInfo.EvictionHint[index]   = new PriorityEvictionHint((CacheItemPriority)addCommand.priority);
                    cmdInfo.ExpirationHint[index] = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetExpirationHintObj(addCommand.absExpiration, addCommand.sldExpiration, serailizationContext);
                    cmdInfo.Flags[index]          = new BitSet((byte)addCommand.flag);

                    CallbackEntry cbEntry = null;
                    if (cmdInfo.UpdateCallbackId[index] != -1 || cmdInfo.RemoveCallbackId[index] != -1)
                    {
                        cbEntry = new CallbackEntry(ClientId,
                                                    Convert.ToInt32(cmdInfo.RequestId),
                                                    cmdInfo.Values[index],
                                                    cmdInfo.RemoveCallbackId[index],
                                                    cmdInfo.UpdateCallbackId[index],
                                                    cmdInfo.Flags[index],
                                                    (EventDataFilter)cmdInfo.UpdateDataFilter[index],
                                                    (EventDataFilter)cmdInfo.RemoveDataFilter[index]
                                                    );
                    }

                    cmdInfo.CallbackEnteries[index] = cbEntry;

                    Hashtable queryInfo = new Hashtable();

                    version = command.version;

                    if (string.IsNullOrEmpty(version))
                    {
                        queryInfo["query-info"] = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromQueryInfoObj(addCommand.queryInfo);
                    }
                    else
                    {
                        ObjectQueryInfo objectQueryInfo;

                        objectQueryInfo = addCommand.objectQueryInfo;

                        queryInfo["query-info"] = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromQueryInfoObj(objectQueryInfo.queryInfo);
                    }

                    cmdInfo.QueryInfo[index] = queryInfo;
                    cmdInfo.Values[index]    = UserBinaryObject.CreateUserBinaryObject(addCommand.data.ToArray());

                    index++;
                }

                break;

            case Alachisoft.NCache.Common.Protobuf.Command.Type.INSERT_BULK:
                Alachisoft.NCache.Common.Protobuf.BulkInsertCommand bulkInsertCommand = command.bulkInsertCommand;

                packageSize = bulkInsertCommand.insertCommand.Count;

                cmdInfo.Keys              = new string[packageSize];
                cmdInfo.UpdateCallbackId  = new short[packageSize];
                cmdInfo.UpdateDataFilter  = new int[packageSize];
                cmdInfo.RemoveCallbackId  = new short[packageSize];
                cmdInfo.RemoveDataFilter  = new int[packageSize];
                cmdInfo.CallbackEnteries  = new CallbackEntry[packageSize];
                cmdInfo.EvictionHint      = new PriorityEvictionHint[packageSize];
                cmdInfo.ExpirationHint    = new ExpirationHint[packageSize];
                cmdInfo.Flags             = new BitSet[packageSize];
                cmdInfo.Values            = new object[packageSize];
                cmdInfo.QueryInfo         = new Hashtable[packageSize];
                cmdInfo.RequestId         = bulkInsertCommand.requestId.ToString();
                cmdInfo.ClientLastViewId  = command.clientLastViewId;
                cmdInfo.IntendedRecipient = command.intendedRecipient;
                foreach (Alachisoft.NCache.Common.Protobuf.InsertCommand insertCommand in bulkInsertCommand.insertCommand)
                {
                    cmdInfo.Keys[index]             = insertCommand.key;
                    cmdInfo.UpdateCallbackId[index] = (short)insertCommand.updateCallbackId;
                    cmdInfo.RemoveCallbackId[index] = (short)insertCommand.removeCallbackId;

                    if (insertCommand.updateDataFilter != -1)
                    {
                        cmdInfo.UpdateDataFilter[index] = insertCommand.updateDataFilter;
                    }
                    else
                    {
                        cmdInfo.UpdateDataFilter[index] = (int)EventDataFilter.None;
                    }
                    //for old clients eventdata filter will be missing
                    if (insertCommand.removeDataFilter != -1)
                    {
                        cmdInfo.RemoveDataFilter[index] = insertCommand.removeDataFilter;
                    }
                    else
                    {
                        cmdInfo.RemoveDataFilter[index] = (int)EventDataFilter.DataWithMetadata;
                    }

                    cmdInfo.EvictionHint[index]   = new PriorityEvictionHint((CacheItemPriority)insertCommand.priority);
                    cmdInfo.ExpirationHint[index] = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetExpirationHintObj(insertCommand.absExpiration, insertCommand.sldExpiration, serailizationContext);
                    cmdInfo.Flags[index]          = new BitSet((byte)insertCommand.flag);

                    CallbackEntry cbEntry = null;
                    if (cmdInfo.UpdateCallbackId[index] != -1 || cmdInfo.RemoveCallbackId[index] != -1)
                    {
                        cbEntry = new CallbackEntry(ClientId,
                                                    Convert.ToInt32(cmdInfo.RequestId),
                                                    cmdInfo.Values[index],
                                                    cmdInfo.RemoveCallbackId[index],
                                                    cmdInfo.UpdateCallbackId[index],
                                                    cmdInfo.Flags[index],
                                                    (EventDataFilter)cmdInfo.UpdateDataFilter[index],
                                                    (EventDataFilter)cmdInfo.RemoveDataFilter[index]
                                                    );
                    }

                    cmdInfo.CallbackEnteries[index] = cbEntry;


                    Hashtable queryInfo = new Hashtable();
                    version = command.version;

                    if (string.IsNullOrEmpty(version))
                    {
                        queryInfo["query-info"] = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromQueryInfoObj(insertCommand.queryInfo);
                    }
                    else
                    {
                        ObjectQueryInfo objectQueryInfo;

                        objectQueryInfo         = insertCommand.objectQueryInfo;
                        queryInfo["query-info"] = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromQueryInfoObj(objectQueryInfo.queryInfo);
                    }

                    cmdInfo.QueryInfo[index] = queryInfo;
                    cmdInfo.Values[index]    = UserBinaryObject.CreateUserBinaryObject(insertCommand.data.ToArray());

                    index++;
                }

                break;
            }

            return(cmdInfo);
        }
Exemple #25
0
        //PROTOBUF
        public override void ExecuteCommand(ClientManager clientManager, Alachisoft.NCache.Common.Protobuf.Command command)
        {
            NCache    nCache = clientManager.CmdExecuter as NCache;
            int       overload;
            long      dataLength  = 0;
            string    exception   = null;
            bool      itemUpdated = false;
            bool      itemRemove  = false;
            Stopwatch stopWatch   = new Stopwatch();

            stopWatch.Start();
            try
            {
                try
                {
                    overload             = command.MethodOverload;
                    serializationContext = nCache.CacheId;
                    cmdInfo = base.ParseCommand(command, clientManager, serializationContext);
                }
                catch (System.Exception exc)
                {
                    _addResult = OperationResult.Failure;
                    {
                        //PROTOBUF:RESPONSE
                        _serializedResponsePackets.Add(Alachisoft.NCache.Common.Util.ResponseHelper.SerializeExceptionResponseWithType(exc, command.requestID, command.commandID, clientManager.ClientVersion));
                    }

                    return;
                }

                Notifications callbackEntry = null;

                if (cmdInfo.UpdateCallbackId != -1 || cmdInfo.RemoveCallbackId != -1 || (!cmdInfo.RequestId.Equals("-1") && cmdInfo.DoAsync) || cmdInfo.DsItemAddedCallbackId != -1)
                {
                    if (cmdInfo.RemoveCallbackId != -1)
                    {
                        itemRemove = true;
                    }
                    if (cmdInfo.UpdateCallbackId != -1)
                    {
                        itemUpdated = true;
                    }

                    callbackEntry = new Notifications(!string.IsNullOrEmpty(cmdInfo.ClientID) ? cmdInfo.ClientID : clientManager.ClientID,
                                                      Convert.ToInt32(cmdInfo.RequestId),
                                                      cmdInfo.RemoveCallbackId,
                                                      cmdInfo.UpdateCallbackId,
                                                      (short)(cmdInfo.RequestId == -1 ? -1 : 0),
                                                      cmdInfo.DsItemAddedCallbackId,
                                                      (EventDataFilter)cmdInfo.UpdateDataFilter,
                                                      (EventDataFilter)cmdInfo.RemoveDataFilter);
                }

                UserBinaryObject data = cmdInfo.value as UserBinaryObject;
                if (data != null)
                {
                    dataLength = data.Length;
                }

                if (!cmdInfo.DoAsync)
                {
                    OperationContext operationContext = null;

                    try
                    {
                        operationContext = _operationContext;
                        operationContext.Add(OperationContextFieldName.OperationType, OperationContextOperationType.CacheOperation);

                        CommandsUtil.PopulateClientIdInContext(ref operationContext, clientManager.ClientAddress);
                        operationContext.Add(OperationContextFieldName.RaiseCQNotification, true);

                        UInt64 itemVersion = 0;
                        if (cmdInfo.ItemVersion == 0)
                        {
                            itemVersion = (ulong)(DateTime.UtcNow - Common.Util.Time.ReferenceTime).TotalMilliseconds;
                        }
                        else
                        {
                            itemVersion = cmdInfo.ItemVersion;
                        }

                        operationContext.Add(OperationContextFieldName.ItemVersion, itemVersion);
                        operationContext.Add(OperationContextFieldName.MethodOverload, overload);

                        operationContext?.MarkInUse(NCModulesConstants.SocketServer);

                        if (cmdInfo.Group != null)
                        {
                            if (string.IsNullOrEmpty(cmdInfo.Type))
                            {
                                cmdInfo.Type = oldClientsGroupType;
                            }
                        }

                        nCache.Cache.Add(cmdInfo.Key,
                                         cmdInfo.value,
                                         cmdInfo.ExpirationHint,
                                         cmdInfo.EvictionHint,
                                         cmdInfo.Group,
                                         cmdInfo.SubGroup,
                                         cmdInfo.queryInfo,
                                         cmdInfo.Flag, cmdInfo.ProviderName, cmdInfo.ResyncProviderName, operationContext, null, callbackEntry, cmdInfo.Type);

                        stopWatch.Stop();

                        if (operationContext.Contains(OperationContextFieldName.ItemVersion))
                        {
                            itemVersion = (ulong)operationContext.GetValueByField(OperationContextFieldName.ItemVersion);
                        }

                        _addResponse.itemversion = itemVersion;

                        if (clientManager.ClientVersion >= 5000)
                        {
                            ResponseHelper.SetResponse(_addResponse, command.requestID, command.commandID);
                            _serializedResponsePackets.Add(ResponseHelper.SerializeResponse(_addResponse, Response.Type.ADD));
                        }
                        else
                        {
                            //PROTOBUF:RESPONSE
                            var response = Stash.ProtobufResponse;
                            response.addResponse = _addResponse;
                            ResponseHelper.SetResponse(response, command.requestID, command.commandID, Response.Type.ADD);

                            _serializedResponsePackets.Add(Alachisoft.NCache.Common.Util.ResponseHelper.SerializeResponse(response));
                        }
                    }
                    catch (System.Exception exc)
                    {
                        _addResult = OperationResult.Failure;
                        exception  = exc.ToString();
                        _serializedResponsePackets.Add(Alachisoft.NCache.Common.Util.ResponseHelper.SerializeExceptionResponseWithType(exc, command.requestID, command.commandID, clientManager.ClientVersion));
                    }
                    finally
                    {
                        operationContext?.MarkFree(NCModulesConstants.SocketServer);

                        TimeSpan executionTime = stopWatch.Elapsed;

                        try
                        {
                            if (Alachisoft.NCache.Management.APILogging.APILogManager.APILogManger != null && Alachisoft.NCache.Management.APILogging.APILogManager.EnableLogging)
                            {
                                APILogItemBuilder log = new APILogItemBuilder(MethodsName.ADD.ToLower());
                                object            toInsert;
                                if (cmdInfo.value is UserBinaryObject)
                                {
                                    toInsert = dataLength;
                                }
                                else
                                {
                                    toInsert = cmdInfo.DataFormatValue;
                                }
                                Hashtable expirationHint = log.GetDependencyExpirationAndQueryInfo(cmdInfo.ExpirationHint, cmdInfo.queryInfo);
                                log.GenerateADDInsertAPILogItem(cmdInfo.Key, toInsert, expirationHint["dependency"] != null ? expirationHint["dependency"] as ArrayList : null, expirationHint["absolute-expiration"] != null ? (long)expirationHint["absolute-expiration"] : -1, expirationHint["sliding-expiration"] != null ? (long)expirationHint["sliding-expiration"] : -1, cmdInfo.EvictionHint.Priority, expirationHint["tag-info"] != null ? expirationHint["tag-info"] as Hashtable : null, cmdInfo.Group, cmdInfo.SubGroup, cmdInfo.Flag, cmdInfo.ProviderName, cmdInfo.ResyncProviderName, false, expirationHint["named-tags"] != null ? expirationHint["named-tags"] as Hashtable : null, cmdInfo.UpdateCallbackId, cmdInfo.DsItemAddedCallbackId, false, itemUpdated, itemRemove, overload, exception, executionTime, clientManager.ClientID, clientManager.ClientSocketId.ToString());
                            }
                        }
                        catch { }
                    }
                }

                else
                {
                    OperationContext operationContext = null;

                    try
                    {
                        operationContext = new OperationContext(OperationContextFieldName.OperationType, OperationContextOperationType.CacheOperation);

                        operationContext.Add(OperationContextFieldName.WriteThru, cmdInfo.Flag.IsBitSet(BitSetConstants.WriteThru));
                        operationContext.Add(OperationContextFieldName.WriteBehind, cmdInfo.Flag.IsBitSet(BitSetConstants.WriteBehind));
                        if (cmdInfo.ProviderName != null)
                        {
                            operationContext.Add(OperationContextFieldName.WriteThruProviderName, cmdInfo.ProviderName);
                        }

                        operationContext.Add(OperationContextFieldName.RaiseCQNotification, true);

                        UInt64 itemVersion = 0;
                        if (cmdInfo.ItemVersion == 0)
                        {
                            itemVersion = (ulong)(DateTime.UtcNow - Common.Util.Time.ReferenceTime).TotalMilliseconds;
                        }
                        else
                        {
                            itemVersion = cmdInfo.ItemVersion;
                        }


                        operationContext.Add(OperationContextFieldName.ItemVersion, itemVersion);
                        operationContext.Add(OperationContextFieldName.MethodOverload, overload);
                        operationContext.MarkInUse(NCModulesConstants.SocketServer);

                        bool onAsyncCall = false;
                        if (callbackEntry != null)
                        {
                            onAsyncCall = true;
                        }

                        if (cmdInfo.Group != null)
                        {
                            if (string.IsNullOrEmpty(cmdInfo.Type))
                            {
                                cmdInfo.Type = oldClientsGroupType;
                            }
                        }

                        // Fetching this from pool to avoid value corruption for eviction hint for old
                        cmdInfo.EvictionHint = Caching.EvictionPolicies.PriorityEvictionHint.Create(
                            clientManager.CacheTransactionalPool, cmdInfo.EvictionHint.Priority
                            );

                        nCache.Cache.AddAsync(cmdInfo.Key,
                                              cmdInfo.value,
                                              cmdInfo.ExpirationHint,
                                              cmdInfo.EvictionHint,
                                              cmdInfo.Group,
                                              cmdInfo.SubGroup,
                                              cmdInfo.Flag,
                                              cmdInfo.queryInfo, cmdInfo.ProviderName, operationContext, callbackEntry, cmdInfo.Type);

                        stopWatch.Stop();
                        TimeSpan executionTime = stopWatch.Elapsed;
                        try
                        {
                            if (Alachisoft.NCache.Management.APILogging.APILogManager.APILogManger != null && Alachisoft.NCache.Management.APILogging.APILogManager.EnableLogging)
                            {
                                APILogItemBuilder log            = new APILogItemBuilder(MethodsName.ADDASYNC.ToLower());
                                Hashtable         expirationHint = log.GetDependencyExpirationAndQueryInfo(cmdInfo.ExpirationHint, cmdInfo.queryInfo);
                                object            toInsert;
                                if (cmdInfo.value is UserBinaryObject)
                                {
                                    toInsert = dataLength;
                                }
                                else
                                {
                                    toInsert = cmdInfo.DataFormatValue;
                                }
                                log.GenerateADDInsertAPILogItem(cmdInfo.Key, toInsert, expirationHint["dependency"] != null ? expirationHint["dependency"] as ArrayList : null, expirationHint["absolute-expiration"] != null ? (long)expirationHint["absolute-expiration"] : -1, expirationHint["sliding-expiration"] != null ? (long)expirationHint["sliding-expiration"] : -1, cmdInfo.EvictionHint.Priority, expirationHint["tag-info"] != null ? expirationHint["tag-info"] as Hashtable : null, cmdInfo.Group, cmdInfo.SubGroup, cmdInfo.Flag, cmdInfo.ProviderName, cmdInfo.ResyncProviderName, false, expirationHint["named-tags"] != null ? expirationHint["named-tags"] as Hashtable : null, cmdInfo.UpdateCallbackId, cmdInfo.DsItemAddedCallbackId, onAsyncCall, itemUpdated, itemRemove, overload, exception, executionTime, clientManager.ClientID, clientManager.ClientSocketId.ToString());
                            }
                        }
                        catch { }
                    }
                    finally
                    {
                        operationContext?.MarkFree(NCModulesConstants.SocketServer);
                    }
                }
            }
            finally
            {
                cmdInfo.Flag?.MarkFree(NCModulesConstants.SocketServer);
            }
        }