[
https://issues.jboss.org/browse/ISPN-3224?page=com.atlassian.jira.plugin....
]
Radim Vansa updated ISPN-3224:
------------------------------
Description:
########################Run hotrod client with pure
IPv6#############################################
Hotrod client fails when want connect to server, below is exception from pure IPv6
machines it doesn't really undedstand IPv6 address it should connect."Could not
connect to server: /0.0.10.60:52" Here should
be IPv6 address but it looks like some wrong IPv4 address it want to connect to and I use
complicated address 2620:52:0:105f:0:0:ffff:32%2:11222 as host variable and it is not
specified in /etc/hosts
{code}
public RemoteCacheManager(String host, int port, boolean start, ClassLoader classLoader)
{
config = new ConfigurationProperties(host + ":" + port); <<<
host=2620:52:0:105f:0:0:ffff:32%2 and port=11222
this.classLoader = classLoader;
if (start) start();
}
{code}
then in start method
{code}
@Override
public void start() {
// Workaround for JDK6 NPE:
http://bugs.sun.com/view_bug.do?bug_id=6427854
SysPropertyActions.setProperty("sun.nio.ch.bugLevel",
"\"\"");
forceReturnValueDefault = config.getForceReturnValues();
codec = CodecFactory.getCodec(config.getProtocolVersion());
String factory = config.getTransportFactory();
transportFactory = (TransportFactory) getInstance(factory, classLoader);
Collection<SocketAddress> servers = config.getServerList(); <<< we
get list of servers but getServerList() method should be improved see below!
transportFactory.start(codec, config, servers, topologyId, classLoader);
<<< and pass to transportFactory
if (marshaller == null) {
String marshallerName = config.getMarshaller();
setMarshaller((Marshaller) getInstance(marshallerName, classLoader));
}
if (asyncExecutorService == null) {
String asyncExecutorClass = config.getAsyncExecutorFactory();
ExecutorFactory executorFactory = (ExecutorFactory)
getInstance(asyncExecutorClass, classLoader);
asyncExecutorService = executorFactory.getExecutor(config.getProperties());
}
synchronized (cacheName2RemoteCache) {
for (RemoteCacheHolder rcc : cacheName2RemoteCache.values()) {
startRemoteCache(rcc);
}
}
// Print version to help figure client version run
log.version(org.infinispan.Version.printVersion());
started = true;
}
{code}
and "servers" variable contain the same IP address
2620:52:0:105f:0:0:ffff:32%2:11222
{code}
public Collection<SocketAddress> getServerList() {
Set<SocketAddress> addresses = new HashSet<SocketAddress>();
String servers = props.getProperty(SERVER_LIST, "127.0.0.1:" +
DEFAULT_HOTROD_PORT); <<< got 2620:52:0:105f:0:0:ffff:32%2:11222
for (String server : servers.split(";")) {
String[] components = server.trim().split(":"); <<< just only
here the splitting it wrong, we devide address into 9 chunks
String host = components[0]; <<< host name shoud be 1 chunk 2620
int port = DEFAULT_HOTROD_PORT;
if (components.length > 1) port = Integer.parseInt(components[1]);
<<< and port 52
addresses.add(new InetSocketAddress(host, port)); <<< and again we pass
wrong parameteres to this constructor with IntetSocketAddress(2620, 52)
}
if (addresses.isEmpty()) throw new IllegalStateException("No Hot Rod servers
specified!");
return addresses; << here we just get some strange IPv4 address as
0.0.10.60:52
}
{code}
and exception is the following
{code}
Caused by: org.infinispan.client.hotrod.exceptions.TransportException:: Could not connect
to server: /0.0.10.60:52
at
org.infinispan.client.hotrod.impl.transport.tcp.TcpTransport.<init>(TcpTransport.java:88)
at
org.infinispan.client.hotrod.impl.transport.tcp.TransportObjectFactory.makeObject(TransportObjectFactory.java:57)
at
org.infinispan.client.hotrod.impl.transport.tcp.TransportObjectFactory.makeObject(TransportObjectFactory.java:38)
at
org.apache.commons.pool.impl.GenericKeyedObjectPool.borrowObject(GenericKeyedObjectPool.java:1220)
at
org.infinispan.client.hotrod.impl.transport.tcp.TcpTransportFactory.borrowTransportFromPool(TcpTransportFactory.java:271)
{code}
########################Other issue is when hotrod client connects in dual stack
mode#################
/etc/hosts file is---------------------------------------------------------
127.0.0.1 myhost localhost.localdomain localhost
::1 myhost localhost6.localdomain6 localhost6
---------------------------------------------------------------------------
Then is the same problem in ConfigurationProperties.java getServerList() method we add
address to addresses <<<addresses.add(new InetSocketAddress(host,
port));>>>
so InetSocketAddress constructor is called
{code}
public InetSocketAddress(String hostname, int port) {
checkHost(hostname);
InetAddress addr = null;
String host = null;
try {
addr = InetAddress.getByName(hostname); <<< we should get InetAddress
with hostname
} catch(UnknownHostException e) {
host = hostname;
}
holder = new InetSocketAddressHolder(host, addr, checkPort(
}
{code}
but we have 2! different inet addresses with the same hostname one is 127.0.0.1 and other
::1 and if i run it on IPv6 there should be ::1 and not 127.0.0.1!
And
public static InetAddress getByName(String host)
throws UnknownHostException {
return InetAddress.getAllByName(host)[0]; <<< but here we get only first
address in array and got always 127.0.0.1
}
and then other exception is thrown
{code}
Caused by: org.infinispan.client.hotrod.exceptions.TransportException:: Could not connect
to server: vchepQA/127.0.0.1:11222
at
org.infinispan.client.hotrod.impl.transport.tcp.TcpTransport.<init>(TcpTransport.java:88)
at
org.infinispan.client.hotrod.impl.transport.tcp.TransportObjectFactory.makeObject(TransportObjectFactory.java:57)
at
org.infinispan.client.hotrod.impl.transport.tcp.TransportObjectFactory.makeObject(TransportObjectFactory.java:38)
at
org.apache.commons.pool.impl.GenericKeyedObjectPool.borrowObject(GenericKeyedObjectPool.java:1220)
at
org.infinispan.client.hotrod.impl.transport.tcp.TcpTransportFactory.borrowTransportFromPool(TcpTransportFactory.java:271)
... 97 more
{code}
and i forget to add trace log just download it here
http://dropmefiles.com/en/H5wvu
##################################################INFINISPAN
5.3.0.FINAL#####################################################################
org.infinispan.client.hotrod.configuration.ConfigurationBuilder has this method
{code}
@Override
public ConfigurationBuilder addServers(String servers) {
for (String server : servers.split(";")) {
String[] components = server.trim().split(":");
String host = components[0];
int port = ConfigurationProperties.DEFAULT_HOTROD_PORT;
if (components.length > 1)
port = Integer.parseInt(components[1]);
this.addServer().host(host).port(port);
}
return this;
}
{code}
And what if I put in <servers> argument something like
addServers("[fe80::3e97:eff:fe19:3045]:11222;[fe80::3e97:eff:fe19:3046]:11322")?
I think that It is not parsing correctly and we can use
<servers> argument something like addServers("localhost6:11222;
localhost6.localdomain6:11322") or other ipv6 hostnames.
Because I want to use ip addresses and not hostnames and not to change /etc/hosts file
only for mapping ipv6 address to some dummy hostname
was:
########################Run hotrod client with pure
IPv6#############################################
Hotrod client fails when want connect to server, below is exception from pure IPv6
machines it doesn't really undedstand IPv6 address it should connect."Could not
connect to server: /0.0.10.60:52" Here should
be IPv6 address but it looks like some wrong IPv4 address it want to connect to and I use
complicated address 2620:52:0:105f:0:0:ffff:32%2:11222 as host variable and it is not
specified in /etc/hosts
public RemoteCacheManager(String host, int port, boolean start, ClassLoader classLoader)
{
config = new ConfigurationProperties(host + ":" + port); <<<
host=2620:52:0:105f:0:0:ffff:32%2 and port=11222
this.classLoader = classLoader;
if (start) start();
}
then in start method
@Override
public void start() {
// Workaround for JDK6 NPE:
http://bugs.sun.com/view_bug.do?bug_id=6427854
SysPropertyActions.setProperty("sun.nio.ch.bugLevel",
"\"\"");
forceReturnValueDefault = config.getForceReturnValues();
codec = CodecFactory.getCodec(config.getProtocolVersion());
String factory = config.getTransportFactory();
transportFactory = (TransportFactory) getInstance(factory, classLoader);
Collection<SocketAddress> servers = config.getServerList(); <<< we
get list of servers but getServerList() method should be improved see below!
transportFactory.start(codec, config, servers, topologyId, classLoader);
<<< and pass to transportFactory
if (marshaller == null) {
String marshallerName = config.getMarshaller();
setMarshaller((Marshaller) getInstance(marshallerName, classLoader));
}
if (asyncExecutorService == null) {
String asyncExecutorClass = config.getAsyncExecutorFactory();
ExecutorFactory executorFactory = (ExecutorFactory)
getInstance(asyncExecutorClass, classLoader);
asyncExecutorService = executorFactory.getExecutor(config.getProperties());
}
synchronized (cacheName2RemoteCache) {
for (RemoteCacheHolder rcc : cacheName2RemoteCache.values()) {
startRemoteCache(rcc);
}
}
// Print version to help figure client version run
log.version(org.infinispan.Version.printVersion());
started = true;
}
and "servers" variable contain the same IP address
2620:52:0:105f:0:0:ffff:32%2:11222
public Collection<SocketAddress> getServerList() {
Set<SocketAddress> addresses = new HashSet<SocketAddress>();
String servers = props.getProperty(SERVER_LIST, "127.0.0.1:" +
DEFAULT_HOTROD_PORT); <<< got 2620:52:0:105f:0:0:ffff:32%2:11222
for (String server : servers.split(";")) {
String[] components = server.trim().split(":"); <<< just only
here the splitting it wrong, we devide address into 9 chunks
String host = components[0]; <<< host name shoud be 1 chunk 2620
int port = DEFAULT_HOTROD_PORT;
if (components.length > 1) port = Integer.parseInt(components[1]);
<<< and port 52
addresses.add(new InetSocketAddress(host, port)); <<< and again we pass
wrong parameteres to this constructor with IntetSocketAddress(2620, 52)
}
if (addresses.isEmpty()) throw new IllegalStateException("No Hot Rod servers
specified!");
return addresses; << here we just get some strange IPv4 address as
0.0.10.60:52
}
and exception is the following
Caused by: org.infinispan.client.hotrod.exceptions.TransportException:: Could not connect
to server: /0.0.10.60:52
at
org.infinispan.client.hotrod.impl.transport.tcp.TcpTransport.<init>(TcpTransport.java:88)
at
org.infinispan.client.hotrod.impl.transport.tcp.TransportObjectFactory.makeObject(TransportObjectFactory.java:57)
at
org.infinispan.client.hotrod.impl.transport.tcp.TransportObjectFactory.makeObject(TransportObjectFactory.java:38)
at
org.apache.commons.pool.impl.GenericKeyedObjectPool.borrowObject(GenericKeyedObjectPool.java:1220)
at
org.infinispan.client.hotrod.impl.transport.tcp.TcpTransportFactory.borrowTransportFromPool(TcpTransportFactory.java:271)
########################Other issue is when hotrod client connects in dual stack
mode#################
/etc/hosts file is---------------------------------------------------------
127.0.0.1 myhost localhost.localdomain localhost
::1 myhost localhost6.localdomain6 localhost6
---------------------------------------------------------------------------
Then is the same problem in ConfigurationProperties.java getServerList() method we add
address to addresses <<<addresses.add(new InetSocketAddress(host,
port));>>>
so InetSocketAddress constructor is called
public InetSocketAddress(String hostname, int port) {
checkHost(hostname);
InetAddress addr = null;
String host = null;
try {
addr = InetAddress.getByName(hostname); <<< we should get InetAddress
with hostname
} catch(UnknownHostException e) {
host = hostname;
}
holder = new InetSocketAddressHolder(host, addr, checkPort(
}
but we have 2! different inet addresses with the same hostname one is 127.0.0.1 and other
::1 and if i run it on IPv6 there should be ::1 and not 127.0.0.1!
And
public static InetAddress getByName(String host)
throws UnknownHostException {
return InetAddress.getAllByName(host)[0]; <<< but here we get only first
address in array and got always 127.0.0.1
}
and then other exception is thrown--------------------------------------
Caused by: org.infinispan.client.hotrod.exceptions.TransportException:: Could not connect
to server: vchepQA/127.0.0.1:11222
at
org.infinispan.client.hotrod.impl.transport.tcp.TcpTransport.<init>(TcpTransport.java:88)
at
org.infinispan.client.hotrod.impl.transport.tcp.TransportObjectFactory.makeObject(TransportObjectFactory.java:57)
at
org.infinispan.client.hotrod.impl.transport.tcp.TransportObjectFactory.makeObject(TransportObjectFactory.java:38)
at
org.apache.commons.pool.impl.GenericKeyedObjectPool.borrowObject(GenericKeyedObjectPool.java:1220)
at
org.infinispan.client.hotrod.impl.transport.tcp.TcpTransportFactory.borrowTransportFromPool(TcpTransportFactory.java:271)
... 97 more
---------------------------------------------------------------------------
and i forget to add trace log just download it here
http://dropmefiles.com/en/H5wvu
##################################################INFINISPAN
5.3.0.FINAL#####################################################################
org.infinispan.client.hotrod.configuration.ConfigurationBuilder has this method
@Override
public ConfigurationBuilder addServers(String servers) {
for (String server : servers.split(";")) {
String[] components = server.trim().split(":");
String host = components[0];
int port = ConfigurationProperties.DEFAULT_HOTROD_PORT;
if (components.length > 1)
port = Integer.parseInt(components[1]);
this.addServer().host(host).port(port);
}
return this;
}
And what if I put in <servers> argument something like
addServers("[fe80::3e97:eff:fe19:3045]:11222;[fe80::3e97:eff:fe19:3046]:11322")?
I think that It is not parsing correctly and we can use
<servers> argument something like addServers("localhost6:11222;
localhost6.localdomain6:11322") or other ipv6 hostnames.
Because I want to use ip addresses and not hostnames and not to change /etc/hosts file
only for mapping ipv6 address to some dummy hostname
RemoteCacheManager of HotRod client is not able connect to server
because of wrong parsing IPv6 address for pure IPv6 machines and gets wrong address on
dual stack machines
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Key: ISPN-3224
URL:
https://issues.jboss.org/browse/ISPN-3224
Project: Infinispan
Issue Type: Bug
Components: Remote protocols
Affects Versions: 5.2.5.Final, 5.3.0.Final
Reporter: Vitalii Chepeliuk
Assignee: Tristan Tarrant
Priority: Critical
Fix For: 6.0.0.CR1
########################Run hotrod client with pure
IPv6#############################################
Hotrod client fails when want connect to server, below is exception from pure IPv6
machines it doesn't really undedstand IPv6 address it should connect."Could not
connect to server: /0.0.10.60:52" Here should
be IPv6 address but it looks like some wrong IPv4 address it want to connect to and I use
complicated address 2620:52:0:105f:0:0:ffff:32%2:11222 as host variable and it is not
specified in /etc/hosts
{code}
public RemoteCacheManager(String host, int port, boolean start, ClassLoader
classLoader) {
config = new ConfigurationProperties(host + ":" + port); <<<
host=2620:52:0:105f:0:0:ffff:32%2 and port=11222
this.classLoader = classLoader;
if (start) start();
}
{code}
then in start method
{code}
@Override
public void start() {
// Workaround for JDK6 NPE:
http://bugs.sun.com/view_bug.do?bug_id=6427854
SysPropertyActions.setProperty("sun.nio.ch.bugLevel",
"\"\"");
forceReturnValueDefault = config.getForceReturnValues();
codec = CodecFactory.getCodec(config.getProtocolVersion());
String factory = config.getTransportFactory();
transportFactory = (TransportFactory) getInstance(factory, classLoader);
Collection<SocketAddress> servers = config.getServerList(); <<< we
get list of servers but getServerList() method should be improved see below!
transportFactory.start(codec, config, servers, topologyId, classLoader);
<<< and pass to transportFactory
if (marshaller == null) {
String marshallerName = config.getMarshaller();
setMarshaller((Marshaller) getInstance(marshallerName, classLoader));
}
if (asyncExecutorService == null) {
String asyncExecutorClass = config.getAsyncExecutorFactory();
ExecutorFactory executorFactory = (ExecutorFactory)
getInstance(asyncExecutorClass, classLoader);
asyncExecutorService = executorFactory.getExecutor(config.getProperties());
}
synchronized (cacheName2RemoteCache) {
for (RemoteCacheHolder rcc : cacheName2RemoteCache.values()) {
startRemoteCache(rcc);
}
}
// Print version to help figure client version run
log.version(org.infinispan.Version.printVersion());
started = true;
}
{code}
and "servers" variable contain the same IP address
2620:52:0:105f:0:0:ffff:32%2:11222
{code}
public Collection<SocketAddress> getServerList() {
Set<SocketAddress> addresses = new HashSet<SocketAddress>();
String servers = props.getProperty(SERVER_LIST, "127.0.0.1:" +
DEFAULT_HOTROD_PORT); <<< got 2620:52:0:105f:0:0:ffff:32%2:11222
for (String server : servers.split(";")) {
String[] components = server.trim().split(":"); <<< just only
here the splitting it wrong, we devide address into 9 chunks
String host = components[0]; <<< host name shoud be 1 chunk 2620
int port = DEFAULT_HOTROD_PORT;
if (components.length > 1) port = Integer.parseInt(components[1]);
<<< and port 52
addresses.add(new InetSocketAddress(host, port)); <<< and again we pass
wrong parameteres to this constructor with IntetSocketAddress(2620, 52)
}
if (addresses.isEmpty()) throw new IllegalStateException("No Hot Rod servers
specified!");
return addresses; << here we just get some strange IPv4 address as
0.0.10.60:52
}
{code}
and exception is the following
{code}
Caused by: org.infinispan.client.hotrod.exceptions.TransportException:: Could not connect
to server: /0.0.10.60:52
at
org.infinispan.client.hotrod.impl.transport.tcp.TcpTransport.<init>(TcpTransport.java:88)
at
org.infinispan.client.hotrod.impl.transport.tcp.TransportObjectFactory.makeObject(TransportObjectFactory.java:57)
at
org.infinispan.client.hotrod.impl.transport.tcp.TransportObjectFactory.makeObject(TransportObjectFactory.java:38)
at
org.apache.commons.pool.impl.GenericKeyedObjectPool.borrowObject(GenericKeyedObjectPool.java:1220)
at
org.infinispan.client.hotrod.impl.transport.tcp.TcpTransportFactory.borrowTransportFromPool(TcpTransportFactory.java:271)
{code}
########################Other issue is when hotrod client connects in dual stack
mode#################
/etc/hosts file is---------------------------------------------------------
127.0.0.1 myhost localhost.localdomain localhost
::1 myhost localhost6.localdomain6 localhost6
---------------------------------------------------------------------------
Then is the same problem in ConfigurationProperties.java getServerList() method we add
address to addresses <<<addresses.add(new InetSocketAddress(host,
port));>>>
so InetSocketAddress constructor is called
{code}
public InetSocketAddress(String hostname, int port) {
checkHost(hostname);
InetAddress addr = null;
String host = null;
try {
addr = InetAddress.getByName(hostname); <<< we should get
InetAddress with hostname
} catch(UnknownHostException e) {
host = hostname;
}
holder = new InetSocketAddressHolder(host, addr, checkPort(
}
{code}
but we have 2! different inet addresses with the same hostname one is 127.0.0.1 and other
::1 and if i run it on IPv6 there should be ::1 and not 127.0.0.1!
And
public static InetAddress getByName(String host)
throws UnknownHostException {
return InetAddress.getAllByName(host)[0]; <<< but here we get only first
address in array and got always 127.0.0.1
}
and then other exception is thrown
{code}
Caused by: org.infinispan.client.hotrod.exceptions.TransportException:: Could not connect
to server: vchepQA/127.0.0.1:11222
at
org.infinispan.client.hotrod.impl.transport.tcp.TcpTransport.<init>(TcpTransport.java:88)
at
org.infinispan.client.hotrod.impl.transport.tcp.TransportObjectFactory.makeObject(TransportObjectFactory.java:57)
at
org.infinispan.client.hotrod.impl.transport.tcp.TransportObjectFactory.makeObject(TransportObjectFactory.java:38)
at
org.apache.commons.pool.impl.GenericKeyedObjectPool.borrowObject(GenericKeyedObjectPool.java:1220)
at
org.infinispan.client.hotrod.impl.transport.tcp.TcpTransportFactory.borrowTransportFromPool(TcpTransportFactory.java:271)
... 97 more
{code}
and i forget to add trace log just download it here
http://dropmefiles.com/en/H5wvu
##################################################INFINISPAN
5.3.0.FINAL#####################################################################
org.infinispan.client.hotrod.configuration.ConfigurationBuilder has this method
{code}
@Override
public ConfigurationBuilder addServers(String servers) {
for (String server : servers.split(";")) {
String[] components = server.trim().split(":");
String host = components[0];
int port = ConfigurationProperties.DEFAULT_HOTROD_PORT;
if (components.length > 1)
port = Integer.parseInt(components[1]);
this.addServer().host(host).port(port);
}
return this;
}
{code}
And what if I put in <servers> argument something like
addServers("[fe80::3e97:eff:fe19:3045]:11222;[fe80::3e97:eff:fe19:3046]:11322")?
I think that It is not parsing correctly and we can use
<servers> argument something like addServers("localhost6:11222;
localhost6.localdomain6:11322") or other ipv6 hostnames.
Because I want to use ip addresses and not hostnames and not to change /etc/hosts file
only for mapping ipv6 address to some dummy hostname
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see:
http://www.atlassian.com/software/jira