Uploaded image for project: 'JGroups'
  1. JGroups
  2. JGRP-418

MuxChannel.getState() always returns false with StreamingStateTransfer protocol

    XMLWordPrintable

Details

    • Bug
    • Resolution: Cannot Reproduce
    • Major
    • None
    • 2.4.1
    • None

    Description

      When I execute DRMTestCase.testIsMasterReplica() in JBossAS 5.0 using the StreamingStateTransfer protocol, MuxChannel.getState() always returns false. This method is invoked from ClusterPartition.fetchState(); it returns false even though debugging the other node in a two node cluster shows that the state has been retrieved. If I use the StateTransfer protocol instead, the transfer is successful.

      I started debugging this issue and determined that ClusterPartition never successfully retrieves state from the multiplexer channel when using StreamingStateTransfer. It's possible that the problem lies in ClusterPartition but this can't be determined until it's understood why getState() is returning false.

      This problem can be replicated as follows.

      1) Ensure that you're using the latest JBossAS 5.0.0 HEAD cluster and testsuite\cluster code as I made recent changes in this area.

      2) Modify ..\cluster\output\resources\jgroups-multiplexer.sar\META-INF\multiplexer-stacks.xml. Change the "tunnel" stack to use StreamingStateTransfer instead of StateTransfer. This is the stack used by the test in DRMTestCase.testIsMasterReplica().

      3) Running the test should show the following result.
      <error message="Initial serviceState transfer failed: Channel.getState() returned false" type="java.lang.IllegalStateException">java.lang.IllegalStateException: Initial serviceState transfer failed: Channel.getState() returned false
      at org.jboss.ha.framework.server.ClusterPartition.fetchState(ClusterPartition.java:511)
      at org.jboss.ha.framework.server.ClusterPartition.startService(ClusterPartition.java:335)
      at org.jboss.system.ServiceMBeanSupport.jbossInternalStart(ServiceMBeanSupport.java:289)
      at org.jboss.system.ServiceMBeanSupport.start(ServiceMBeanSupport.java:196)
      at org.jboss.test.cluster.test.DRMTestCase.testIsMasterReplica(DRMTestCase.java:686)
      at junit.extensions.TestDecorator.basicRun(TestDecorator.java:22)
      at junit.extensions.TestSetup$1.protect(TestSetup.java:19)
      at junit.extensions.TestSetup.run(TestSetup.java:23)
      </error>

      4) Note: DRMTestCase.testIsMasterReplica() won't execute successfully with the StateTransfer protocol until JGRP-416 is resolved. This issue causes JGroups to issue UnsupportedOperationException for UnmodifiableVector during the merge process in the test case. I've patched the problem in JGroups locally and confirmed that the test does run successfully for StateTransfer after this issue is resolved. It's not necessary to patch JGRP-416 to investigate MuxChannel.getState() as the state problem occurs before the UnmodifiableVector problem.

      Attachments

        Issue Links

          Activity

            People

              vblagoje Vladimir Blagojevic (Inactive)
              jerrygauth Jerry Gauthier (Inactive)
              Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: