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)
Tue, Aug 25, 12:58 AM
Unknown Object (File)
Tue, Aug 25, 12:23 AM
Unknown Object (File)
Mon, Aug 24, 8:12 PM
Unknown Object (File)
Sat, Aug 22, 10:03 AM
Unknown Object (File)
Mon, Aug 10, 8:11 PM
Unknown Object (File)
Sat, Aug 8, 4:41 PM
Unknown Object (File)
Fri, Aug 7, 8:23 PM
Unknown Object (File)
Fri, Aug 7, 12:48 AM

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.