Hi, Cache EexpiryPolicy is 60 minutes. but cache key failing in between and return data after some time so its not due to expiry policy. I have prepared a separate solution and attached it here. I am sharing a cache data reading time screenshot for your reference . [image: image.png] Regards, Charlin
On Mon, 19 Sept 2022 at 11:00, Pavel Tupitsyn <[email protected]> wrote: > The code you provided above uses ExpiryPolicy. It might be the reason for > TryGet to return false - cache entry expires. > To provide a definitive answer we need a project that runs and > demonstrates the problem. > > On Fri, Sep 16, 2022 at 5:12 PM Charlin S <[email protected]> wrote: > >> Hi, >> sorry for inconvenience. It's 90% actual code only. I have changed cache >> name and grid name as per policy. I have to prepare a separate solution and >> provide you if required. >> >> Regards, >> Charlin >> >> >> >> On Fri, 16 Sept 2022 at 19:11, Pavel Tupitsyn <[email protected]> >> wrote: >> >>> It does not have to be your actual code, just something that >>> demonstrates the problem >>> >>> On Fri, Sep 16, 2022 at 4:40 PM Pavel Tupitsyn <[email protected]> >>> wrote: >>> >>>> Can you please share a complete project that I can run and see >>>> the issue? >>>> >>>> On Fri, Sep 16, 2022 at 4:30 PM Charlin S <[email protected]> >>>> wrote: >>>> >>>>> Hi, >>>>> Sorry I am not able to share a complete solution. bean xml attached >>>>> and code snippet in below >>>>> IgniteConfiguration igniteGridIg = new IgniteConfiguration(); >>>>> igniteGridIg.AutoGenerateIgniteInstanceName = true; >>>>> if >>>>> (!string.IsNullOrEmpty(GlobalVariables.IgniteSettings.IGNITE_HOME)) >>>>> { >>>>> igniteGridIg.IgniteHome = >>>>> GlobalVariables.IgniteSettings.IGNITE_HOME; >>>>> } >>>>> var gridDetails = >>>>> GlobalVariables.IgniteSettings.GridDetails.Where(gd => >>>>> gd.GridType.Equals("DynamicGrid", >>>>> StringComparison.OrdinalIgnoreCase)).FirstOrDefault(); >>>>> //setting ignite working directory if not ignite will run >>>>> with default work directory >>>>> if >>>>> (!string.IsNullOrEmpty(GlobalVariables.IgniteSettings.WorkDirectory)) >>>>> { >>>>> igniteGridIg.WorkDirectory = >>>>> Path.Combine(GlobalVariables.IgniteSettings.WorkDirectory, >>>>> gridDetails.CacheType); >>>>> } >>>>> if (null != gridDetails) >>>>> { >>>>> GridName = gridDetails.GridName; >>>>> igniteGridIg.SpringConfigUrl = >>>>> Path.Combine(GlobalVariables.IgniteSettings.ConfigurationPath, >>>>> gridDetails.SpringXMLFileName); >>>>> igniteGridIg.ConsistentId = >>>>> Guid.NewGuid().ToString().ToUpper(); >>>>> ICollection<string> lstJvmOptions = null; >>>>> >>>>> //"IgniteJVMOption": >>>>> "-XX:+DisableExplicitGC,-XX:+UseG1GC,-Xms1g,-Xmx2g" >>>>> if (string.IsNullOrEmpty(gridDetails.IgniteJVMOption)) >>>>> { >>>>> lstJvmOptions = >>>>> GlobalVariables.IgniteSettings.IgniteJVMOptionDefault.Split(',').Where(x >>>>> => >>>>> !string.IsNullOrWhiteSpace(x)).ToList(); >>>>> } >>>>> else >>>>> lstJvmOptions = >>>>> gridDetails.IgniteJVMOption.Split(',').Where(x => >>>>> !string.IsNullOrWhiteSpace(x)).ToList(); >>>>> >>>>> if (lstJvmOptions.Any()) >>>>> igniteGridIg.JvmOptions = lstJvmOptions; >>>>> int RetryCount = 0; >>>>> while (InstanceObject == null) >>>>> { >>>>> try >>>>> { >>>>> RetryCount++; >>>>> //Try to start Ignite >>>>> if >>>>> (!String.IsNullOrEmpty(ApplicationSettingKeys.Get<string>("IgniteInstanceRetryLimit")) >>>>> && RetryCount > >>>>> (ApplicationSettingKeys.Get<int>("IgniteInstanceRetryLimit"))) >>>>> { >>>>> break; >>>>> } >>>>> //Try to start Ignite >>>>> if >>>>> (String.IsNullOrEmpty(ApplicationSettingKeys.Get<string>("IgniteDynamicCacheGrid"))) >>>>> InstanceObject = >>>>> Ignition.Start(igniteGridIg); >>>>> else >>>>> InstanceObject = >>>>> Ignition.TryGetIgnite(ApplicationSettingKeys.Get<string>("IgniteDynamicCacheGrid")) >>>>> ?? Ignition.Start(igniteGridIg); >>>>> } >>>>> catch (Exception ex) //If failing to start Ignite, >>>>> wait a bit for the previous AppDomain to stop the Ignite running >>>>> instance... >>>>> { >>>>> logContextInfo.ErrorLogger(ex); >>>>> >>>>> } >>>>> } >>>>> >>>>> public ICache<string, testModel> testModelICache { get; set; } >>>>> >>>>> using (new Log4NetTimeLogHelper(logContextInfo, "testModelModel", >>>>> "testModelModel")) >>>>> { >>>>> >>>>> testModelICache = testModelICache ?? >>>>> InstanceObject.GetCache<string, testModelModel>("testModelModel") >>>>> .WithExpiryPolicy(new ExpiryPolicy( >>>>> TimeSpan.FromMinutes(GlobalVariables.testModelExpiryTime), >>>>> TimeSpan.FromMinutes(GlobalVariables.testModelExpiryTime), >>>>> TimeSpan.FromMinutes(GlobalVariables.testModelExpiryTime) >>>>> )); >>>>> } >>>>> >>>>> >>>>> public CacheServiceResponse GetCacheById(string Key) >>>>> { >>>>> CacheServiceResponse response = new CacheServiceResponse(); >>>>> var model = (T)Activator.CreateInstance(typeof(T)); >>>>> try >>>>> { >>>>> >>>>> IgniteCache.TryGet(Key, out var value); >>>>> var k = IgniteCache.TryGetAsync(Key); >>>>> if (null != value) >>>>> { >>>>> model = (T)value; >>>>> response.SingleObject = model; >>>>> response.Status = true; >>>>> response.StatusCode = >>>>> System.Net.HttpStatusCode.OK; >>>>> } >>>>> else >>>>> { >>>>> response.Status = false; >>>>> response.Message = "Given key " + Key + " not >>>>> present in the cache."; >>>>> response.StatusCode = >>>>> System.Net.HttpStatusCode.NoContent; >>>>> } >>>>> >>>>> }cache(exception ex) >>>>> { >>>>> } >>>>> } >>>>> >>>>> Regards, >>>>> Charlin >>>>> >>>>> >>>>> On Fri, 16 Sept 2022 at 18:22, Pavel Tupitsyn <[email protected]> >>>>> wrote: >>>>> >>>>>> Can you share a reproducer? >>>>>> >>>>>> On Fri, Sep 16, 2022 at 3:13 PM Charlin S <[email protected]> >>>>>> wrote: >>>>>> >>>>>>> Hi, >>>>>>> Data loss is not possible, because some other time I am able to read >>>>>>> data with the same key. >>>>>>> >>>>>>> FYI: data update not in our workflow(Please ignore my previous mail >>>>>>> statement it is possible to update the cache by another >>>>>>> process/workflow). Always data read only once cache inserted by >>>>>>> key. >>>>>>> >>>>>>> Regards, >>>>>>> Charlin >>>>>>> >>>>>>> >>>>>>> On Fri, 16 Sept 2022 at 17:21, Pavel Tupitsyn <[email protected]> >>>>>>> wrote: >>>>>>> >>>>>>>> Ok, so the issue is that the key is not present in the cache, and >>>>>>>> this is not expected. >>>>>>>> Data loss is possible if one of Ignite nodes goes down, and backups >>>>>>>> [1] are not configured. >>>>>>>> Please check server logs for errors. >>>>>>>> >>>>>>>> [1] >>>>>>>> https://ignite.apache.org/docs/latest/configuring-caches/configuring-backups >>>>>>>> >>>>>>>> On Fri, Sep 16, 2022 at 2:38 PM Charlin S <[email protected]> >>>>>>>> wrote: >>>>>>>> >>>>>>>>> Hi, >>>>>>>>> There is no exception and executing the else part. it is possible >>>>>>>>> to update the cache by another process/workflow. >>>>>>>>> //response is custom class object >>>>>>>>> var model = (T)Activator.CreateInstance(typeof(T)); >>>>>>>>> IgniteCache.TryGet(Key, out var value); >>>>>>>>> if (null != value) >>>>>>>>> { >>>>>>>>> model = (T)value; >>>>>>>>> response.SingleObject = model; >>>>>>>>> response.Status = true; >>>>>>>>> response.StatusCode = >>>>>>>>> System.Net.HttpStatusCode.OK; >>>>>>>>> } >>>>>>>>> else >>>>>>>>> { >>>>>>>>> response.Status = false; >>>>>>>>> response.Message = "Given key " + Key + " >>>>>>>>> not present in the cache."; >>>>>>>>> response.StatusCode = >>>>>>>>> System.Net.HttpStatusCode.NoContent; >>>>>>>>> } >>>>>>>>> >>>>>>>>> Regards, >>>>>>>>> Charlin >>>>>>>>> >>>>>>>>> On Fri, 16 Sept 2022 at 16:53, Pavel Tupitsyn < >>>>>>>>> [email protected]> wrote: >>>>>>>>> >>>>>>>>>> Hi Charlin, >>>>>>>>>> >>>>>>>>>> Please provide full exception details. >>>>>>>>>> >>>>>>>>>> On Fri, Sep 16, 2022 at 2:04 PM Charlin S <[email protected]> >>>>>>>>>> wrote: >>>>>>>>>> >>>>>>>>>>> Hi All, >>>>>>>>>>> Cache.TryGet failed to read intermittently and was unable to >>>>>>>>>>> read some time later. >>>>>>>>>>> >>>>>>>>>>> having 3 server nodes and 11 client nodes. cache mode is >>>>>>>>>>> partition and atomicitymode not been set. >>>>>>>>>>> >>>>>>>>>>> Regards, >>>>>>>>>>> Charlin >>>>>>>>>>> >>>>>>>>>>>
<<attachment: ConsoleApp4.zip>>
