Skip to content

Commit f9ca5d9

Browse files
committed
Fix: sbd-integration: sync pacemakerd with sbd
Add new api as not to make the xml-structure an external interface.
1 parent 02de657 commit f9ca5d9

File tree

6 files changed

+469
-69
lines changed

6 files changed

+469
-69
lines changed

daemons/pacemakerd/pacemakerd.c

Lines changed: 37 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -566,45 +566,45 @@ pcmk_ipc_created(qb_ipcs_connection_t * c)
566566
static void
567567
pcmk_handle_ping_request( crm_client_t *c, xmlNode *msg, uint32_t id)
568568
{
569-
const char *value = NULL;
570-
xmlNode *ping = NULL;
571-
xmlNode *reply = NULL;
572-
time_t pinged = time(NULL);
573-
const char *from = crm_element_value(msg, F_CRM_SYS_FROM);
574-
575-
/* Pinged for status */
576-
crm_trace("Pinged from %s.%s",
577-
crm_element_value(msg, F_CRM_ORIGIN),
578-
from?from:"unknown");
579-
ping = create_xml_node(NULL, XML_CRM_TAG_PING);
580-
value = crm_element_value(msg, F_CRM_SYS_TO);
581-
crm_xml_add(ping, XML_PING_ATTR_SYSFROM, value);
582-
crm_xml_add(ping, XML_PING_ATTR_PACEMAKERDSTATE, pacemakerd_state);
583-
crm_xml_add_ll(ping, XML_ATTR_TSTAMP, (long long) pinged);
584-
crm_xml_add(ping, XML_PING_ATTR_STATUS, "ok");
585-
reply = create_reply(msg, ping);
586-
free_xml(ping);
587-
if (reply) {
588-
if (crm_ipcs_send(c, id, reply, crm_ipc_server_event) <= 0) {
589-
crm_err("Failed sending ping-reply");
590-
}
591-
free_xml(reply);
592-
} else {
593-
crm_err("Failed building ping-reply");
569+
const char *value = NULL;
570+
xmlNode *ping = NULL;
571+
xmlNode *reply = NULL;
572+
time_t pinged = time(NULL);
573+
const char *from = crm_element_value(msg, F_CRM_SYS_FROM);
574+
575+
/* Pinged for status */
576+
crm_trace("Pinged from %s.%s",
577+
crm_element_value(msg, F_CRM_ORIGIN),
578+
from?from:"unknown");
579+
ping = create_xml_node(NULL, XML_CRM_TAG_PING);
580+
value = crm_element_value(msg, F_CRM_SYS_TO);
581+
crm_xml_add(ping, XML_PING_ATTR_SYSFROM, value);
582+
crm_xml_add(ping, XML_PING_ATTR_PACEMAKERDSTATE, pacemakerd_state);
583+
crm_xml_add_ll(ping, XML_ATTR_TSTAMP, (long long) pinged);
584+
crm_xml_add(ping, XML_PING_ATTR_STATUS, "ok");
585+
reply = create_reply(msg, ping);
586+
free_xml(ping);
587+
if (reply) {
588+
if (crm_ipcs_send(c, id, reply, crm_ipc_server_event) <= 0) {
589+
crm_err("Failed sending ping-reply");
594590
}
595-
/* just proceed state on sbd pinging us */
596-
if (from && strstr(from, "sbd")) {
597-
if (crm_str_eq(pacemakerd_state,
598-
XML_PING_ATTR_PACEMAKERDSTATE_SHUTDOWNCOMPLETE,
599-
TRUE)) {
600-
shutdown_complete_state_reported_to = c->pid;
601-
} else if (crm_str_eq(pacemakerd_state,
602-
XML_PING_ATTR_PACEMAKERDSTATE_WAITPING,
603-
TRUE)) {
604-
pacemakerd_state = XML_PING_ATTR_PACEMAKERDSTATE_STARTINGDAEMONS;
605-
mainloop_set_trigger(startup_trigger);
606-
}
591+
free_xml(reply);
592+
} else {
593+
crm_err("Failed building ping-reply");
594+
}
595+
/* just proceed state on sbd pinging us */
596+
if (from && strstr(from, "sbd")) {
597+
if (crm_str_eq(pacemakerd_state,
598+
XML_PING_ATTR_PACEMAKERDSTATE_SHUTDOWNCOMPLETE,
599+
TRUE)) {
600+
shutdown_complete_state_reported_to = c->pid;
601+
} else if (crm_str_eq(pacemakerd_state,
602+
XML_PING_ATTR_PACEMAKERDSTATE_WAITPING,
603+
TRUE)) {
604+
pacemakerd_state = XML_PING_ATTR_PACEMAKERDSTATE_STARTINGDAEMONS;
605+
mainloop_set_trigger(startup_trigger);
607606
}
607+
}
608608
}
609609

610610
/* Exit code means? */

include/crm/common/Makefile.am

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ MAINTAINERCLEANFILES = Makefile.in
1212
headerdir=$(pkgincludedir)/crm/common
1313

1414
header_HEADERS = xml.h ipc.h util.h iso8601.h mainloop.h logging.h results.h \
15-
nvpair.h
15+
nvpair.h pacemakerd_types.h
1616
noinst_HEADERS = cib_secrets.h ipcs.h internal.h alerts_internal.h \
1717
iso8601_internal.h remote_internal.h xml_internal.h \
1818
ipc_internal.h output.h cmdline_internal.h curses_internal.h
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
/*
2+
* Copyright 2004-2019 the Pacemaker project contributors
3+
*
4+
* The version control history for this file may have further details.
5+
*
6+
* This source code is licensed under the GNU Lesser General Public License
7+
* version 2.1 or later (LGPLv2.1+) WITHOUT ANY WARRANTY.
8+
*/
9+
10+
#ifndef PACEMAKERD_TYPES__H
11+
# define PACEMAKERD_TYPES__H
12+
13+
#ifdef __cplusplus
14+
extern "C" {
15+
#endif
16+
17+
#include <time.h>
18+
19+
enum pacemakerd_conn_state {
20+
pacemakerd_conn_connected,
21+
pacemakerd_conn_disconnected
22+
};
23+
24+
enum pacemakerd_state {
25+
pacemakerd_state_invalid = -1,
26+
pacemakerd_state_init = 0,
27+
pacemakerd_state_starting_daemons,
28+
pacemakerd_state_wait_for_ping,
29+
pacemakerd_state_running,
30+
pacemakerd_state_shutting_down,
31+
pacemakerd_state_shutdown_complete,
32+
pacemakerd_state_max = pacemakerd_state_shutdown_complete,
33+
};
34+
35+
typedef struct pacemakerd_s pacemakerd_t;
36+
37+
typedef struct pacemakerd_api_operations_s {
38+
int (*connect) (pacemakerd_t *pacemakerd, const char *name);
39+
int (*disconnect) (pacemakerd_t *pacemakerd);
40+
void (*free) (pacemakerd_t *pacemakerd);
41+
int (*set_ping_callback) (pacemakerd_t *pacemakerd,
42+
void (*callback) (pacemakerd_t *pacemakerd,
43+
time_t last_good,
44+
enum pacemakerd_state state,
45+
int rc, gpointer userdata),
46+
gpointer userdata);
47+
int (*set_disconnect_callback) (pacemakerd_t *pacemakerd,
48+
void (*callback) (gpointer userdata),
49+
gpointer userdata
50+
);
51+
int (*ping) (pacemakerd_t *pacemakerd, const char *name,
52+
const char *admin_uuid, int call_options);
53+
} pacemakerd_api_operations_t;
54+
55+
struct pacemakerd_s {
56+
enum pacemakerd_conn_state conn_state;
57+
void *pacemakerd_private;
58+
pacemakerd_api_operations_t *cmds;
59+
};
60+
61+
pacemakerd_t * pacemakerd_api_new (void);
62+
void pacemakerd_api_delete(pacemakerd_t * pacemakerd);
63+
enum pacemakerd_state pacemakerd_state_text2enum(const char *state);
64+
const char *pacemakerd_state_enum2text(enum pacemakerd_state state);
65+
66+
#ifdef __cplusplus
67+
}
68+
#endif
69+
70+
#endif // PACEMAKERD_TYPES__H

lib/common/Makefile.am

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ libcrmcommon_la_SOURCES += utils.c
6868
libcrmcommon_la_SOURCES += watchdog.c
6969
libcrmcommon_la_SOURCES += xml.c
7070
libcrmcommon_la_SOURCES += xpath.c
71+
libcrmcommon_la_SOURCES += pacemakerd_client.c
7172

7273
# It's possible to build the library adding ../gnu/md5.c directly to SOURCES,
7374
# but distclean chokes on that because it tries to include the source's .Plo

0 commit comments

Comments
 (0)