Uploaded image for project: 'JBoss Enterprise Application Platform'
  1. JBoss Enterprise Application Platform
  2. JBEAP-13813

(7.2.z) Server with HA profile bound to 0.0.0.0 sends cluster topology containing this address to client

    Details

    • Type: Bug
    • Status: Closed (View Workflow)
    • Priority: Minor
    • Resolution: Deferred
    • Affects Version/s: 7.1.0.CR3
    • Fix Version/s: None
    • Component/s: Clustering, EJB
    • Labels:
      None
    • Target Release:
    • Story Points:
      3
    • Workaround:
      Workaround Exists
    • Workaround Description:
      Hide

      In server-2, run the following CLI command:

      /socket-binding-group=standard-sockets/socket-binding=http:write-attribute(name=client-mappings,value=[{destination-address=XXXX.XXXX.XXXX.XXXX}]) 
      

      Use real IP for the destination-address

      Show
      In server-2, run the following CLI command: /socket-binding-group=standard-sockets/socket-binding=http:write-attribute(name=client-mappings,value=[{destination-address=XXXX.XXXX.XXXX.XXXX}]) Use real IP for the destination-address

      Description

      Scenario:

      • server-1
        • Doesn't matter which profile
        • Doesn't matter which bind address
        • Has a remote-outbound-connection pointing at server-2 through server-2's public IP address
      • server-2
        • On a different machine than server-1
        • Bound to 0.0.0.0 (important)
        • Running standalone-ha profile (important)
      • Standalone EJB client invokes a bean server-1, which as a result invokes another bean on server-2. Repeat this multiple times.

      The first invocation goes through correctly, but it can be seen in the log of server-1 that server-2 (10.8.246.90) has sent a cluster topology containing 0.0.0.0:

      04:04:24,651 TRACE [org.jboss.ejb.client.remoting] (default task-5) Running callback org.jboss.ejb.protocol.remote.RemoteEJBService$1$1$$Lambda$876/915175573@68823b7b(org.jboss.ejb.protocol.remote.EJBServerChannel@707ad04e, org.jboss.as.ejb3.remote.AssociationImpl@3eb54e9a)
      04:04:24,919 INFO  [org.wildfly.naming] (default task-7) WildFly Naming version 1.0.7.Final-redhat-1
      04:04:24,930 INFO  [org.jboss.ejb.client] (default task-7) JBoss EJB Client version 4.0.9.Final-redhat-1
      04:04:24,941 DEBUG [org.jboss.ejb.client.invocation] (default task-7) Calling invoke(module = /server-side/WhoAmIBean, strong affinity = None, weak affinity = None): 
      04:04:24,948 TRACE [org.jboss.ejb.client.invocation] (default task-7) Calling executeDiscovery(locator = StatelessEJBLocator for "/server-side/WhoAmIBean", view is interface example.ejb.WhoAmIBeanRemote, affinity is None, weak affinity = None)
      04:04:24,949 TRACE [org.jboss.ejb.client.invocation] (default task-7) Performing any discovery(locator = StatelessEJBLocator for "/server-side/WhoAmIBean", view is interface example.ejb.WhoAmIBeanRemote, affinity is None, weak affinity = None, filter spec = (ejb-module=server-side))
      04:04:24,952 TRACE [org.jboss.ejb.client.invocation] (default task-7) EJB discovery provider: attempting to connect to configured connection remote+http://10.8.246.90:8080
      04:04:25,317 DEBUG [org.jboss.ejb.client.invocation] (default task-18) Received CLUSTER_TOPOLOGY(15) message, registering cluster ejb to node localhost
      04:04:25,319 DEBUG [org.jboss.ejb.client.invocation] (default task-18) Received CLUSTER_TOPOLOGY(15) message block, registering block ::/0 to address /0.0.0.0:8080
      04:04:25,321 DEBUG [org.jboss.ejb.client.invocation] (default task-19) Received MODULE_AVAILABLE(8) message for module /server-side
      04:04:25,324 TRACE [org.jboss.ejb.client.invocation] (default task-7) Performed first-match discovery(target affinity(node) = localhost, destination = remote+http://10.8.246.90:8080)
      04:04:25,325 TRACE [org.jboss.ejb.client] (default task-7) Transitioning org.jboss.ejb.client.EJBClientInvocationContext@5ffb94cb from SENDING to SENT (org.jboss.ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocationContext.java:450))
      04:04:25,326 TRACE [org.jboss.ejb.client] (default task-7) Transitioning org.jboss.ejb.client.EJBClientInvocationContext@5ffb94cb from SENT to WAITING (org.jboss.ejb.client.EJBClientInvocationContext.sendRequestInitial(EJBClientInvocationContext.java:339))
      04:04:25,345 TRACE [org.jboss.ejb.client] (default task-22) Transitioning org.jboss.ejb.client.EJBClientInvocationContext@5ffb94cb from WAITING to READY (org.jboss.ejb.client.EJBClientInvocationContext.resultReady(EJBClientInvocationContext.java:646))
      04:04:25,345 TRACE [org.jboss.ejb.client] (default task-7) Transitioning org.jboss.ejb.client.EJBClientInvocationContext@5ffb94cb from READY to CONSUMING (org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:546))
      04:04:25,346 TRACE [org.jboss.ejb.client] (default task-7) Transitioning org.jboss.ejb.client.EJBClientInvocationContext@5ffb94cb from CONSUMING to DONE (org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:573))
      

      After the first invocation, the bean proxy on server-1 sets it affinity to a ClusterAffinity, which means that the next invocation's destination is picked based on the cluster topology (which contains only 0.0.0.0). It will most likely fail, and after this, the affinity seems to be reset back to None, therefore we have a loop where always one invocation works correctly and the following one fails.

      The following is the log observed on server-1 when an invocation tries to go to 0.0.0.0 (so it either fails with connection refused, or server-1 tries to invoke itself in case that it's listening on 0.0.0.0 too)

      04:04:26,485 DEBUG [org.jboss.ejb.client.invocation] (default task-24) Calling invoke(module = /server-side/WhoAmIBean, strong affinity = Cluster "ejb", weak affinity = None): 
      04:04:26,485 TRACE [org.jboss.ejb.client.invocation] (default task-24) Calling executeDiscovery(locator = StatelessEJBLocator for "/server-side/WhoAmIBean", view is interface example.ejb.WhoAmIBeanRemote, affinity is Cluster "ejb", weak affinity = None)
      04:04:26,486 TRACE [org.jboss.ejb.client.invocation] (default task-24) Performing cluster discovery(locator = StatelessEJBLocator for "/server-side/WhoAmIBean", view is interface example.ejb.WhoAmIBeanRemote, affinity is Cluster "ejb", weak affinity = None, filter spec = (&(cluster=ejb)))
      04:04:26,486 TRACE [org.jboss.ejb.client.invocation] (default task-24) EJB discovery provider: attempting to connect to configured connection remote+http://10.8.246.90:8080
      04:04:26,488 TRACE [org.jboss.ejb.client.invocation] (default task-24) EJB discovery provider: attempting to connect to cluster ejb connection remote+http://0.0.0.0:8080
      04:04:26,492 TRACE [org.jboss.ejb.client.invocation] (default task-24) Performed cluster discovery (target affinity = Node "localhost", destination = remote+http://0.0.0.0:8080)
      04:04:26,493 TRACE [org.jboss.ejb.client] (default task-24) Transitioning org.jboss.ejb.client.EJBClientInvocationContext@386576b9 from SENDING to SENT (org.jboss.ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocationContext.java:450))
      04:04:26,495 TRACE [org.jboss.ejb.client] (default task-24) Transitioning org.jboss.ejb.client.EJBClientInvocationContext@386576b9 from SENT to WAITING (org.jboss.ejb.client.EJBClientInvocationContext.sendRequestInitial(EJBClientInvocationContext.java:339))
      04:04:26,497 TRACE [org.jboss.ejb.client] (default task-32) Invocation marked failed, state is currently: WAITING
      04:04:26,498 TRACE [org.jboss.ejb.client] (default task-32) Transitioning org.jboss.ejb.client.EJBClientInvocationContext@386576b9 from WAITING to CONSUMING (org.jboss.ejb.client.EJBClientInvocationContext.failed(EJBClientInvocationContext.java:975))
      04:04:26,498 TRACE [org.jboss.ejb.client.invocation] (default task-32) Blacklisting destination (locator = StatelessEJBLocator for "/server-side/WhoAmIBean", view is interface example.ejb.WhoAmIBeanRemote, affinity is Cluster "ejb", weak affinity = None, missing target = remote+http://0.0.0.0:8080)
      04:04:26,499 TRACE [org.jboss.ejb.client] (default task-32) Transitioning org.jboss.ejb.client.EJBClientInvocationContext@386576b9 from CONSUMING to SENDING (org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:600))
      04:04:26,499 TRACE [org.jboss.ejb.client.invocation] (default task-32) Calling executeDiscovery(locator = StatelessEJBLocator for "/server-side/WhoAmIBean", view is interface example.ejb.WhoAmIBeanRemote, affinity is Cluster "ejb", weak affinity = None)
      04:04:26,499 TRACE [org.jboss.ejb.client.invocation] (default task-32) Performing cluster discovery(locator = StatelessEJBLocator for "/server-side/WhoAmIBean", view is interface example.ejb.WhoAmIBeanRemote, affinity is Cluster "ejb", weak affinity = None, filter spec = (&(cluster=ejb)))
      04:04:26,501 TRACE [org.jboss.ejb.client.invocation] (default task-32) Performed cluster discovery, nodes is empty; trying an initial 
      04:04:26,502 TRACE [org.jboss.ejb.client] (default task-32) Transitioning org.jboss.ejb.client.EJBClientInvocationContext@386576b9 from SENDING to SENT (org.jboss.ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocationContext.java:442))
      04:04:26,503 TRACE [org.jboss.ejb.client] (default task-32) Transitioning org.jboss.ejb.client.EJBClientInvocationContext@386576b9 from SENT to READY (org.jboss.ejb.client.EJBClientInvocationContext.sendRequestInitial(EJBClientInvocationContext.java:380))
      04:04:26,503 TRACE [org.jboss.ejb.client] (default task-24) Transitioning org.jboss.ejb.client.EJBClientInvocationContext@386576b9 from READY to CONSUMING (org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:546))
      04:04:26,503 TRACE [org.jboss.ejb.client] (default task-24) Will not retry (requested = false, remaining = 0)
      04:04:26,504 TRACE [org.jboss.ejb.client] (default task-24) Transitioning org.jboss.ejb.client.EJBClientInvocationContext@386576b9 from CONSUMING to DONE (org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:613))
      04:04:26,505 ERROR [org.jboss.as.ejb3.invocation] (default task-24) WFLYEJB0034: EJB Invocation failed on component Intermediate for method public abstract java.lang.String example.ejb.WhoAmIBeanRemote.whoAmI(): javax.ejb.NoSuchEJBException: EJBCLIENT000079: Unable to discover destination for request for EJB StatelessEJBLocator for "/server-side/WhoAmIBean", view is interface example.ejb.WhoAmIBeanRemote, affinity is Cluster "ejb"
      (... rest of the error omitted, but it is a "connection refused")
      

        Gliffy Diagrams

          Attachments

            Issue Links

              Activity

                People

                • Assignee:
                  gaol Lin Gao
                  Reporter:
                  mvinkler Michal Vinkler
                • Votes:
                  0 Vote for this issue
                  Watchers:
                  11 Start watching this issue

                  Dates

                  • Created:
                    Updated:
                    Resolved:

                    Time Tracking

                    Estimated:
                    Original Estimate - 4 days
                    4d
                    Remaining:
                    Remaining Estimate - 2 days
                    2d
                    Logged:
                    Time Spent - Not Specified Time Not Required
                    Not Specified