[infinispan-issues] [JBoss JIRA] (ISPN-8504) View change during cluster listener registration can throw SuspectException

Pedro Ruivo (JIRA) issues at jboss.org
Tue Nov 7 05:30:00 EST 2017


     [ https://issues.jboss.org/browse/ISPN-8504?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Pedro Ruivo updated ISPN-8504:
------------------------------
    Description: 
when registering a cluster listener, if a view change happens, it tries to register the listener in the joiner. However, if the joiner doesn't have the cache, a {{SuspectException}} is thrown. 

I noticed also the cluster listener registration uses the view and not the cache members. 

In the first iteration, the {{SuspectException}} is ignored:

Line 872:
{code:java}
for (int i = 0; i < members.size() - 1; ++i) {
  try {
     decs.take().get();
  } catch (InterruptedException e) {
     throw new CacheListenerException(e);
  } catch (ExecutionException e) {
     Throwable cause = e.getCause();
     // If we got a SuspectException it means the remote node hasn't started this cache yet.
     // Just ignore, when it joins it will retrieve the listener
     if (!(cause instanceof SuspectException)) {
        throw new CacheListenerException(cause);
     }
  }
}
{code}


However, when trying in the joiners, the exception is ignored:

Line 902
{code:java}
for (int i = 0; i < extraCount; ++i) {
  try {
     decs.take().get();
  } catch (InterruptedException e) {
     throw new CacheListenerException(e);
  } catch (ExecutionException e) {
     throw new CacheListenerException(e);
  }
}
{code}


  was:
when registering a cluster listener, if a view change happens, it tries to register the listener in the joiner. However, if the joiner doesn't have the cache, a {{SuspectException}} is thrown. 

I noticed also the cluster listener registration uses the view and not the cache members. 

In the first iteration, the {{SuspectException}} is ignored:

Line 872:
{code:java}
for (int i = 0; i < members.size() - 1; ++i) {
  try {
     decs.take().get();
  } catch (InterruptedException e) {
     throw new CacheListenerException(e);
  } catch (ExecutionException e) {
     Throwable cause = e.getCause();
     // If we got a SuspectException it means the remote node hasn't started this cache yet.
     // Just ignore, when it joins it will retrieve the listener
     if (!(cause instanceof SuspectException)) {
        throw new CacheListenerException(cause);
     }
  }
}
{code}


However, when trying in the joiners, the exception isn't ignored:

Line 902
{code:java}
for (int i = 0; i < extraCount; ++i) {
  try {
     decs.take().get();
  } catch (InterruptedException e) {
     throw new CacheListenerException(e);
  } catch (ExecutionException e) {
     throw new CacheListenerException(e);
  }
}
{code}




> View change during cluster listener registration can throw SuspectException
> ---------------------------------------------------------------------------
>
>                 Key: ISPN-8504
>                 URL: https://issues.jboss.org/browse/ISPN-8504
>             Project: Infinispan
>          Issue Type: Bug
>            Reporter: Pedro Ruivo
>             Fix For: 9.2.0.Final, 9.1.3.Final
>
>
> when registering a cluster listener, if a view change happens, it tries to register the listener in the joiner. However, if the joiner doesn't have the cache, a {{SuspectException}} is thrown. 
> I noticed also the cluster listener registration uses the view and not the cache members. 
> In the first iteration, the {{SuspectException}} is ignored:
> Line 872:
> {code:java}
> for (int i = 0; i < members.size() - 1; ++i) {
>   try {
>      decs.take().get();
>   } catch (InterruptedException e) {
>      throw new CacheListenerException(e);
>   } catch (ExecutionException e) {
>      Throwable cause = e.getCause();
>      // If we got a SuspectException it means the remote node hasn't started this cache yet.
>      // Just ignore, when it joins it will retrieve the listener
>      if (!(cause instanceof SuspectException)) {
>         throw new CacheListenerException(cause);
>      }
>   }
> }
> {code}
> However, when trying in the joiners, the exception is ignored:
> Line 902
> {code:java}
> for (int i = 0; i < extraCount; ++i) {
>   try {
>      decs.take().get();
>   } catch (InterruptedException e) {
>      throw new CacheListenerException(e);
>   } catch (ExecutionException e) {
>      throw new CacheListenerException(e);
>   }
> }
> {code}



--
This message was sent by Atlassian JIRA
(v7.5.0#75005)


More information about the infinispan-issues mailing list