Uploaded image for project: 'JBoss Remoting'
  1. JBoss Remoting
  2. JBREM-956

Make LeasePinger timeout separately configurable

    Details

    • Type: Bug
    • Status: Closed (View Workflow)
    • Priority: Major
    • Resolution: Done
    • Affects Version/s: 2.0.0.GA (Boon), 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.GA_CP01, 2.2.2.SP1, 2.2.2.SP2, 2.2.2.GA_CP02, 2.2.2.GA_CP03, 2.2.2.SP4, 2.4.0.Beta1 (Pinto), 2.2.2.SP5, 2.4.0.Beta2 (Pinto), 2.4.0.CR1 (Pinto)
    • Fix Version/s: 2.4.0.CR2 (Pinto)
    • Component/s: transport
    • Labels:
      None
    • Affects:
      Documentation (Ref Guide, User Guide, etc.)
    • Estimated Difficulty:
      Low

      Description

      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);

        Gliffy Diagrams

          Attachments

            Issue Links

              Activity

                People

                • Assignee:
                  ron_sigal Ronald Sigal
                  Reporter:
                  guynir Guy Nir
                • Votes:
                  0 Vote for this issue
                  Watchers:
                  0 Start watching this issue

                  Dates

                  • Created:
                    Updated:
                    Resolved: