pacemaker  2.1.7-0f7f88312f
Scalable High-Availability cluster resource manager
internal.h
Go to the documentation of this file.
1 /*
2  * Copyright 2004-2023 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 CIB_INTERNAL__H
11 # define CIB_INTERNAL__H
12 # include <crm/cib.h>
13 # include <crm/common/ipc_internal.h>
15 
16 // Request types for CIB manager IPC/CPG
17 #define PCMK__CIB_REQUEST_SECONDARY "cib_slave"
18 #define PCMK__CIB_REQUEST_PRIMARY "cib_master"
19 #define PCMK__CIB_REQUEST_SYNC_TO_ALL "cib_sync"
20 #define PCMK__CIB_REQUEST_SYNC_TO_ONE "cib_sync_one"
21 #define PCMK__CIB_REQUEST_IS_PRIMARY "cib_ismaster"
22 #define PCMK__CIB_REQUEST_BUMP "cib_bump"
23 #define PCMK__CIB_REQUEST_QUERY "cib_query"
24 #define PCMK__CIB_REQUEST_CREATE "cib_create"
25 #define PCMK__CIB_REQUEST_MODIFY "cib_modify"
26 #define PCMK__CIB_REQUEST_DELETE "cib_delete"
27 #define PCMK__CIB_REQUEST_ERASE "cib_erase"
28 #define PCMK__CIB_REQUEST_REPLACE "cib_replace"
29 #define PCMK__CIB_REQUEST_APPLY_PATCH "cib_apply_diff"
30 #define PCMK__CIB_REQUEST_UPGRADE "cib_upgrade"
31 #define PCMK__CIB_REQUEST_ABS_DELETE "cib_delete_alt"
32 #define PCMK__CIB_REQUEST_NOOP "noop"
33 #define PCMK__CIB_REQUEST_SHUTDOWN "cib_shutdown_req"
34 #define PCMK__CIB_REQUEST_COMMIT_TRANSACT "cib_commit_transact"
35 
36 # define F_CIB_CLIENTID "cib_clientid"
37 # define F_CIB_CALLOPTS "cib_callopt"
38 # define F_CIB_CALLID "cib_callid"
39 # define F_CIB_CALLDATA "cib_calldata"
40 # define F_CIB_OPERATION "cib_op"
41 # define F_CIB_ISREPLY "cib_isreplyto"
42 # define F_CIB_SECTION "cib_section"
43 # define F_CIB_HOST "cib_host"
44 # define F_CIB_RC "cib_rc"
45 # define F_CIB_UPGRADE_RC "cib_upgrade_rc"
46 # define F_CIB_DELEGATED "cib_delegated_from"
47 # define F_CIB_OBJID "cib_object"
48 # define F_CIB_OBJTYPE "cib_object_type"
49 # define F_CIB_EXISTING "cib_existing_object"
50 # define F_CIB_SEENCOUNT "cib_seen"
51 # define F_CIB_TIMEOUT "cib_timeout"
52 # define F_CIB_UPDATE "cib_update"
53 # define F_CIB_GLOBAL_UPDATE "cib_update"
54 # define F_CIB_UPDATE_RESULT "cib_update_result"
55 # define F_CIB_CLIENTNAME "cib_clientname"
56 # define F_CIB_NOTIFY_TYPE "cib_notify_type"
57 # define F_CIB_NOTIFY_ACTIVATE "cib_notify_activate"
58 # define F_CIB_UPDATE_DIFF "cib_update_diff"
59 # define F_CIB_USER "cib_user"
60 # define F_CIB_LOCAL_NOTIFY_ID "cib_local_notify_id"
61 # define F_CIB_PING_ID "cib_ping_id"
62 # define F_CIB_SCHEMA_MAX "cib_schema_max"
63 
64 # define T_CIB "cib"
65 # define T_CIB_COMMAND "cib_command"
66 # define T_CIB_NOTIFY "cib_notify"
67 /* notify sub-types */
68 # define T_CIB_PRE_NOTIFY "cib_pre_notify"
69 # define T_CIB_POST_NOTIFY "cib_post_notify"
70 # define T_CIB_TRANSACTION "cib_transaction"
71 # define T_CIB_UPDATE_CONFIRM "cib_update_confirmation"
72 
80  cib__op_attr_modifies = (1 << 1),
82  cib__op_attr_local = (1 << 3),
83  cib__op_attr_replaces = (1 << 4),
86 };
87 
113 };
114 
115 gboolean cib_diff_version_details(xmlNode * diff, int *admin_epoch, int *epoch, int *updates,
116  int *_admin_epoch, int *_epoch, int *_updates);
117 
118 gboolean cib_read_config(GHashTable * options, xmlNode * current_cib);
119 
120 typedef int (*cib__op_fn_t)(const char *, int, const char *, xmlNode *,
121  xmlNode *, xmlNode *, xmlNode **, xmlNode **);
122 
123 typedef struct cib__operation_s {
124  const char *name;
126  uint32_t flags;
128 
129 typedef struct cib_notify_client_s {
130  const char *event;
131  const char *obj_id; /* implement one day */
132  const char *obj_type; /* implement one day */
133  void (*callback) (const char *event, xmlNode * msg);
134 
136 
137 typedef struct cib_callback_client_s {
138  void (*callback) (xmlNode *, int, int, xmlNode *, void *);
139  const char *id;
140  void *user_data;
141  gboolean only_success;
143  void (*free_func)(void *);
145 
146 struct timer_rec_s {
147  int call_id;
148  int timeout;
149  guint ref;
151 };
152 
153 #define cib__set_call_options(cib_call_opts, call_for, flags_to_set) do { \
154  cib_call_opts = pcmk__set_flags_as(__func__, __LINE__, \
155  LOG_TRACE, "CIB call", (call_for), (cib_call_opts), \
156  (flags_to_set), #flags_to_set); \
157  } while (0)
158 
159 #define cib__clear_call_options(cib_call_opts, call_for, flags_to_clear) do { \
160  cib_call_opts = pcmk__clear_flags_as(__func__, __LINE__, \
161  LOG_TRACE, "CIB call", (call_for), (cib_call_opts), \
162  (flags_to_clear), #flags_to_clear); \
163  } while (0)
164 
165 cib_t *cib_new_variant(void);
166 
190 static inline bool
191 cib__client_triggers_refresh(const char *name)
192 {
193  return !crm_is_daemon_name(name)
195  "attrd_updater",
196  "crm_attribute",
197  "crm_node",
198  "crm_resource",
199  "crm_ticket",
200  NULL);
201 }
202 
203 int cib__get_notify_patchset(const xmlNode *msg, const xmlNode **patchset);
204 
205 bool cib__element_in_patchset(const xmlNode *patchset, const char *element);
206 
207 int cib_perform_op(const char *op, int call_options, cib__op_fn_t fn,
208  bool is_query, const char *section, xmlNode *req,
209  xmlNode *input, bool manage_counters, bool *config_changed,
210  xmlNode **current_cib, xmlNode **result_cib, xmlNode **diff,
211  xmlNode **output);
212 
213 int cib__create_op(cib_t *cib, const char *op, const char *host,
214  const char *section, xmlNode *data, int call_options,
215  const char *user_name, const char *client_name,
216  xmlNode **op_msg);
217 
218 int cib__extend_transaction(cib_t *cib, xmlNode *request);
219 
220 void cib_native_callback(cib_t * cib, xmlNode * msg, int call_id, int rc);
221 void cib_native_notify(gpointer data, gpointer user_data);
222 
223 int cib__get_operation(const char *op, const cib__operation_t **operation);
224 
225 int cib_process_query(const char *op, int options, const char *section, xmlNode * req,
226  xmlNode * input, xmlNode * existing_cib, xmlNode ** result_cib,
227  xmlNode ** answer);
228 
229 int cib_process_erase(const char *op, int options, const char *section, xmlNode * req,
230  xmlNode * input, xmlNode * existing_cib, xmlNode ** result_cib,
231  xmlNode ** answer);
232 
233 int cib_process_bump(const char *op, int options, const char *section, xmlNode * req,
234  xmlNode * input, xmlNode * existing_cib, xmlNode ** result_cib,
235  xmlNode ** answer);
236 
237 int cib_process_replace(const char *op, int options, const char *section, xmlNode * req,
238  xmlNode * input, xmlNode * existing_cib, xmlNode ** result_cib,
239  xmlNode ** answer);
240 
241 int cib_process_create(const char *op, int options, const char *section, xmlNode * req,
242  xmlNode * input, xmlNode * existing_cib, xmlNode ** result_cib,
243  xmlNode ** answer);
244 
245 int cib_process_modify(const char *op, int options, const char *section, xmlNode * req,
246  xmlNode * input, xmlNode * existing_cib, xmlNode ** result_cib,
247  xmlNode ** answer);
248 
249 int cib_process_delete(const char *op, int options, const char *section, xmlNode * req,
250  xmlNode * input, xmlNode * existing_cib, xmlNode ** result_cib,
251  xmlNode ** answer);
252 
253 int cib_process_diff(const char *op, int options, const char *section, xmlNode * req,
254  xmlNode * input, xmlNode * existing_cib, xmlNode ** result_cib,
255  xmlNode ** answer);
256 
257 int cib_process_upgrade(const char *op, int options, const char *section, xmlNode * req,
258  xmlNode * input, xmlNode * existing_cib, xmlNode ** result_cib,
259  xmlNode ** answer);
260 
283 int cib_process_xpath(const char *op, int options, const char *section,
284  const xmlNode *req, xmlNode *input, xmlNode *existing_cib,
285  xmlNode **result_cib, xmlNode ** answer);
286 
287 bool cib__config_changed_v1(xmlNode *last, xmlNode *next, xmlNode **diff);
288 
289 int cib_internal_op(cib_t * cib, const char *op, const char *host,
290  const char *section, xmlNode * data,
291  xmlNode ** output_data, int call_options, const char *user_name);
292 
293 
294 int cib_file_read_and_verify(const char *filename, const char *sigfile,
295  xmlNode **root);
296 int cib_file_write_with_digest(xmlNode *cib_root, const char *cib_dirname,
297  const char *cib_filename);
298 
299 void cib__set_output(cib_t *cib, pcmk__output_t *out);
300 
302 
324 int cib__signon_query(pcmk__output_t *out, cib_t **cib, xmlNode **cib_object);
325 
327 
328 int cib__update_node_attr(pcmk__output_t *out, cib_t *cib, int call_options,
329  const char *section, const char *node_uuid, const char *set_type,
330  const char *set_name, const char *attr_id, const char *attr_name,
331  const char *attr_value, const char *user_name,
332  const char *node_type);
333 
334 int cib__get_node_attrs(pcmk__output_t *out, cib_t *cib, const char *section,
335  const char *node_uuid, const char *set_type, const char *set_name,
336  const char *attr_id, const char *attr_name, const char *user_name,
337  xmlNode **result);
338 
339 int cib__delete_node_attr(pcmk__output_t *out, cib_t *cib, int options,
340  const char *section, const char *node_uuid, const char *set_type,
341  const char *set_name, const char *attr_id, const char *attr_name,
342  const char *attr_value, const char *user_name);
343 
344 #endif
enum cib__op_type type
Definition: internal.h:125
pcmk__cpg_host_t host
Definition: cpg.c:49
node_type
Possible node types.
Definition: nodes.h:33
bool crm_is_daemon_name(const char *name)
Check whether string represents a client name used by cluster daemons.
Definition: ipc_server.c:999
char data[0]
Definition: cpg.c:55
int cib__signon_query(pcmk__output_t *out, cib_t **cib, xmlNode **cib_object)
Definition: cib_utils.c:1022
const char * name
Definition: cib.c:26
int cib_process_delete(const char *op, int options, const char *section, xmlNode *req, xmlNode *input, xmlNode *existing_cib, xmlNode **result_cib, xmlNode **answer)
Definition: cib_ops.c:421
int cib_process_replace(const char *op, int options, const char *section, xmlNode *req, xmlNode *input, xmlNode *existing_cib, xmlNode **result_cib, xmlNode **answer)
Definition: cib_ops.c:309
void(* callback)(const char *event, xmlNode *msg)
Definition: internal.h:133
int cib_process_erase(const char *op, int options, const char *section, xmlNode *req, xmlNode *input, xmlNode *existing_cib, xmlNode **result_cib, xmlNode **answer)
Definition: cib_ops.c:240
int cib_process_bump(const char *op, int options, const char *section, xmlNode *req, xmlNode *input, xmlNode *existing_cib, xmlNode **result_cib, xmlNode **answer)
Definition: cib_ops.c:294
struct cib_notify_client_s cib_notify_client_t
int cib__delete_node_attr(pcmk__output_t *out, cib_t *cib, int options, const char *section, const char *node_uuid, const char *set_type, const char *set_name, const char *attr_id, const char *attr_name, const char *attr_value, const char *user_name)
Definition: cib_attrs.c:369
Supported in a transaction.
Definition: internal.h:85
int call_id
Definition: internal.h:147
gboolean only_success
Definition: internal.h:141
cib_callback_client_t * cib__lookup_id(int call_id)
Definition: cib_client.c:825
struct cib__operation_s cib__operation_t
void cib_native_notify(gpointer data, gpointer user_data)
Definition: cib_utils.c:835
int cib__get_node_attrs(pcmk__output_t *out, cib_t *cib, const char *section, const char *node_uuid, const char *set_type, const char *set_name, const char *attr_id, const char *attr_name, const char *user_name, xmlNode **result)
Definition: cib_attrs.c:343
const char * obj_id
Definition: internal.h:131
cib_t * cib_new_variant(void)
Definition: cib_client.c:665
int timeout
Definition: internal.h:148
cib__op_type
Definition: internal.h:93
struct timer_rec_s * timer
Definition: internal.h:142
Formatted output for pacemaker tools.
Writes to disk on success.
Definition: internal.h:84
Modifies CIB.
Definition: internal.h:80
int cib_process_diff(const char *op, int options, const char *section, xmlNode *req, xmlNode *input, xmlNode *existing_cib, xmlNode **result_cib, xmlNode **answer)
Definition: cib_ops.c:767
void(* callback)(xmlNode *, int, int, xmlNode *, void *)
Definition: internal.h:138
guint ref
Definition: internal.h:149
int cib_perform_op(const char *op, int call_options, cib__op_fn_t fn, bool is_query, const char *section, xmlNode *req, xmlNode *input, bool manage_counters, bool *config_changed, xmlNode **current_cib, xmlNode **result_cib, xmlNode **diff, xmlNode **output)
Definition: cib_utils.c:342
const char * event
Definition: internal.h:130
void cib__set_output(cib_t *cib, pcmk__output_t *out)
Definition: cib_remote.c:636
Must only be processed locally.
Definition: internal.h:82
int cib__create_op(cib_t *cib, const char *op, const char *host, const char *section, xmlNode *data, int call_options, const char *user_name, const char *client_name, xmlNode **op_msg)
Definition: cib_utils.c:673
bool pcmk__str_any_of(const char *s,...) G_GNUC_NULL_TERMINATED
Definition: strings.c:957
int cib__clean_up_connection(cib_t **cib)
Definition: cib_utils.c:1076
int(* cib__op_fn_t)(const char *, int, const char *, xmlNode *, xmlNode *, xmlNode *, xmlNode **, xmlNode **)
Definition: internal.h:120
Replaces CIB.
Definition: internal.h:83
int cib_process_query(const char *op, int options, const char *section, xmlNode *req, xmlNode *input, xmlNode *existing_cib, xmlNode **result_cib, xmlNode **answer)
Definition: cib_ops.c:166
int cib_file_write_with_digest(xmlNode *cib_root, const char *cib_dirname, const char *cib_filename)
Definition: cib_file.c:918
Requires privileges.
Definition: internal.h:81
int cib__get_notify_patchset(const xmlNode *msg, const xmlNode **patchset)
Definition: cib_utils.c:91
gboolean cib_read_config(GHashTable *options, xmlNode *current_cib)
Definition: cib_utils.c:916
int cib_file_read_and_verify(const char *filename, const char *sigfile, xmlNode **root)
Definition: cib_file.c:744
pcmk__action_result_t result
Definition: pcmk_fence.c:35
const char * obj_type
Definition: internal.h:132
gboolean cib_diff_version_details(xmlNode *diff, int *admin_epoch, int *epoch, int *updates, int *_admin_epoch, int *_epoch, int *_updates)
Definition: cib_utils.c:62
Cluster Configuration.
xmlNode * input
const char * id
Definition: internal.h:139
int cib__extend_transaction(cib_t *cib, xmlNode *request)
Definition: cib_utils.c:758
cib_t * cib
Definition: internal.h:150
This structure contains everything that makes up a single output formatter.
int cib__update_node_attr(pcmk__output_t *out, cib_t *cib, int call_options, const char *section, const char *node_uuid, const char *set_type, const char *set_name, const char *attr_id, const char *attr_name, const char *attr_value, const char *user_name, const char *node_type)
Definition: cib_attrs.c:172
uint32_t flags
Group of enum cib__op_attr flags.
Definition: internal.h:126
const char * name
Definition: internal.h:124
bool cib__config_changed_v1(xmlNode *last, xmlNode *next, xmlNode **diff)
Definition: cib_ops.c:790
int cib_process_xpath(const char *op, int options, const char *section, const xmlNode *req, xmlNode *input, xmlNode *existing_cib, xmlNode **result_cib, xmlNode **answer)
Definition: cib_ops.c:861
void cib_native_callback(cib_t *cib, xmlNode *msg, int call_id, int rc)
Definition: cib_utils.c:786
bool cib__element_in_patchset(const xmlNode *patchset, const char *element)
Definition: cib_utils.c:209
int cib__get_operation(const char *op, const cib__operation_t **operation)
Definition: cib_ops.c:142
int cib_internal_op(cib_t *cib, const char *op, const char *host, const char *section, xmlNode *data, xmlNode **output_data, int call_options, const char *user_name)
Definition: cib_utils.c:943
cib__op_attr
Definition: internal.h:78
No special attributes.
Definition: internal.h:79
void(* free_func)(void *)
Definition: internal.h:143
int cib_process_upgrade(const char *op, int options, const char *section, xmlNode *req, xmlNode *input, xmlNode *existing_cib, xmlNode **result_cib, xmlNode **answer)
Definition: cib_ops.c:259
int cib_process_modify(const char *op, int options, const char *section, xmlNode *req, xmlNode *input, xmlNode *existing_cib, xmlNode **result_cib, xmlNode **answer)
Definition: cib_ops.c:456
struct cib_callback_client_s cib_callback_client_t
int cib_process_create(const char *op, int options, const char *section, xmlNode *req, xmlNode *input, xmlNode *existing_cib, xmlNode **result_cib, xmlNode **answer)
Definition: cib_ops.c:701