I get an exception when trying to run the code: Unhandled exception. System.NullReferenceException: Object reference not set to an instance of an object. at ConsoleApp4.IgniteInstance..ctor() in /home/pavel/Downloads/ConsoleApp4/ConsoleApp4/ConsoleApp4/IgniteInstance.cs:line 47 at ConsoleApp4.IgniteInstance.get_Instance() in /home/pavel/Downloads/ConsoleApp4/ConsoleApp4/ConsoleApp4/IgniteInstance.cs:line 33 at ConsoleApp4.UnitOfWork..ctor() in /home/pavel/Downloads/ConsoleApp4/ConsoleApp4/ConsoleApp4/UnitOfWork.cs:line 15 at ConsoleApp4.Program.Main(String[] args) in /home/pavel/Downloads/ConsoleApp4/ConsoleApp4/ConsoleApp4/Program.cs:line 12
On Mon, Sep 19, 2022 at 3:04 PM Charlin S <[email protected]> wrote: > 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 >>>>>>>>>>>> >>>>>>>>>>>>
