50:50 split algorithm now works in following way:
- On client configuration change, membership change or disconnect wait
till membership is stable (= all client configuration node list are
equal, and all partitions has equal information).
- Choose best partition >= 50%
- If no such partition exists, send NACK to all clients
- Send NACK to all clients who should receive NACK
- After all clients who should receive NACK confirm vote reception, send
ACK to all clients who should get ACK
This ensures that there are never two partitions with ACK and it has
much better behavior than previous version, because if tie-breaker
partition is not connected, other partition gets ACK.
Signed-off-by: Jan Friesse <jfriesse@redhat.com>
To prevent receiving vote from old membership ring id is sent to server
during init and replied back to client in every node list,
ask for vote reply and vote info messages.
Signed-off-by: Jan Friesse <jfriesse@redhat.com>
- Add support for cmap node list configuration change
- Add client side algorithms
- Check if currently received ring id in membership message
equals to last sent ring id
- Send config node list only if config node list really changes and not
after every reload
- Add tlv_ring_id_eq (replacing qnetd_algo_rings_eq) so it's usable in
client
- Move debug logs from algo-test into qnetd-log-debug.c and call them in
proper places (= logs are now algorithm independent)
- Fix memory leak in msg
Signed-off-by: Jan Friesse <jfriesse@redhat.com>
- Move adding client to cluster to init phase instead of preinit
- Implement missing ask for vote and vote info messages
- Fix cluster name memory leak
- Refactor unexpected message handler to one generic function
- Move qnetd_client_send_err to new file
- Add qnetd_client_send_vote_info
Signed-off-by: Jan Friesse <jfriesse@redhat.com>