Esempio n. 1
0
        protected override IStoreOperationResult PerformStore(StoreMode mode, string key, object value, uint expires, ref ulong cas, out int statusCode)
        {
            var hashedKey = this.KeyTransformer.Transform(key);
            var node      = this.Pool.Locate(hashedKey);
            var result    = StoreOperationResultFactory.Create();

            statusCode = -1;

            if (node != null)
            {
                CacheItem item;

                try { item = this.Transcoder.Serialize(value); }
                catch (Exception e)
                {
                    log.Error(e);

                    if (this.PerformanceMonitor != null)
                    {
                        this.PerformanceMonitor.Store(mode, 1, false);
                    }

                    result.Fail("Store operation failed during serialization", e);
                    return(result);
                }

                var command       = this.Pool.OperationFactory.Store(mode, hashedKey, item, expires, cas);
                var commandResult = ExecuteWithRedirect(node, command);

                result.Cas        = cas = command.CasValue;
                result.StatusCode = statusCode = command.StatusCode;

                if (!commandResult.Success)
                {
                    result.InnerResult = commandResult;
                    result.Fail("Store operation failed, see InnerResult or StatusCode for details");
                    return(result);
                }

                if (this.PerformanceMonitor != null)
                {
                    this.PerformanceMonitor.Store(mode, 1, true);
                }

                result.Pass();
                return(result);
            }

            if (this.PerformanceMonitor != null)
            {
                this.PerformanceMonitor.Store(mode, 1, false);
            }

            result.Fail("Failed to locate node");
            return(result);
        }
Esempio n. 2
0
		protected virtual IStoreOperationResult PerformStore(StoreMode mode, string key, object value, uint expires, ref ulong cas, out int statusCode)
		{
			var hashedKey = this.keyTransformer.Transform(key);
			var node = this.pool.Locate(hashedKey);
			var result = StoreOperationResultFactory.Create();

			statusCode = -1;

			if (node != null)
			{
				CacheItem item;

				try { item = this.transcoder.Serialize(value); }
				catch (Exception e)
				{
					log.Error(e);

					if (this.performanceMonitor != null) this.performanceMonitor.Store(mode, 1, false);

					result.Fail("PerformStore failed", e);
					return result;
				}

				var command = this.pool.OperationFactory.Store(mode, hashedKey, item, expires, cas);
				var commandResult = node.Execute(command);

				result.Cas = cas = command.CasValue;
				result.StatusCode = statusCode = command.StatusCode;

				if (commandResult.Success)
				{
					if (this.performanceMonitor != null) this.performanceMonitor.Store(mode, 1, true);
					result.Pass();
					return result;
				}

				commandResult.Combine(result);
				return result;
			}

			if (this.performanceMonitor != null) this.performanceMonitor.Store(mode, 1, false);

			result.Fail("Unable to locate node");
			return result;
		}