pacemaker  2.0.3-4b1f869f0f
Scalable High-Availability cluster resource manager
internal.h
Go to the documentation of this file.
1 /*
2  * Copyright 2015-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 CRM_COMMON_INTERNAL__H
11 #define CRM_COMMON_INTERNAL__H
12 
13 #include <glib.h> /* for gboolean */
14 #include <dirent.h> /* for struct dirent */
15 #include <unistd.h> /* for getpid() */
16 #include <stdbool.h> /* for bool */
17 #include <sys/types.h> /* for uid_t and gid_t */
18 
19 #include <crm/common/logging.h>
20 
21 /* internal I/O utilities (from io.c) */
22 
23 char *generate_series_filename(const char *directory, const char *series, int sequence,
24  gboolean bzip);
25 int get_last_sequence(const char *directory, const char *series);
26 void write_last_sequence(const char *directory, const char *series, int sequence, int max);
27 int crm_chown_last_sequence(const char *directory, const char *series, uid_t uid, gid_t gid);
28 
29 bool pcmk__daemon_can_write(const char *dir, const char *file);
30 void crm_sync_directory(const char *name);
31 
32 char *crm_read_contents(const char *filename);
33 int crm_write_sync(int fd, const char *contents);
34 int crm_set_nonblocking(int fd);
35 const char *crm_get_tmpdir(void);
36 
37 void pcmk__close_fds_in_child(bool);
38 
39 
40 /* internal procfs utilities (from procfs.c) */
41 
42 int crm_procfs_process_info(struct dirent *entry, char *name, int *pid);
43 int crm_procfs_pid_of(const char *name);
44 unsigned int crm_procfs_num_cores(void);
45 
46 
47 /* internal XML schema functions (from xml.c) */
48 
49 void crm_schema_init(void);
50 void crm_schema_cleanup(void);
51 
52 
53 /* internal functions related to process IDs (from pid.c) */
54 
75 int crm_pid_active(long pid, const char *daemon);
76 
77 long crm_pidfile_inuse(const char *filename, long mypid, const char *daemon);
78 long crm_read_pidfile(const char *filename);
79 int crm_lock_pidfile(const char *filename, const char *name);
80 
81 
82 /* interal functions related to resource operations (from operations.c) */
83 
84 char *generate_op_key(const char *rsc_id, const char *op_type,
85  guint interval_ms);
86 char *generate_notify_key(const char *rsc_id, const char *notify_type,
87  const char *op_type);
88 char *generate_transition_key(int action, int transition_id, int target_rc,
89  const char *node);
90 void filter_action_parameters(xmlNode *param_set, const char *version);
91 
92 
93 // miscellaneous utilities (from utils.c)
94 
95 const char *pcmk_message_name(const char *name);
96 
97 
98 /* internal generic string functions (from strings.c) */
99 
100 long long crm_int_helper(const char *text, char **end_text);
101 guint crm_parse_ms(const char *text);
102 bool crm_starts_with(const char *str, const char *prefix);
103 gboolean crm_ends_with(const char *s, const char *match);
104 gboolean crm_ends_with_ext(const char *s, const char *match);
105 char *add_list_element(char *list, const char *value);
106 bool crm_compress_string(const char *data, int length, int max, char **result,
107  unsigned int *result_len);
108 gint crm_alpha_sort(gconstpointer a, gconstpointer b);
109 
110 static inline char *
111 crm_concat(const char *prefix, const char *suffix, char join)
112 {
113  CRM_ASSERT(prefix && suffix);
114  return crm_strdup_printf("%s%c%s", prefix, join, suffix);
115 }
116 
117 static inline int
118 crm_strlen_zero(const char *s)
119 {
120  return !s || *s == '\0';
121 }
122 
123 static inline char *
124 crm_getpid_s()
125 {
126  return crm_strdup_printf("%lu", (unsigned long) getpid());
127 }
128 
129 /* convenience functions for failure-related node attributes */
130 
131 #define CRM_FAIL_COUNT_PREFIX "fail-count"
132 #define CRM_LAST_FAILURE_PREFIX "last-failure"
133 
151 static inline char *
152 crm_fail_attr_name(const char *prefix, const char *rsc_id, const char *op,
153  guint interval_ms)
154 {
155  CRM_CHECK(prefix && rsc_id && op, return NULL);
156  return crm_strdup_printf("%s-%s#%s_%u", prefix, rsc_id, op, interval_ms);
157 }
158 
159 static inline char *
160 crm_failcount_name(const char *rsc_id, const char *op, guint interval_ms)
161 {
162  return crm_fail_attr_name(CRM_FAIL_COUNT_PREFIX, rsc_id, op, interval_ms);
163 }
164 
165 static inline char *
166 crm_lastfailure_name(const char *rsc_id, const char *op, guint interval_ms)
167 {
168  return crm_fail_attr_name(CRM_LAST_FAILURE_PREFIX, rsc_id, op, interval_ms);
169 }
170 
171 #endif /* CRM_COMMON_INTERNAL__H */
crm_get_tmpdir
const char * crm_get_tmpdir(void)
Definition: io.c:499
crm_pid_active
int crm_pid_active(long pid, const char *daemon)
Definition: pid.c:23
crm_schema_init
void crm_schema_init(void)
Definition: schemas.c:380
crm_lock_pidfile
int crm_lock_pidfile(const char *filename, const char *name)
Definition: pid.c:168
crm_compress_string
bool crm_compress_string(const char *data, int length, int max, char **result, unsigned int *result_len)
Definition: strings.c:431
data
char data[0]
Definition: internal.h:90
crm_read_contents
char * crm_read_contents(const char *filename)
Definition: io.c:409
CRM_LAST_FAILURE_PREFIX
#define CRM_LAST_FAILURE_PREFIX
Definition: internal.h:132
crm_schema_cleanup
void crm_schema_cleanup(void)
Definition: schemas.c:555
CRM_CHECK
#define CRM_CHECK(expr, failure_action)
Definition: logging.h:157
crm_parse_ms
guint crm_parse_ms(const char *text)
Definition: strings.c:147
write_last_sequence
void write_last_sequence(const char *directory, const char *series, int sequence, int max)
Definition: io.c:167
crm_chown_last_sequence
int crm_chown_last_sequence(const char *directory, const char *series, uid_t uid, gid_t gid)
Definition: io.c:216
filter_action_parameters
void filter_action_parameters(xmlNode *param_set, const char *version)
Definition: operations.c:263
get_last_sequence
int get_last_sequence(const char *directory, const char *series)
Definition: io.c:101
crm_procfs_pid_of
int crm_procfs_pid_of(const char *name)
Definition: procfs.c:110
crm_strdup_printf
char * crm_strdup_printf(char const *format,...) __attribute__((__format__(__printf__
pid
uint32_t pid
Definition: internal.h:81
crm_pidfile_inuse
long crm_pidfile_inuse(const char *filename, long mypid, const char *daemon)
Definition: pid.c:141
crm_procfs_num_cores
unsigned int crm_procfs_num_cores(void)
Definition: procfs.c:144
crm_procfs_process_info
int crm_procfs_process_info(struct dirent *entry, char *name, int *pid)
Definition: procfs.c:39
pcmk__close_fds_in_child
void pcmk__close_fds_in_child(bool)
Definition: io.c:517
crm_set_nonblocking
int crm_set_nonblocking(int fd)
Definition: io.c:485
pcmk_message_name
const char * pcmk_message_name(const char *name)
Get name to be used as identifier for cluster messages.
Definition: utils.c:1106
crm_alpha_sort
gint crm_alpha_sort(gconstpointer a, gconstpointer b)
Compare two strings alphabetically (case-insensitive)
Definition: strings.c:493
crm_write_sync
int crm_write_sync(int fd, const char *contents)
Definition: io.c:455
daemon
int daemon(int nochdir, int noclose)
generate_series_filename
char * generate_series_filename(const char *directory, const char *series, int sequence, gboolean bzip)
Definition: io.c:78
logging.h
Wrappers for and extensions to libqb logging.
crm_ends_with
gboolean crm_ends_with(const char *s, const char *match)
Definition: strings.c:313
CRM_ASSERT
#define CRM_ASSERT(expr)
Definition: results.h:42
pcmk__daemon_can_write
bool pcmk__daemon_can_write(const char *dir, const char *file)
Definition: io.c:304
CRM_FAIL_COUNT_PREFIX
#define CRM_FAIL_COUNT_PREFIX
Definition: internal.h:131
crm_sync_directory
void crm_sync_directory(const char *name)
Definition: io.c:372
version
uint32_t version
Definition: remote.c:146
crm_starts_with
bool crm_starts_with(const char *str, const char *prefix)
Check whether a string starts with a certain sequence.
Definition: strings.c:263
crm_read_pidfile
long crm_read_pidfile(const char *filename)
Definition: pid.c:103
generate_op_key
char * generate_op_key(const char *rsc_id, const char *op_type, guint interval_ms)
Generate an operation key.
Definition: operations.c:39
crm_ends_with_ext
gboolean crm_ends_with_ext(const char *s, const char *match)
Definition: strings.c:342
generate_transition_key
char * generate_transition_key(int action, int transition_id, int target_rc, const char *node)
Definition: operations.c:194
generate_notify_key
char * generate_notify_key(const char *rsc_id, const char *notify_type, const char *op_type)
Definition: operations.c:128
crm_int_helper
long long crm_int_helper(const char *text, char **end_text)
Definition: strings.c:34
add_list_element
char * add_list_element(char *list, const char *value)
Definition: strings.c:412