Hi, I have attached here. Regards, Charlin
On Mon, 19 Sept 2022 at 19:00, Pavel Tupitsyn <[email protected]> wrote: > 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 >>>>>>>>>>>>> >>>>>>>>>>>>>
<<attachment: ConsoleApp4.zip>>
