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

Reply via email to