Пример #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="fullTypeName"></param>
        /// <param name="evictionType"></param>
        /// <param name="limit"></param>
        /// <param name="itemsToRemove"></param>
        public void ConfigEviction(string fullTypeName, EvictionType evictionType, int limit, int itemsToRemove)
        {
            var request = new EvictionSetupRequest(fullTypeName, evictionType, limit, itemsToRemove);

            var response = Channel.SendRequest(request);

            if (response is ExceptionResponse exResponse)
            {
                throw new CacheException("Error while declaring a domain", exResponse.Message, exResponse.CallStack);
            }
        }
Пример #2
0
        private void EvictionSetup(EvictionSetupRequest evictionSetup, IClient client)
        {
            if (_dataStore.DomainDescription != null && !_dataStore.DomainDescription.IsEmpty)
            {
                throw new NotSupportedException(
                          "Can not activate eviction on a type with a domain declaration");
            }

            _dataStore.EvictionPolicy = evictionSetup.Type == EvictionType.LessRecentlyUsed
                ? new LruEvictionPolicy(evictionSetup.Limit, evictionSetup.ItemsToEvict)
                : evictionSetup.Type == EvictionType.TimeToLive
                    ? new TtlEvictionPolicy(
                TimeSpan.FromMilliseconds(evictionSetup.TimeToLiveInMilliseconds))
                    : (EvictionPolicy) new NullEvictionPolicy();

            client.SendResponse(new NullResponse());
        }
Пример #3
0
        /// <summary>
        /// </summary>
        /// <param name="fullTypeName"></param>
        /// <param name="evictionType"></param>
        /// <param name="limit"></param>
        /// <param name="itemsToRemove"></param>
        /// <param name="timeLimitInMilliseconds"></param>
        public void ConfigEviction(string fullTypeName, EvictionType evictionType, int limit, int itemsToRemove, int timeLimitInMilliseconds = 0)
        {
            if (evictionType == EvictionType.LessRecentlyUsed && timeLimitInMilliseconds != 0)
            {
                throw new ArgumentException($"{nameof(timeLimitInMilliseconds)} can be used only for TTL eviction");
            }

            if (evictionType == EvictionType.TimeToLive && (limit != 0 || itemsToRemove != 0))
            {
                throw new ArgumentException($"{nameof(limit)} and {nameof(itemsToRemove)} can be used only for LRU eviction");
            }

            var request = new EvictionSetupRequest(fullTypeName, evictionType, limit, itemsToRemove, timeLimitInMilliseconds);

            var response = Channel.SendRequest(request);

            if (response is ExceptionResponse exResponse)
            {
                throw new CacheException("Error while declaring a domain", exResponse.Message, exResponse.CallStack);
            }
        }