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 >>>>>>>>> >>>>>>>>>
