Page MenuHomeFreeBSD

carp: deal with negative net.inet.carp.demotion
ClosedPublic

Authored by kp on Oct 31 2021, 9:24 PM.
Tags
None
Referenced Files
Unknown Object (File)
Sun, Dec 22, 4:37 AM
Unknown Object (File)
Sat, Dec 14, 6:22 AM
Unknown Object (File)
Mon, Dec 9, 3:02 AM
Unknown Object (File)
Fri, Dec 6, 5:42 PM
Unknown Object (File)
Nov 12 2024, 9:10 AM
Unknown Object (File)
Oct 8 2024, 6:34 AM
Unknown Object (File)
Sep 22 2024, 5:17 PM
Unknown Object (File)
Sep 15 2024, 6:03 PM

Details

Summary

Given nodes 1 and 2, where node 1 has an advskew of 0 and node 2 has an
advskew of 100, making them master and backup respectively.

If net.inet.carp.demotion is set to a negative value on node 1, node 2
might become master while node 1 still retains it master status. Wether
or not node 2 becomes master seems to depend on the nodes advskew and
what the demotion sysctl was set to on node 1.

The reason for node 2 becoming master seems to be that the calculated
advskew taking demotion into account is truncated to a single unsigned
byte when copied into the carp header for sending, and node 1 stays
master since it takes uses the whole non-truncated calculated advskew
when deciding wether to stay master.

PR: 259528
Submitted by: marius.halden@modirum.com
MFC after: 3 weeks
Sponsored by: Modirum MDPay

Diff Detail

Repository
rG FreeBSD src repository
Lint
Lint Not Applicable
Unit
Tests Not Applicable

Event Timeline

kp requested review of this revision.Oct 31 2021, 9:24 PM
kp added a child revision: D32760: carp tests: negative demotion.
donner added a subscriber: donner.

Because both types are "int", the calculation does work.
Good catch!

This revision is now accepted and ready to land.Nov 1 2021, 12:46 PM

Good catch!

All bla^W credit to Marius.

This revision was automatically updated to reflect the committed changes.