//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); }
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); }
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); }
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); }
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); }
//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); }
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)); } }
public override void ExecuteCommand(ClientManager clientManager, Alachisoft.NCache.Common.Protobuf.Command command) { }
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 { } } } }
//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); } }
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); }
//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); }
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); } } }
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); } }
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); }
//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); }
//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); } }