[infinispan-issues] [JBoss JIRA] (ISPN-6771) HotRod Client - TcpTransportFactory - update topology issue with multiple caches

Jean-Francois LARTAUD (JIRA) issues at jboss.org
Fri Jun 10 05:19:00 EDT 2016


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

Jean-Francois LARTAUD updated ISPN-6771:
----------------------------------------
    Description: 
After debugging : 
In TcpTransportFactory, the topologyInfo is global (whatever the number of caches), the balancing strategies are defined by cache.

* For the 1st cache, the servers list is updated (org.infinispan.client.hotrod.impl.transport.tcp.TcpTransportFactory#updateServers(java.util.Collection<java.net.SocketAddress>, byte[], boolean), the topologyInfo is updated.
** The new servers list is returned only if servers have been added.
** As this list is not empty, the balancy strategy for the first cache is updated.
* For the other caches, the server list is updated by calling the same "updateServers" method, the "updateTopologyInfo" method is called
** But as the topologyInfo has been already updated for the 1st cache, it returns "Collections.emptyList();"
** The associated balancing strategies are not updated.

{code}
public void updateServers(Collection<SocketAddress> newServers, byte[] cacheName, boolean quiet) {
      synchronized (lock) {
         Collection<SocketAddress> servers = updateTopologyInfo(newServers, quiet);
        if (!servers.isEmpty()) {
            FailoverRequestBalancingStrategy balancer = getOrCreateIfAbsentBalancer(cacheName);
            balancer.setServers(servers);
         }
      }
   }
{code}

  was:
After debugging : 
In TcpTransportFactory, the topologyInfo is global (whatever the number of caches), the balancing strategies are defined by cache.

* For the 1st cache, the servers list is updated (org.infinispan.client.hotrod.impl.transport.tcp.TcpTransportFactory#updateServers(java.util.Collection<java.net.SocketAddress>, byte[], boolean), the topologyInfo is updated.
** The new servers list is returned only if servers have been added.
** As this list is not empty, the balancy strategy for the first cache is updated.
* For the other caches, the server list is updated by calling the same "updateServers" method, the "updateTopologyInfo" method is called
** But as the topologyInfo has been already updated for the 1st cache, it returns "Collections.emptyList();"
** The associated balancing strategies are not updated.

{code}
public void updateServers(Collection<SocketAddress> newServers, byte[] cacheName, boolean quiet) {
      synchronized (lock) {
         Collection<SocketAddress> servers = updateTopologyInfo(newServers, quiet);
        //  
        if (!servers.isEmpty()) {
            FailoverRequestBalancingStrategy balancer = getOrCreateIfAbsentBalancer(cacheName);
            balancer.setServers(servers);
         }
      }
   }
{code}



> HotRod Client - TcpTransportFactory - update topology issue with multiple caches
> --------------------------------------------------------------------------------
>
>                 Key: ISPN-6771
>                 URL: https://issues.jboss.org/browse/ISPN-6771
>             Project: Infinispan
>          Issue Type: Bug
>          Components: hot
>    Affects Versions: 9.0.0.Alpha2, 8.2.2.Final
>         Environment: Infinispan server 8.2.2.Final
> Hot rod client (Java) : 8.2.2.Final 
>            Reporter: Jean-Francois LARTAUD
>
> After debugging : 
> In TcpTransportFactory, the topologyInfo is global (whatever the number of caches), the balancing strategies are defined by cache.
> * For the 1st cache, the servers list is updated (org.infinispan.client.hotrod.impl.transport.tcp.TcpTransportFactory#updateServers(java.util.Collection<java.net.SocketAddress>, byte[], boolean), the topologyInfo is updated.
> ** The new servers list is returned only if servers have been added.
> ** As this list is not empty, the balancy strategy for the first cache is updated.
> * For the other caches, the server list is updated by calling the same "updateServers" method, the "updateTopologyInfo" method is called
> ** But as the topologyInfo has been already updated for the 1st cache, it returns "Collections.emptyList();"
> ** The associated balancing strategies are not updated.
> {code}
> public void updateServers(Collection<SocketAddress> newServers, byte[] cacheName, boolean quiet) {
>       synchronized (lock) {
>          Collection<SocketAddress> servers = updateTopologyInfo(newServers, quiet);
>         if (!servers.isEmpty()) {
>             FailoverRequestBalancingStrategy balancer = getOrCreateIfAbsentBalancer(cacheName);
>             balancer.setServers(servers);
>          }
>       }
>    }
> {code}



--
This message was sent by Atlassian JIRA
(v6.4.11#64026)


More information about the infinispan-issues mailing list