On 6/14/19 3:03 PM, Fabian Grünbichler wrote:
> ISSUE 1
> 
> creating a cluster with
> 
>  pvesh create /cluster/config -clustername thomastest -link0 192.168.21.71 
> -link5 10.0.0.71 
> 
> creates an invalid corosync.conf:
> 
> Jun 14 14:23:50 clustertest71 systemd[1]: Starting Corosync Cluster Engine...
> Jun 14 14:23:50 clustertest71 corosync[2160]:   [MAIN  ] Corosync Cluster 
> Engine 3.0.1-dirty starting up
> Jun 14 14:23:50 clustertest71 corosync[2160]:   [MAIN  ] Corosync built-in 
> features: dbus monitoring watchdog systemd xmlconf snmp pie relro bindnow
> Jun 14 14:23:50 clustertest71 corosync[2160]:   [MAIN  ] parse error in 
> config: Not all nodes have the same number of links
> Jun 14 14:23:50 clustertest71 corosync[2160]:   [MAIN  ] Corosync Cluster 
> Engine exiting with status 8 at main.c:1386.
> Jun 14 14:23:50 clustertest71 systemd[1]: corosync.service: Main process 
> exited, code=exited, status=8/n/a
> Jun 14 14:23:50 clustertest71 systemd[1]: corosync.service: Failed with 
> result 'exit-code'.
> Jun 14 14:23:50 clustertest71 systemd[1]: Failed to start Corosync Cluster 
> Engine.
> 
> $ cat /etc/corosync/corosync.conf
> 
> logging {
>   debug: off
>   to_syslog: yes
> }
> 
> nodelist {
>   node {
>     name: clustertest71
>     nodeid: 1
>     quorum_votes: 1
>     ring0_addr: 192.168.21.71
>     ring5_addr: 10.0.0.71
>   }
> }
> 
> quorum {
>   provider: corosync_votequorum
> }
> 
> totem {
>   cluster_name: thomastest
>   config_version: 1
>   interface {
>     linknumber: 0
>   }
>   interface {
>     linknumber: 5
>   }
>   ip_version: ipv4-6
>   link_mode: passive
>   secauth: on
>   version: 2
> }
> 
> doing the same with link0 and link1 instead of link0 and link5 works.
> subsequently changing corosync.conf to have link0 and linkX with X != 1
> also works, although the reload complains with the same error message
> (cmap and corosync-cfgtool show the updated status just fine).
> restarting corosync fails, again with the status shown above.
> 
> haven't checked yet whether that is an issue on our side or corosync,
> but probably worth an investigation ;)

this is a "bug" of corosync..

the following check in exec/totemconfig fails:

for (i=0; i<num_configured; i++) {
        if (totem_config->interfaces[i].member_count != members) err...
}

here, num_configured is the correct number of configured interfaces
(2), the struct entry member_count is 1 (one node, which seems OK here
too) but members is 0...

members is set a bit above with:
members = totem_config->interfaces[0].member_count;


but totem_config->interfaces gets dynamically allocated with:
totem_config->interfaces = malloc (sizeof (struct totem_interface) * 
INTERFACE_MAX);

So it's not the configured interfaces (0 being the lowest one
configured, 1 the next, ...) but the _actual_ links from 0 to
INTERFACE_MAX - 1 (== 7)

So here it _always_ gets the membercount from link0, if that is
non-existent in the config then it's the default 0...

So either, link0 isn't as optional as you meant/wished or they have
at least one, and probably a few more, bugs where they falsely assume
that interfaces[0] is the first configured not link0...


_______________________________________________
pve-devel mailing list
pve-devel@pve.proxmox.com
https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to