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

Reply via email to