[
https://issues.apache.org/jira/browse/GEODE-8592?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Michael Martell updated GEODE-8592:
-----------------------------------
Description:
As reported on StackOverflow
([https://stackoverflow.com/questions/64045931/repeated-ui-calls-to-geode-native-client-attributesmutator-setcachelistener)],
this looks like a bug with AttributesMutator when setting multiple
CacheListeners.
Direct from SO:
If I have a button on a UI that registers a listener, sync not async, and click
it several times, then repeatedly setting listeners on a region hangs:
A {{Cache c}} is already initialized. This is using the C# Geode Native Client.
{code:C#}
IRegion<string, Object> d = c.GetRegion<string, Object>("deal");
try
{ Logs.Trace("Registering key"); d.GetSubscriptionService().RegisterKeys(s);
d.AttributesMutator.SetCacheListener(new LDeal<string, Object>(c, AddDeal)); }
catch (Exception ex)
{ new ApplicationException("Can't register key: " + clOrdId, ex); }
}}
{code:C#}
Is this an optimal way to set a listener on a region? If it's going to hang how
can I have a timeout so that setting a listener is better managed?
UPDATE: using {{async}} / {{await}} appears to resolve this issue, so that the
{{SetCacheListener}} becomes
{code:java}
{{await Task.Run(() => d.AttributesMutator.SetCacheListener(new LDeal<string,
Object>(c, AddDeal)));}}
{{}}
{code:java}
{code}
{{}}
was:
As reported on StackOverflow
([https://stackoverflow.com/questions/64045931/repeated-ui-calls-to-geode-native-client-attributesmutator-setcachelistener)],
this looks like a bug with AttributesMutator when setting multiple
CacheListeners.
Direct from SO:
If I have a button on a UI that registers a listener, sync not async, and click
it several times, then repeatedly setting listeners on a region hangs:
A {{Cache c}} is already initialized. This is using the C# Geode Native Client.
{code:java}
{{IRegion<string, Object> d = c.GetRegion<string, Object>("deal");
try
{ Logs.Trace("Registering key"); d.GetSubscriptionService().RegisterKeys(s);
d.AttributesMutator.SetCacheListener(new LDeal<string, Object>(c, AddDeal)); }
catch (Exception ex)
{ new ApplicationException("Can't register key: " + clOrdId, ex); }
}}
{code:java}
{code}
Is this an optimal way to set a listener on a region? If it's going to hang how
can I have a timeout so that setting a listener is better managed?
UPDATE: using {{async}} / {{await}} appears to resolve this issue, so that the
{{SetCacheListener}} becomes
{code:}
{{await Task.Run(() => d.AttributesMutator.SetCacheListener(new LDeal<string,
Object>(c, AddDeal)));}}
{{}}
{code:java}
{code}
{{}}
> Hang in SetCacheListener
> ------------------------
>
> Key: GEODE-8592
> URL: https://issues.apache.org/jira/browse/GEODE-8592
> Project: Geode
> Issue Type: Bug
> Components: native client
> Reporter: Michael Martell
> Priority: Minor
>
> As reported on StackOverflow
> ([https://stackoverflow.com/questions/64045931/repeated-ui-calls-to-geode-native-client-attributesmutator-setcachelistener)],
> this looks like a bug with AttributesMutator when setting multiple
> CacheListeners.
>
> Direct from SO:
> If I have a button on a UI that registers a listener, sync not async, and
> click it several times, then repeatedly setting listeners on a region hangs:
> A {{Cache c}} is already initialized. This is using the C# Geode Native
> Client.
> {code:C#}
> IRegion<string, Object> d = c.GetRegion<string, Object>("deal");
> try
> { Logs.Trace("Registering key"); d.GetSubscriptionService().RegisterKeys(s);
> d.AttributesMutator.SetCacheListener(new LDeal<string, Object>(c, AddDeal)); }
> catch (Exception ex)
> { new ApplicationException("Can't register key: " + clOrdId, ex); }
> }}
> {code:C#}
> Is this an optimal way to set a listener on a region? If it's going to hang
> how can I have a timeout so that setting a listener is better managed?
> UPDATE: using {{async}} / {{await}} appears to resolve this issue, so that
> the {{SetCacheListener}} becomes
> {code:java}
>
> {{await Task.Run(() => d.AttributesMutator.SetCacheListener(new LDeal<string,
> Object>(c, AddDeal)));}}
> {{}}
> {code:java}
> {code}
> {{}}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)