private long _lastExpire; // last time expiration ran

        /// <summary>
        /// Initializes a new instance of the <see cref="NearCacheBase"/> class.
        /// </summary>
        /// <param name="name">The name of the cache.</param>
        /// <param name="cluster">The cluster.</param>
        /// <param name="serializationService">The localization service.</param>
        /// <param name="loggerFactory">A logger factory.</param>
        /// <param name="nearCacheOptions">NearCache options.</param>
        protected NearCacheBase(string name, Cluster cluster, SerializationService serializationService, ILoggerFactory loggerFactory, NearCacheOptions nearCacheOptions)
        {
            if (string.IsNullOrWhiteSpace(name))
            {
                throw new ArgumentException(ExceptionMessages.NullOrEmpty, nameof(name));
            }
            Name    = name;
            Cluster = cluster ?? throw new ArgumentNullException(nameof(cluster));
            SerializationService = serializationService ?? throw new ArgumentNullException(nameof(serializationService));
            LoggerFactory        = loggerFactory ?? throw new ArgumentNullException(nameof(loggerFactory));
            Options = nearCacheOptions ?? throw new ArgumentNullException(nameof(nearCacheOptions));

            _entries   = new ConcurrentAsyncDictionary <IData, NearCacheEntry>();
            Statistics = new NearCacheStatistics(name);

            _lastExpire = Clock.Never;

            _maxSize             = nearCacheOptions.MaxSize;
            _maxIdleMilliseconds = nearCacheOptions.MaxIdleSeconds * 1000;
            InMemoryFormat       = nearCacheOptions.InMemoryFormat;
            _timeToLive          = nearCacheOptions.TimeToLiveSeconds * 1000;
            _evictionPolicy      = nearCacheOptions.EvictionPolicy;
            _evictionComparer    = GetEvictionComparer(_evictionPolicy);
            _evictionPercentage  = nearCacheOptions.EvictionPercentage;
            _cleanupInterval     = nearCacheOptions.CleanupPeriodSeconds * 1000;
        }
 /// <summary>
 /// Gets the record comparer corresponding to an eviction policy.
 /// </summary>
 /// <param name="policy">The eviction policy.</param>
 /// <returns>The record comparer corresponding to the specified eviction policy.</returns>
 private static IComparer <NearCacheEntry> GetEvictionComparer(EvictionPolicy policy)
 {
     return(policy switch
     {
         EvictionPolicy.Lfu => new LfuComparer(),
         EvictionPolicy.Lru => new LruComparer(),
         EvictionPolicy.None => new DefaultComparer(),
         _ => throw new NotSupportedException()
     });
Beispiel #3
0
        private IComparer <CacheRecord> GetComparer(EvictionPolicy policy)
        {
            switch (policy)
            {
            case EvictionPolicy.Lfu:
                return(new LfuComparer());

            case EvictionPolicy.Lru:
                return(new LruComparer());
            }
            return(new DefaultComparer());
        }
Beispiel #4
0
 protected BaseNearCache(string name, HazelcastClient client, NearCacheConfig nearCacheConfig)
 {
     _name              = name;
     Client             = client;
     _maxSize           = nearCacheConfig.MaxSize;
     _maxIdleMillis     = nearCacheConfig.MaxIdleSeconds * 1000;
     _inMemoryFormat    = nearCacheConfig.InMemoryFormat;
     _timeToLiveMillis  = nearCacheConfig.TimeToLiveSeconds * 1000;
     _evictionPolicy    = nearCacheConfig.EvictionPolicy;
     _records           = new ConcurrentDictionary <IData, Lazy <NearCacheRecord> >();
     _canCleanUp        = new AtomicBoolean(true);
     _canEvict          = new AtomicBoolean(true);
     _lastCleanup       = Clock.CurrentTimeMillis();
     _selectedComparer  = GetComparer(_evictionPolicy);
     _stat              = new NearCacheStatistics();
     InvalidateOnChange = nearCacheConfig.InvalidateOnChange;
 }
Beispiel #5
0
 public ClientNearCache(string mapName, ClientNearCacheType cacheType, ClientContext context,
                        NearCacheConfig nearCacheConfig)
 {
     this.mapName       = mapName;
     this.cacheType     = cacheType;
     this.context       = context;
     maxSize            = nearCacheConfig.GetMaxSize();
     maxIdleMillis      = nearCacheConfig.GetMaxIdleSeconds() * 1000;
     inMemoryFormat     = nearCacheConfig.GetInMemoryFormat();
     timeToLiveMillis   = nearCacheConfig.GetTimeToLiveSeconds() * 1000;
     invalidateOnChange = nearCacheConfig.IsInvalidateOnChange();
     evictionPolicy     = (EvictionPolicy)Enum.Parse(typeof(EvictionPolicy), nearCacheConfig.GetEvictionPolicy());
     cache       = new ConcurrentDictionary <IData, CacheRecord>();
     canCleanUp  = new AtomicBoolean(true);
     canEvict    = new AtomicBoolean(true);
     lastCleanup = Clock.CurrentTimeMillis();
     if (invalidateOnChange)
     {
         AddInvalidateListener();
     }
 }
        public void SetEvictionPolicy(EvictionPolicy value)
        {
            if (value is ObjectExpirationPolicy)
            {
                PropertyInfo propertyInfo = this.Type.GetProperty(((ObjectExpirationPolicy)value).TimestampPropertyName);
                if (propertyInfo == null)
                {
                    throw new ArgumentException("Object expiration policy refers to a nonexistent timestamp property");
                }
                if (propertyInfo.PropertyType != typeof(DateTime))
                {
                    throw new ArgumentException("Object expiration policy refers to an invalid timestamp property");
                }
                if (propertyInfo.IsIgnored())
                {
                    throw new ArgumentException("Object expiration policy refers to an ignored timestamp property");
                }
            }

            var client = this.Entry.client;
            var payload = new EvictionPolicyPayload(PayloadAction.Set, value, this.Entry.Id, client.ClientId);
            client.SendPublishEvent(payload);
        }
        public void SetEvictionPolicy(EvictionPolicy value)
        {
            if (value is ObjectExpirationPolicy)
            {
                PropertyInfo propertyInfo = this.Type.GetProperty(((ObjectExpirationPolicy)value).TimestampPropertyName);
                if (propertyInfo == null)
                {
                    throw new ArgumentException("Object expiration policy refers to a nonexistent timestamp property");
                }
                if (propertyInfo.PropertyType != typeof(DateTime))
                {
                    throw new ArgumentException("Object expiration policy refers to an invalid timestamp property");
                }
                if (propertyInfo.IsIgnored())
                {
                    throw new ArgumentException("Object expiration policy refers to an ignored timestamp property");
                }
            }

            var client  = this.Entry.client;
            var payload = new EvictionPolicyPayload(PayloadAction.Set, value, this.Entry.Id, client.ClientId);

            client.SendPublishEvent(payload);
        }
Beispiel #8
0
 public static Job NewWithNeverExpireDefault(string id)
 {
     return(new Job(id, LogicOfTo <IHasId, IExpirable> .New((x) => { return EvictionPolicy.BuildNeverExpirable(); })));
 }
        public object Clone()
        {
            CacheServerConfigSetting config = new CacheServerConfigSetting();

            config.cacheType    = this.cacheType;
            config.InProc       = InProc;
            config.Log          = Log != null ? (Alachisoft.NCache.Config.Dom.Log)Log.Clone() : null;
            config.PerfCounters = PerfCounters != null ? (Alachisoft.NCache.Config.Dom.PerfCounters)PerfCounters.Clone() : null;


            config.Cleanup                    = Cleanup != null ? (Alachisoft.NCache.Config.Dom.Cleanup)Cleanup.Clone() : null;
            config.Storage                    = Storage != null ? (Alachisoft.NCache.Config.Dom.Storage)Storage.Clone() : null;
            config.EvictionPolicy             = EvictionPolicy != null ? (Alachisoft.NCache.Config.Dom.EvictionPolicy)EvictionPolicy.Clone() : null;
            config.ExpirationPolicy           = ExpirationPolicy != null ? (Alachisoft.NCache.Config.Dom.ExpirationPolicy)ExpirationPolicy.Clone() : null;
            config.backingSource              = this.backingSource != null ? (Alachisoft.NCache.Config.Dom.BackingSource) this.backingSource.Clone() : null;
            config.QueryIndices               = QueryIndices != null ? (Alachisoft.NCache.Config.Dom.QueryIndex)QueryIndices.Clone() : null;
            config.Notifications              = Notifications != null ? (Alachisoft.NCache.Config.Dom.Notifications)Notifications.Clone() : null;
            config.SQLDependencyConfig        = SQLDependencyConfig != null ? (Alachisoft.NCache.Config.Dom.SQLDependencyConfig)SQLDependencyConfig.Clone() : null;
            config.SynchronizationStrategy    = SynchronizationStrategy != null ? (Alachisoft.NCache.Config.Dom.SynchronizationStrategy)SynchronizationStrategy.Clone() : null;
            config.cacheTopology              = this.cacheTopology;
            config.DataFormat                 = this.DataFormat;
            config.ClientDeathDetection       = ClientDeathDetection != null ? (ClientDeathDetection)ClientDeathDetection.Clone() : null;
            config.TaskConfiguration          = TaskConfiguration != null ?(TaskConfiguration)TaskConfiguration.Clone() : null;
            config.ClientActivityNotification = ClientActivityNotification != null
                ? (ClientActivityNotification)ClientActivityNotification.Clone()
                : null;
            return(config);
        }
Beispiel #10
0
 /// <summary>
 /// Converts the <see cref="sourceValue" /> parameter to the <see cref="destinationType" /> parameter using <see cref="formatProvider"
 /// /> and <see cref="ignoreCase" />
 /// </summary>
 /// <param name="sourceValue">the <see cref="System.Object"/> to convert from</param>
 /// <param name="destinationType">the <see cref="System.Type" /> to convert to</param>
 /// <param name="formatProvider">not used by this TypeConverter.</param>
 /// <param name="ignoreCase">when set to <c>true</c>, will ignore the case when converting.</param>
 /// <returns>
 /// an instance of <see cref="EvictionPolicy" />, or <c>null</c> if there is no suitable conversion.
 /// </returns>
 public override object ConvertFrom(object sourceValue, global::System.Type destinationType, global::System.IFormatProvider formatProvider, bool ignoreCase) => EvictionPolicy.CreateFrom(sourceValue);
Beispiel #11
0
 public static void AddBIPCache(string deviceName, int associativity, int setCount, int lineSize, int missTime, int hitTime, EvictionPolicy ev)
 {
     output.WriteLine("Root MemoryDevice Begin");
     output.WriteLine("String DeviceType BIPMOESICache");
     output.WriteLine("String DeviceName " + deviceName);
     output.WriteLine("Int DeviceID " + (index++));
     output.WriteLine("Int LineSize " + lineSize);
     output.WriteLine("Int Associativity " + associativity);
     output.WriteLine("Int SetCount " + setCount);
     output.WriteLine("Int HitTime " + hitTime);
     output.WriteLine("Int MissTime " + missTime);
     if (deviceName.Contains("L1"))
     {
         output.WriteLine("Int TopCache 1");
     }
     else
     {
         output.WriteLine("Int TopCache 0");
     }
     if (ev == EvictionPolicy.LRU)
     {
         output.WriteLine("String EvictionPolicy LRU");
     }
     else
     {
         output.WriteLine("String EvictionPolicy Random");
     }
     output.WriteLine("End");
 }
        public object Clone()
        {
            CacheServerConfigSetting config = new CacheServerConfigSetting();

            config.Name           = Name != null ? (string)Name.Clone() : null;
            config.cacheType      = this.cacheType;
            config.InProc         = InProc;
            config.Alias          = Alias;
            config.LastModified   = LastModified != null ? (string)LastModified.Clone() : null;
            config.Log            = Log != null ? (Alachisoft.NCache.Config.Dom.Log)Log.Clone() : null;
            config.PerfCounters   = PerfCounters != null ? (Alachisoft.NCache.Config.Dom.PerfCounters)PerfCounters.Clone() : null;
            config.autoBalancing  = this.autoBalancing != null ? (Alachisoft.NCache.Config.Dom.AutoLoadBalancing) this.autoBalancing.Clone() : null;
            config.Cleanup        = Cleanup != null ? (Alachisoft.NCache.Config.Dom.Cleanup)Cleanup.Clone() : null;
            config.Storage        = Storage != null ? (Alachisoft.NCache.Config.Dom.Storage)Storage.Clone() : null;
            config.EvictionPolicy = EvictionPolicy != null ? (Alachisoft.NCache.Config.Dom.EvictionPolicy)EvictionPolicy.Clone() : null;
            config.QueryIndices   = QueryIndices != null ? (Alachisoft.NCache.Config.Dom.QueryIndex)QueryIndices.Clone() : null;
            config.cacheTopology  = this.cacheTopology;

            return(config);
        }
Beispiel #13
0
        public object Clone()
        {
            CacheServerConfigSetting config = new CacheServerConfigSetting();

            config.cacheType    = this.cacheType;
            config.InProc       = InProc;
            config.LastModified = LastModified != null ? (string)LastModified.Clone() : null;
            config.Log          = Log != null ? (Alachisoft.NCache.Config.Dom.Log)Log.Clone() : null;
            config.PerfCounters = PerfCounters != null ? (Alachisoft.NCache.Config.Dom.PerfCounters)PerfCounters.Clone() : null;

#if SERVER
            config.autoBalancing = this.autoBalancing != null ? (Alachisoft.NCache.Config.Dom.AutoLoadBalancing) this.autoBalancing.Clone() : null;
#endif
            config.Cleanup        = Cleanup != null ? (Alachisoft.NCache.Config.Dom.Cleanup)Cleanup.Clone() : null;
            config.Storage        = Storage != null ? (Alachisoft.NCache.Config.Dom.Storage)Storage.Clone() : null;
            config.EvictionPolicy = EvictionPolicy != null ? (Alachisoft.NCache.Config.Dom.EvictionPolicy)EvictionPolicy.Clone() : null;

            config.backingSource           = backingSource != null ? (Alachisoft.NCache.Config.Dom.BackingSource) this.backingSource.Clone() : null;
            config.Security                = Security != null ? (Alachisoft.NCache.Config.Dom.Security)Security.Clone() : null;
            config.Notifications           = Notifications != null ? (Alachisoft.NCache.Config.Dom.Notifications)Notifications.Clone() : null;
            config.SynchronizationStrategy = SynchronizationStrategy != null ? (Alachisoft.NCache.Config.Dom.SynchronizationStrategy)SynchronizationStrategy.Clone() : null;

            config.cacheTopology              = this.cacheTopology;
            config.DataFormat                 = this.DataFormat;
            config.ClientDeathDetection       = ClientDeathDetection != null ? (ClientDeathDetection)ClientDeathDetection.Clone() : null;
            config.ClientActivityNotification = ClientActivityNotification != null
                ? (ClientActivityNotification)ClientActivityNotification.Clone()
                : null;
            return(config);
        }