See subtasks, plus:
- configure.ac does AC_CHECK_LIB(pe_rules, test_rule, , missing="yes") but test_rule() (and all of libpe_rules) is now deprecated; note that SBD doesn't actually use anything from or link with libpe_rules, so this can just be dropped
- sbd-cluster.c uses the existence of CRM_SCORE_INFINITY to decide when to use the pacemaker-remote binary name; the constant is deprecated in favor of PCMK_SCORE_INFINITY, so test for either
- sbd-inquisitor.c depends on transitive inclusion of limits.h (as does sbd.h), libxml/tree.h, and glib.h via Pacemaker headers; include them explicitly
- sbd-pacemaker.c
- uses the deprecated GListPtr type; use GList * instead
- uses the deprecated XML_TAG_CIB constant; use PCMK_XE_CIB instead when available
- uses the deprecated is_set() macro; use pcmk_is_set() instead when available
- uses the deprecated copy_xml() function; no replacement will be made available, so redefine it per Pacemaker 2.1.7
- From crm/cluster.h (see T788), sbd uses:
- enum cluster_type_e with values pcmk_cluster_unknown and pcmk_cluster_corosync; the enum and values were renamed
- crm_cluster_t, which was renamed pcmk_cluster_t; direct access to the destroy and cpg.cpg_callbacks_t members has been deprecated in favor of new accessor functions
- get_cluster_type(), name_for_cluster_type(), and crm_cluster_connect(), which were renamed
- configure.ac does AC_CHECK_LIB(crmcluster, crm_peer_init, , missing="yes") but doesn't actually use crm_peer_init(), which is deprecated; no name will be present in libcrmcluster in all Pacemaker versions, so check for a new API, and if unavailable, check for an old one (get_cluster_type() would be better since SBD actually uses it)
- SBD uses a lot of deprecated scheduler APIs
- configure.ac checks for enum pe_quorum_policy policy with a value of no_quorum_demote, and the code additionally uses other values; all those values are deprecated in favor of names with a pcmk_ prefix, so check for both old and new names
- The resource struct was refactored (see T790); sbd uses the deprecated resource_t type alias (use pcmk_resource_t instead when available), and directly accesses the id and flags members (use the new accessors instead when available)
- The node structs were refactored (see T789); sbd uses the deprecated node_t type alias (use pcmk_node_t instead when available), and directly accesses multiple members (use the new accessors instead when available)
- The main scheduler struct was refactored (see T791); sbd uses the deprecated pe_working_set_t type alias (use pcmk_scheduler_t instead when available), and directly accesses multiple members (use the new accessors instead when available)
- Replace pe_reset_working_set() with pcmk_reset_scheduler() when available
- Replace pe_new_working_set() with pcmk_new_scheduler() when available
- Replace pe_free_working_set() with pcmk_free_scheduler() when available
Existing SBD versions should continue to build with Pacemaker 3.0.0, but the code should be updated as soon as practical to continue to build with future Pacemaker versions.
Once a released version of sbd has these changes, update the deprecated API comments in the pacemaker code base like // NOTE: sbd (as of at least 1.5.2) uses this to something like // NOTE: sbd before version X.Y.Z uses this. After platforms with the older versions are no longer supported, pacemaker can drop those deprecated APIs.