Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP1:Update
pacemaker.3577
bug-981489_pacemaker-lrmd-IPC-operations-shutdo...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File bug-981489_pacemaker-lrmd-IPC-operations-shutdown.patch of Package pacemaker.3577
commit 29cc1018cb98b1ff864f2aed090cb6b591963275 Author: Ken Gaillot <kgaillot@redhat.com> Date: Wed Dec 23 15:01:48 2015 -0600 Feature: lrmd,liblrmd: add lrmd IPC operations for requesting and acknowledging shutdown This adds two new lrmd IPC operations, LRMD_IPC_OP_SHUTDOWN_REQ and LRMD_IPC_OP_SHUTDOWN_ACK, along with functions to send them. This will support the ability to stop pacemaker_remote gracefully. At this point, no code uses these new operations. diff --git a/include/crm/lrmd.h b/include/crm/lrmd.h index 5c74798..6660fb9 100644 --- a/include/crm/lrmd.h +++ b/include/crm/lrmd.h @@ -95,6 +95,8 @@ typedef struct lrmd_key_value_s { #define LRMD_IPC_OP_EVENT "event" #define LRMD_IPC_OP_REQUEST "request" #define LRMD_IPC_OP_RESPONSE "response" +#define LRMD_IPC_OP_SHUTDOWN_REQ "shutdown_req" +#define LRMD_IPC_OP_SHUTDOWN_ACK "shutdown_ack" #define F_LRMD_IPC_OP "lrmd_ipc_op" #define F_LRMD_IPC_IPC_SERVER "lrmd_ipc_server" diff --git a/include/crm_internal.h b/include/crm_internal.h index e0bbb06..c5fbcb7 100644 --- a/include/crm_internal.h +++ b/include/crm_internal.h @@ -380,6 +380,7 @@ typedef struct remote_proxy_s { } remote_proxy_t; void remote_proxy_notify_destroy(lrmd_t *lrmd, const char *session_id); +void remote_proxy_ack_shutdown(lrmd_t *lrmd); void remote_proxy_relay_event(lrmd_t *lrmd, const char *session_id, xmlNode *msg); void remote_proxy_relay_response(lrmd_t *lrmd, const char *session_id, xmlNode *msg, int msg_id); void remote_proxy_end_session(const char *session); diff --git a/lib/lrmd/proxy_common.c b/lib/lrmd/proxy_common.c index a0f5e62..eb17e4e 100644 --- a/lib/lrmd/proxy_common.c +++ b/lib/lrmd/proxy_common.c @@ -45,6 +45,20 @@ remote_proxy_notify_destroy(lrmd_t *lrmd, const char *session_id) free_xml(msg); } +/*! + * \brief Send an acknowledgment of a remote proxy shutdown request. + * + * \param[in] lrmd Connection to proxy + */ +void +remote_proxy_ack_shutdown(lrmd_t *lrmd) +{ + xmlNode *msg = create_xml_node(NULL, T_LRMD_IPC_PROXY); + crm_xml_add(msg, F_LRMD_IPC_OP, LRMD_IPC_OP_SHUTDOWN_ACK); + lrmd_internal_proxy_send(lrmd, msg); + free_xml(msg); +} + void remote_proxy_relay_event(lrmd_t *lrmd, const char *session_id, xmlNode *msg) { diff --git a/lrmd/ipc_proxy.c b/lrmd/ipc_proxy.c index 164a9ff..9633a67 100644 --- a/lrmd/ipc_proxy.c +++ b/lrmd/ipc_proxy.c @@ -259,6 +259,30 @@ ipc_proxy_dispatch(qb_ipcs_connection_t * c, void *data, size_t size) return 0; } +/*! + * \internal + * \brief Notify a proxy provider that we wish to shut down + * + * \return 0 on success, -1 on error + */ +int +ipc_proxy_shutdown_req(crm_client_t *ipc_proxy) +{ + xmlNode *msg = create_xml_node(NULL, T_LRMD_IPC_PROXY); + int rc; + + crm_xml_add(msg, F_LRMD_IPC_OP, LRMD_IPC_OP_SHUTDOWN_REQ); + + /* We don't really have a session, but crmd needs this attribute + * to recognize this as proxy communication. + */ + crm_xml_add(msg, F_LRMD_IPC_SESSION, "0"); + + rc = (lrmd_server_send_notify(ipc_proxy, msg) < 0)? -1 : 0; + free_xml(msg); + return rc; +} + static int32_t ipc_proxy_closed(qb_ipcs_connection_t * c) { diff --git a/lrmd/lrmd_private.h b/lrmd/lrmd_private.h index 52f79b8..78f14c9 100644 --- a/lrmd/lrmd_private.h +++ b/lrmd/lrmd_private.h @@ -104,6 +104,7 @@ void ipc_proxy_add_provider(crm_client_t *client); void ipc_proxy_remove_provider(crm_client_t *client); void ipc_proxy_forward_client(crm_client_t *client, xmlNode *xml); crm_client_t *ipc_proxy_get_provider(void); +int ipc_proxy_shutdown_req(crm_client_t *ipc_proxy); #endif #endif
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor