]
Guy Nir commented on JBREM-956:
-------------------------------
Hi Ron.
Thanks for your full review of the issue. I think we're understand one each oher
"almost perfectly". It seems that I didn't clarify several issues on my
former report;
We're currently using clustered configuration of JBoss over Linux (which has a passive
keep-alive configuration set to 2 hours).
The problem I described arise when the server-side of the connection suddenly dies, due to
kernel panic, brute shutdown or network cable disconnection. When such occurance happens,
the next invocation with $PING$ message just blocks for very long time (on some condition,
even several hours, causing all other threads using the same invoker to block as well
(deadlock due to synchronization).
The problem with the lease pinger is that it is unconfigurable (invocation context is
created on-the-spot -- requestClients -- ignoring all other set properties).
For that reason, we had to disable the lease-pinger.
On the other hand, the ConnectionValidator (which we also use) has similar problem;
however, with the validator, we found that setting various properties can resolve the
problem, as a workaround; take a look at the following invoker locator URI used by our
client-side (with the ConnectionValidator):
socket://${jboss.bind.address}:3843/?socket.check_connection=true&numberOfRetries=1&numberOfCallRetries=1
You may close this issue;
Best regrards.
Guy.
Client side does not detect connection drop when LeasePinger is
active, therefore remaining blocked.
----------------------------------------------------------------------------------------------------
Key: JBREM-956
URL:
http://jira.jboss.com/jira/browse/JBREM-956
Project: JBoss Remoting
Issue Type: Bug
Security Level: Public(Everyone can see)
Components: transport
Affects Versions: 2.0.0.GA (Boon), 2.4.0.Beta1 (Pinto), 2.4.0.CR1 (Pinto), 2.2.0.GA
(Bluto), 2.2.0.SP1, 2.2.0.SP2, 2.2.0.SP3, 2.2.0.SP4, 2.2.1.GA, 2.2.2.GA, 2.2.2.SP1,
2.2.2.GA_CP01, 2.2.2.SP2, 2.2.2.GA_CP02, 2.2.2.GA_CP03, 2.2.2.SP4, 2.2.2.SP5, 2.4.0.Beta2
(Pinto)
Environment: JBoss 4.2.1, Windows XP SP2, Redhat Enterprise Linux 3.0
Reporter: Guy Nir
Assigned To: Ron Sigal
Fix For: 2.4.0.GA
When a client and server resides on different machines and server suddenly disconnected
from the network (i.e.: cable disconnected or host is cord-reseted/power down brutely) the
client side does not recognize this situation and remains blocking.
The main reason for this behavior is that TCP does not provide direct indication that a
connection is dropped (unless a probe such as KeepAlive is activated).
The LeasePinger class should resolve this issue, however, the invocation of
sendClientPing() method remains blocking as well.
A different shorter timeout should be placed for sendClientPing() (perhaps
timeout-per-invocation approach ?).
For example, instead of using the following implementation (taken from sendClientPing) :
Map clientsClone = new ConcurrentHashMap(clients);
Map requestClients = new ConcurrentHashMap();
requestClients.put(ClientHolder.CLIENT_HOLDER_KEY, clientsClone);
InvocationRequest ir = new InvocationRequest(invokerSessionID, null,
"$PING$", requestClients, null, null);
invoker.invoke(ir);
It is possible to use:
int clientPingLeaseTimeout = ......;
Map clientsClone = new ConcurrentHashMap(clients);
Map requestClients = new ConcurrentHashMap();
requestClients.put(ClientHolder.CLIENT_HOLDER_KEY, clientsClone);
requestClients.put(ServerInvoker.TIMEOUT, clientPingLeaseTimeout);
InvocationRequest ir = new InvocationRequest(invokerSessionID, null,
"$PING$", requestClients, null, null);
invoker.invoke(ir);
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: