pacemaker  3.0.0-d8340737c4
Scalable High-Availability cluster resource manager
internal.h
Go to the documentation of this file.
1 /*
2  * Copyright 2004-2024 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 PCMK__CRM_CIB_INTERNAL__H
11 #define PCMK__CRM_CIB_INTERNAL__H
12 
13 #include <crm/cib.h>
18 
19 #ifdef __cplusplus
20 extern "C" {
21 #endif
22 
23 // Request types for CIB manager IPC/CPG
24 #define PCMK__CIB_REQUEST_SECONDARY "cib_slave"
25 #define PCMK__CIB_REQUEST_PRIMARY "cib_master"
26 #define PCMK__CIB_REQUEST_SYNC_TO_ALL "cib_sync"
27 #define PCMK__CIB_REQUEST_SYNC_TO_ONE "cib_sync_one"
28 #define PCMK__CIB_REQUEST_IS_PRIMARY "cib_ismaster"
29 #define PCMK__CIB_REQUEST_BUMP "cib_bump"
30 #define PCMK__CIB_REQUEST_QUERY "cib_query"
31 #define PCMK__CIB_REQUEST_CREATE "cib_create"
32 #define PCMK__CIB_REQUEST_MODIFY "cib_modify"
33 #define PCMK__CIB_REQUEST_DELETE "cib_delete"
34 #define PCMK__CIB_REQUEST_ERASE "cib_erase"
35 #define PCMK__CIB_REQUEST_REPLACE "cib_replace"
36 #define PCMK__CIB_REQUEST_APPLY_PATCH "cib_apply_diff"
37 #define PCMK__CIB_REQUEST_UPGRADE "cib_upgrade"
38 #define PCMK__CIB_REQUEST_ABS_DELETE "cib_delete_alt"
39 #define PCMK__CIB_REQUEST_NOOP "noop"
40 #define PCMK__CIB_REQUEST_SHUTDOWN "cib_shutdown_req"
41 #define PCMK__CIB_REQUEST_COMMIT_TRANSACT "cib_commit_transact"
42 #define PCMK__CIB_REQUEST_SCHEMAS "cib_schemas"
43 
51  cib__op_attr_modifies = (1 << 1),
53  cib__op_attr_local = (1 << 3),
54  cib__op_attr_replaces = (1 << 4),
57 };
58 
85 };
86 
87 gboolean cib_diff_version_details(xmlNode * diff, int *admin_epoch, int *epoch, int *updates,
88  int *_admin_epoch, int *_epoch, int *_updates);
89 
90 gboolean cib_read_config(GHashTable * options, xmlNode * current_cib);
91 
92 typedef int (*cib__op_fn_t)(const char *, int, const char *, xmlNode *,
93  xmlNode *, xmlNode *, xmlNode **, xmlNode **);
94 
95 typedef struct cib__operation_s {
96  const char *name;
98  uint32_t flags;
100 
101 typedef struct cib_notify_client_s {
102  const char *event;
103  const char *obj_id; /* implement one day */
104  const char *obj_type; /* implement one day */
105  void (*callback) (const char *event, xmlNode * msg);
106 
108 
109 typedef struct cib_callback_client_s {
110  void (*callback) (xmlNode *, int, int, xmlNode *, void *);
111  const char *id;
112  void *user_data;
113  gboolean only_success;
115  void (*free_func)(void *);
117 
118 struct timer_rec_s {
119  int call_id;
120  int timeout;
121  guint ref;
123 };
124 
125 #define cib__set_call_options(cib_call_opts, call_for, flags_to_set) do { \
126  cib_call_opts = pcmk__set_flags_as(__func__, __LINE__, \
127  LOG_TRACE, "CIB call", (call_for), (cib_call_opts), \
128  (flags_to_set), #flags_to_set); \
129  } while (0)
130 
131 #define cib__clear_call_options(cib_call_opts, call_for, flags_to_clear) do { \
132  cib_call_opts = pcmk__clear_flags_as(__func__, __LINE__, \
133  LOG_TRACE, "CIB call", (call_for), (cib_call_opts), \
134  (flags_to_clear), #flags_to_clear); \
135  } while (0)
136 
137 cib_t *cib_new_variant(void);
138 
162 static inline bool
163 cib__client_triggers_refresh(const char *name)
164 {
167  "attrd_updater",
168  "crm_attribute",
169  "crm_node",
170  "crm_resource",
171  "crm_ticket",
172  NULL);
173 }
174 
175 int cib__get_notify_patchset(const xmlNode *msg, const xmlNode **patchset);
176 
177 int cib_perform_op(cib_t *cib, const char *op, uint32_t call_options,
178  cib__op_fn_t fn, bool is_query, const char *section,
179  xmlNode *req, xmlNode *input, bool manage_counters,
180  bool *config_changed, xmlNode **current_cib,
181  xmlNode **result_cib, xmlNode **diff, xmlNode **output);
182 
183 int cib__create_op(cib_t *cib, const char *op, const char *host,
184  const char *section, xmlNode *data, int call_options,
185  const char *user_name, const char *client_name,
186  xmlNode **op_msg);
187 
188 int cib__extend_transaction(cib_t *cib, xmlNode *request);
189 
190 void cib_native_callback(cib_t * cib, xmlNode * msg, int call_id, int rc);
191 void cib_native_notify(gpointer data, gpointer user_data);
192 
193 int cib__get_operation(const char *op, const cib__operation_t **operation);
194 
195 int cib_process_query(const char *op, int options, const char *section, xmlNode * req,
196  xmlNode * input, xmlNode * existing_cib, xmlNode ** result_cib,
197  xmlNode ** answer);
198 
199 int cib_process_erase(const char *op, int options, const char *section, xmlNode * req,
200  xmlNode * input, xmlNode * existing_cib, xmlNode ** result_cib,
201  xmlNode ** answer);
202 
203 int cib_process_bump(const char *op, int options, const char *section, xmlNode * req,
204  xmlNode * input, xmlNode * existing_cib, xmlNode ** result_cib,
205  xmlNode ** answer);
206 
207 int cib_process_replace(const char *op, int options, const char *section, xmlNode * req,
208  xmlNode * input, xmlNode * existing_cib, xmlNode ** result_cib,
209  xmlNode ** answer);
210 
211 int cib_process_create(const char *op, int options, const char *section, xmlNode * req,
212  xmlNode * input, xmlNode * existing_cib, xmlNode ** result_cib,
213  xmlNode ** answer);
214 
215 int cib_process_modify(const char *op, int options, const char *section, xmlNode * req,
216  xmlNode * input, xmlNode * existing_cib, xmlNode ** result_cib,
217  xmlNode ** answer);
218 
219 int cib_process_delete(const char *op, int options, const char *section, xmlNode * req,
220  xmlNode * input, xmlNode * existing_cib, xmlNode ** result_cib,
221  xmlNode ** answer);
222 
223 int cib_process_diff(const char *op, int options, const char *section, xmlNode * req,
224  xmlNode * input, xmlNode * existing_cib, xmlNode ** result_cib,
225  xmlNode ** answer);
226 
227 int cib_process_upgrade(const char *op, int options, const char *section, xmlNode * req,
228  xmlNode * input, xmlNode * existing_cib, xmlNode ** result_cib,
229  xmlNode ** answer);
230 
253 int cib_process_xpath(const char *op, int options, const char *section,
254  const xmlNode *req, xmlNode *input, xmlNode *existing_cib,
255  xmlNode **result_cib, xmlNode ** answer);
256 
257 int cib_internal_op(cib_t * cib, const char *op, const char *host,
258  const char *section, xmlNode * data,
259  xmlNode ** output_data, int call_options, const char *user_name);
260 
261 
262 int cib_file_read_and_verify(const char *filename, const char *sigfile,
263  xmlNode **root);
264 int cib_file_write_with_digest(xmlNode *cib_root, const char *cib_dirname,
265  const char *cib_filename);
266 
267 void cib__set_output(cib_t *cib, pcmk__output_t *out);
268 
270 
292 int cib__signon_query(pcmk__output_t *out, cib_t **cib, xmlNode **cib_object);
293 
294 int cib__signon_attempts(cib_t *cib, enum cib_conn_type type, int attempts);
295 
297 
298 int cib__update_node_attr(pcmk__output_t *out, cib_t *cib, int call_options,
299  const char *section, const char *node_uuid, const char *set_type,
300  const char *set_name, const char *attr_id, const char *attr_name,
301  const char *attr_value, const char *user_name,
302  const char *node_type);
303 
304 int cib__get_node_attrs(pcmk__output_t *out, cib_t *cib, const char *section,
305  const char *node_uuid, const char *set_type, const char *set_name,
306  const char *attr_id, const char *attr_name, const char *user_name,
307  xmlNode **result);
308 
309 int cib__delete_node_attr(pcmk__output_t *out, cib_t *cib, int options,
310  const char *section, const char *node_uuid, const char *set_type,
311  const char *set_name, const char *attr_id, const char *attr_name,
312  const char *attr_value, const char *user_name);
313 
314 #ifdef __cplusplus
315 }
316 #endif
317 
318 #endif // PCMK__CRM_CIB_INTERNAL__H
enum cib__op_type type
Definition: internal.h:97
pcmk__cpg_host_t host
Definition: cpg.c:52
char data[0]
Definition: cpg.c:58
int cib__signon_query(pcmk__output_t *out, cib_t **cib, xmlNode **cib_object)
Definition: cib_utils.c:841
const char * name
Definition: cib.c:26
enum pcmk_ipc_server type
Definition: cpg.c:51
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:425
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:304
void(* callback)(const char *event, xmlNode *msg)
Definition: internal.h:105
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:241
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:289
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:371
Supported in a transaction.
Definition: internal.h:56
int call_id
Definition: internal.h:119
gboolean only_success
Definition: internal.h:113
cib_callback_client_t * cib__lookup_id(int call_id)
Definition: cib_client.c:768
struct cib__operation_s cib__operation_t
void cib_native_notify(gpointer data, gpointer user_data)
Definition: cib_utils.c:695
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:345
const char * obj_id
Definition: internal.h:103
cib_t * cib_new_variant(void)
Definition: cib_client.c:622
int timeout
Definition: internal.h:120
cib__op_type
Definition: internal.h:64
struct timer_rec_s * timer
Definition: internal.h:114
Formatted output for pacemaker tools.
Writes to disk on success.
Definition: internal.h:55
Modifies CIB.
Definition: internal.h:51
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:644
cib_conn_type
Definition: cib_types.h:45
void(* callback)(xmlNode *, int, int, xmlNode *, void *)
Definition: internal.h:110
guint ref
Definition: internal.h:121
enum pcmk_ipc_server pcmk__parse_server(const char *text)
Definition: servers.c:178
const char * event
Definition: internal.h:102
void cib__set_output(cib_t *cib, pcmk__output_t *out)
Definition: cib_remote.c:663
Must only be processed locally.
Definition: internal.h:53
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:540
bool pcmk__str_any_of(const char *s,...) G_GNUC_NULL_TERMINATED
Definition: strings.c:1051
int cib__clean_up_connection(cib_t **cib)
Definition: cib_utils.c:920
int(* cib__op_fn_t)(const char *, int, const char *, xmlNode *, xmlNode *, xmlNode *, xmlNode **, xmlNode **)
Definition: internal.h:92
int cib__signon_attempts(cib_t *cib, enum cib_conn_type type, int attempts)
Definition: cib_utils.c:894
Replaces CIB.
Definition: internal.h:54
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:168
int cib_file_write_with_digest(xmlNode *cib_root, const char *cib_dirname, const char *cib_filename)
Definition: cib_file.c:919
Requires privileges.
Definition: internal.h:52
int cib__get_notify_patchset(const xmlNode *msg, const xmlNode **patchset)
Definition: cib_utils.c:75
gboolean cib_read_config(GHashTable *options, xmlNode *current_cib)
Definition: cib_utils.c:727
int cib_file_read_and_verify(const char *filename, const char *sigfile, xmlNode **root)
Definition: cib_file.c:747
pcmk__action_result_t result
Definition: pcmk_fence.c:37
const char * obj_type
Definition: internal.h:104
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:46
Unknown or invalid.
Definition: ipc.h:49
Cluster Configuration.
xmlNode * input
const char * id
Definition: internal.h:111
int cib__extend_transaction(cib_t *cib, xmlNode *request)
Definition: cib_utils.c:619
cib_t * cib
Definition: internal.h:122
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:164
uint32_t flags
Group of enum cib__op_attr flags.
Definition: internal.h:98
const char * name
Definition: internal.h:96
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:666
void cib_native_callback(cib_t *cib, xmlNode *msg, int call_id, int rc)
Definition: cib_utils.c:647
int cib__get_operation(const char *op, const cib__operation_t **operation)
Definition: cib_ops.c:144
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:755
cib__op_attr
Definition: internal.h:49
No special attributes.
Definition: internal.h:50
void(* free_func)(void *)
Definition: internal.h:115
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:260
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:453
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:577
int cib_perform_op(cib_t *cib, const char *op, uint32_t 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:222