Skip to content

New failover implementation#8566

Merged
pbrezina merged 11 commits into
SSSD:failoverfrom
pbrezina:failover
May 28, 2026
Merged

New failover implementation#8566
pbrezina merged 11 commits into
SSSD:failoverfrom
pbrezina:failover

Conversation

@pbrezina

Copy link
Copy Markdown
Member

This pull request is intended to be a start of a "failover" feature branch where other developers will be able to contribute.

The main failover logic works, compiles and can be tested using a "minimal" provider that is included as an example. The purpose of the "minimal" provider is only to test the failover without the need to port full provider code and itwill be removed prior pushing the contents to the master branch. See how to set it up in minimal-provider-notes.txt and see the switch to new failover in commit minimal: switch to new failover for service lookup and user authentication - this is the minimal set of changes to get it working, but the real port should get and will require more refactoring.

The work is still not finished and there is missing functionality. This functionality, however, can be implemented in small areas of code and should not require larger changes or glues in the whole code base, so this is ready for review. Remaining work is tracked at [1]. Feel free to take any of these tickets and open new tickets when you find something missing.

When reviewing, you can start with src/providers/failover/readme.md that provides high level documentation of the code. And of course do not forget the design page [2].

Thanks, Pavel

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request implements a new failover mechanism for SSSD, introducing prioritized server groups, parallelized candidate server discovery, and a transaction-based API for automated retries. It also provides a minimal provider implementation to demonstrate the new architecture. Critical logic bugs were identified in the server group resolution logic, where duplicate detection causes premature loop exit, and in the address change detection function, which currently returns inverted results.

Comment thread src/providers/failover/failover_group.c Outdated
Comment thread src/providers/failover/failover_server_resolve.c Outdated
Comment thread src/providers/failover/failover_group.c Dismissed
Comment thread src/providers/minimal/minimal_id.c Dismissed
Comment thread src/providers/minimal/minimal_ldap_auth.c Dismissed
Comment thread src/providers/minimal/minimal_id.c Dismissed
Comment thread src/providers/minimal/minimal_id.c Dismissed
Comment thread src/providers/minimal/minimal_id_services.c Dismissed
Comment thread src/providers/minimal/minimal_id_services.c Dismissed
Comment thread src/providers/minimal/minimal_id_services.c Dismissed
@alexey-tikhonov alexey-tikhonov self-assigned this Apr 1, 2026
@alexey-tikhonov alexey-tikhonov added Waiting for review no-backport This should go to target branch only. labels Apr 1, 2026
@alexey-tikhonov

Copy link
Copy Markdown
Member

@pbrezina, is it expected CI fails to build?

src/providers/minimal/minimal_id.c:28:10: fatal error: providers/minimal/minimal.h: No such file or directory

@pbrezina
pbrezina force-pushed the failover branch 2 times, most recently from 0570a63 to 2a2c475 Compare April 13, 2026 09:09
@alexey-tikhonov

alexey-tikhonov commented Apr 13, 2026

Copy link
Copy Markdown
Member

@pbrezina,
re: "oidc_child: parameterize entra_idp url" (and other) commits being included in this PR: imo, it's better to rebase base branch (https://github.com/SSSD/sssd/tree/failover) and not current PR in review (https://github.com/pbrezina/sssd/tree/failover)

@alexey-tikhonov

Copy link
Copy Markdown
Member

FreeBSD CI doesn't have required headers installed:


  src/providers/minimal/minimal_ldap_auth.c:32:10: fatal error: 'shadow.h' file not found
     32 | #include <shadow.h>
        |          ^~~~~~~~~~

While 'minimal' isn't going to be merged in main repo branches, this 'fail to build' can hide other issues.

@pbrezina
pbrezina force-pushed the failover branch 6 times, most recently from e75bb95 to f84c987 Compare April 13, 2026 12:04
@pbrezina

Copy link
Copy Markdown
Member Author

Now it is fixed. There were missing headers in noinst_HEADERS and some other problems. I reordered the commits and every commit for testing only is clearly marked to not go to master.

Reviewer needs to pay attention only to the "failover" commit, other commits are just for testing and a demostration.

@alexey-tikhonov

alexey-tikhonov commented Apr 16, 2026

Copy link
Copy Markdown
Member

@pbrezina, would it be difficult to include a 'system' test using "minimal" provider and covering any failover scenario?

If it's difficult then disregard as test would be discarded eventually.

Comment thread src/providers/failover/readme.md Outdated
@alexey-tikhonov

Copy link
Copy Markdown
Member

What is missing at this state:

  • server configuration and discovery
    (failover_server_group/batch/vtable_op)
  • server selection mechanism (sss_failover_vtable_op_server_next)
  • kerberos authentication
  • sharing servers between IPA/AD LDAP and KDC
  • online/offline callbacks (resolve callback should not be needed)

Periodic refreshes are also not yet implemented, right?

Comment thread src/providers/failover/failover_transaction.c
Comment thread src/providers/failover/failover_transaction.c
Comment thread src/providers/failover/failover_server.c
Comment thread src/providers/failover/failover_refresh_candidates.c
Comment thread src/providers/failover/failover_vtable.h
justin-stephenson and others added 9 commits May 27, 2026 14:48
…pec file

Add the sssd-minimal provider package to the spec file following the
same pattern as other providers (ldap, ipa, ad, etc.). This packages
the libsss_minimal.so library that was added in recent commits.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>
And also disable codeql for the minimal provider. The
provider is for testing only, it does not make sense to
fix any issue there.
@pbrezina

Copy link
Copy Markdown
Member Author

I fixed the issues, I will start working on remaining tickets when this is merged.

pbrezina added 2 commits May 27, 2026 15:35
This crafts and implements the new failover interface,
it does not provide complete implementation of the failover
mechanism yet. It brings the code to a state were the public
and private interfaces are stable, working and testable so
the following tasks can be split and work on in parallel.

What is missing at this state:
- server configuration and discovery
  (failover_server_group/batch/vtable_op)
- server selection mechanism (sss_failover_vtable_op_server_next)
- kerberos authentication
- sharing servers between IPA/AD LDAP and KDC
- online/offline callbacks (resolve callback should not be needed)

But especially it is possible to start refactoring SSSD code to start
using the new failover implementation.
@alexey-tikhonov

Copy link
Copy Markdown
Member

Well, I won't pretend I've read all "+8,002" new lines of code in the same fashion I usually do during review...

It's tempting to say "we only merge to feature branch, not risky", but being realistic I'm not sure we will re-review before merging to 'master' :)

Nonetheless, I think it's ok to merge.

@alexey-tikhonov

Copy link
Copy Markdown
Member

@alexey-tikhonov

alexey-tikhonov commented May 28, 2026

Copy link
Copy Markdown
Member

Looks like I'm missing something...
All new failover code is compiled but not used (SSSD_NEW_FAILOVER_OBJ)
Does it mean that test/stub provider (providers/minimal) is based on old failover code and thus failover test with minimal provider also still tests old failover code?

@alexey-tikhonov

Copy link
Copy Markdown
Member

All new failover code is compiled but not used (SSSD_NEW_FAILOVER_OBJ)
Does it mean that test/stub provider (providers/minimal) is based on old failover code and thus failover test with minimal provider also still tests old failover code?

Sorry, I missed

libsss_minimal_la_SOURCES
...
    $(SSSD_NEW_FAILOVER_OBJ) \

@pbrezina

Copy link
Copy Markdown
Member Author

@pbrezina, I've rebased https://github.com/SSSD/sssd/commits/failover/ Could you please rebase your branch?

It is rebased.

@pbrezina
pbrezina merged commit cf84349 into SSSD:failover May 28, 2026
32 of 48 checks passed
@pbrezina

Copy link
Copy Markdown
Member Author

Merged, let's start opening PRs against it. We need to keep rebasing it regurarly.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

no-backport This should go to target branch only. Waiting for review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants