https://bz.apache.org/bugzilla/show_bug.cgi?id=61448

            Bug ID: 61448
           Summary: Cluster StaticMember (McastService:Required property
                    "tcpListenPort" is missing)
           Product: Tomcat 7
           Version: 7.0.70
          Hardware: All
                OS: All
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Cluster
          Assignee: dev@tomcat.apache.org
          Reporter: carlosp...@gmail.com
  Target Milestone: ---

Hello,

Cluster static members seem to fail since version 7.0.70 (also
reproduced in 8.0.45, and is the same code than tomcat 9):

SEVERE: The required Server component failed to start so Tomcat is
unable to start.
...
Caused by: org.apache.catalina.tribes.ChannelException:
java.lang.IllegalArgumentException: McastService:Required property
"tcpListenPort" is missing.; No faulty members identified.
        at
org.apache.catalina.tribes.group.ChannelCoordinator.internalStart(ChannelCoordinator.java:200)
        at
org.apache.catalina.tribes.group.ChannelCoordinator.start(ChannelCoordinator.java:100)
        at
org.apache.catalina.tribes.group.ChannelInterceptorBase.start(ChannelInterceptorBase.java:162)
        at
org.apache.catalina.tribes.group.interceptors.StaticMembershipInterceptor.start(StaticMembershipInterceptor.java:168)
        at
org.apache.catalina.tribes.group.ChannelInterceptorBase.start(ChannelInterceptorBase.java:162)
        at
org.apache.catalina.tribes.group.GroupChannel.start(GroupChannel.java:431)
        at
org.apache.catalina.ha.tcp.SimpleTcpCluster.startInternal(SimpleTcpCluster.java:689)
        ... 15 more
Caused by: java.lang.IllegalArgumentException: McastService:Required
property "tcpListenPort" is missing.
        at
org.apache.catalina.tribes.membership.McastService.hasProperty(McastService.java:360)
        at
org.apache.catalina.tribes.membership.McastService.start(McastService.java:379)
        at
org.apache.catalina.tribes.group.ChannelCoordinator.internalStart(ChannelCoordinator.java:182)
        ... 21 more

The reason could be here:

$ diff -u
apache-tomcat-7.0.69-src/java/org/apache/catalina/tribes/group/ChannelCoordinator.java
apache-tomcat-7.0.70-src/java/org/apache/catalina/tribes/group/ChannelCoordinator.java.original
---
apache-tomcat-7.0.69-src/java/org/apache/catalina/tribes/group/ChannelCoordinator.java
     2016-04-11 10:02:35.000000000 +0200
+++
apache-tomcat-7.0.70-src/java/org/apache/catalina/tribes/group/ChannelCoordinator.java.original
    2016-06-15 18:45:51.000000000 +0200
@@ -26,6 +26,8 @@
 import org.apache.catalina.tribes.MessageListener;
 import org.apache.catalina.tribes.UniqueId;
 import org.apache.catalina.tribes.membership.McastService;
+import org.apache.catalina.tribes.membership.StaticMember;
+import org.apache.catalina.tribes.transport.ReceiverBase;
 import org.apache.catalina.tribes.transport.ReplicationTransmitter;
 import org.apache.catalina.tribes.transport.SenderState;
 import org.apache.catalina.tribes.transport.nio.NioReceiver;
@@ -141,28 +143,49 @@
             //listens to with the local membership settings
             if ( Channel.SND_RX_SEQ==(svc & Channel.SND_RX_SEQ) ) {
                 clusterReceiver.setMessageListener(this);
+                if (clusterReceiver instanceof ReceiverBase) {
+                    ((ReceiverBase)clusterReceiver).setChannel(getChannel());
+                }
                 clusterReceiver.start();
                 //synchronize, big time FIXME
-               
membershipService.setLocalMemberProperties(getClusterReceiver().getHost(),
-                                                          
getClusterReceiver().getPort(),
-                                                          
getClusterReceiver().getSecurePort(),
-                                                          
getClusterReceiver().getUdpPort());
+                Member localMember = getChannel().getLocalMember(false);
+                if (localMember instanceof StaticMember) {
+                    // static member
+                    StaticMember staticMember = (StaticMember)localMember;
+                    staticMember.setHost(getClusterReceiver().getHost());
+                    staticMember.setPort(getClusterReceiver().getPort());
+                   
staticMember.setSecurePort(getClusterReceiver().getSecurePort());
+                } else {
+                    // multicast member
+                   
membershipService.setLocalMemberProperties(getClusterReceiver().getHost(),
+                            getClusterReceiver().getPort(),
+                            getClusterReceiver().getSecurePort(),
+                            getClusterReceiver().getUdpPort());
+
+                }
                 valid = true;
             }


It seems to me that it's always necessary to initialize
membershipService, maybe something like that (untested):

---
apache-tomcat-7.0.70-src/java/org/apache/catalina/tribes/group/ChannelCoordinator.java.original
    2016-06-15 18:45:51.000000000 +0200
+++
apache-tomcat-7.0.70-src/java/org/apache/catalina/tribes/group/ChannelCoordinator.java
     2017-08-18 13:19:53.342672900 +0200
@@ -148,6 +148,10 @@
                 }
                 clusterReceiver.start();
                 //synchronize, big time FIXME
+
membershipService.setLocalMemberProperties(getClusterReceiver().getHost(),
+
getClusterReceiver().getPort(),
+
getClusterReceiver().getSecurePort(),
+
getClusterReceiver().getUdpPort());
                 Member localMember = getChannel().getLocalMember(false);
                 if (localMember instanceof StaticMember) {
                     // static member
@@ -155,13 +159,6 @@
                     staticMember.setHost(getClusterReceiver().getHost());
                     staticMember.setPort(getClusterReceiver().getPort());

staticMember.setSecurePort(getClusterReceiver().getSecurePort());
-                } else {
-                    // multicast member
-
membershipService.setLocalMemberProperties(getClusterReceiver().getHost(),
-                            getClusterReceiver().getPort(),
-                            getClusterReceiver().getSecurePort(),
-                            getClusterReceiver().getUdpPort());
-
                 }
                 valid = true;
             }

Regards,
Carlos.

-- 
You are receiving this mail because:
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to