1
2
3
4
5
6
7
8
9 #ifndef CONTROLD_LRM__H
10 # define CONTROLD_LRM__H
11
12 #include <controld_messages.h>
13
14 extern gboolean verify_stopped(enum crmd_fsa_state cur_state, int log_level);
15 void lrm_clear_last_failure(const char *rsc_id, const char *node_name,
16 const char *operation, guint interval_ms);
17 void lrm_op_callback(lrmd_event_data_t * op);
18 lrmd_t *crmd_local_lrmd_conn(void);
19
20 typedef struct resource_history_s {
21 char *id;
22 uint32_t last_callid;
23 lrmd_rsc_info_t rsc;
24 lrmd_event_data_t *last;
25 lrmd_event_data_t *failed;
26 GList *recurring_op_list;
27
28
29
30
31
32 GHashTable *stop_params;
33 } rsc_history_t;
34
35 void history_free(gpointer data);
36
37 enum active_op_e {
38 active_op_remove = (1 << 0),
39 active_op_cancelled = (1 << 1),
40 };
41
42
43 typedef struct active_op_s {
44 guint interval_ms;
45 int call_id;
46 uint32_t flags;
47 time_t start_time;
48 time_t lock_time;
49 char *rsc_id;
50 char *op_type;
51 char *op_key;
52 char *user_data;
53 GHashTable *params;
54 } active_op_t;
55
56 #define controld_set_active_op_flags(active_op, flags_to_set) do { \
57 (active_op)->flags = pcmk__set_flags_as(__func__, __LINE__, \
58 LOG_TRACE, "Active operation", (active_op)->op_key, \
59 (active_op)->flags, (flags_to_set), #flags_to_set); \
60 } while (0)
61
62 #define controld_clear_active_op_flags(active_op, flags_to_clear) do { \
63 (active_op)->flags = pcmk__clear_flags_as(__func__, __LINE__, \
64 LOG_TRACE, "Active operation", (active_op)->op_key, \
65 (active_op)->flags, (flags_to_clear), #flags_to_clear); \
66 } while (0)
67
68 typedef struct lrm_state_s {
69 const char *node_name;
70 void *conn;
71 void *remote_ra_data;
72
73 GHashTable *resource_history;
74 GHashTable *active_ops;
75 GHashTable *deletion_ops;
76 GHashTable *rsc_info_cache;
77 GHashTable *metadata_cache;
78
79 int num_lrm_register_fails;
80 } lrm_state_t;
81
82 struct pending_deletion_op_s {
83 char *rsc;
84 ha_msg_input_t *input;
85 };
86
87
88
89
90 gboolean
91 lrm_state_is_local(lrm_state_t *lrm_state);
92
93
94
95
96
97
98 void lrm_state_reset_tables(lrm_state_t * lrm_state, gboolean reset_metadata);
99 GList *lrm_state_get_list(void);
100
101
102
103
104 gboolean lrm_state_init_local(void);
105
106
107
108
109 void lrm_state_destroy_all(void);
110
111
112
113
114 void lrm_state_destroy(const char *node_name);
115
116
117
118
119 lrm_state_t *lrm_state_find(const char *node_name);
120
121
122
123
124 lrm_state_t *lrm_state_find_or_create(const char *node_name);
125
126
127
128
129
130
131
132
133 void lrm_state_disconnect_only(lrm_state_t * lrm_state);
134 void lrm_state_disconnect(lrm_state_t * lrm_state);
135 int controld_connect_local_executor(lrm_state_t *lrm_state);
136 int controld_connect_remote_executor(lrm_state_t *lrm_state, const char *server,
137 int port, int timeout);
138 int lrm_state_is_connected(lrm_state_t * lrm_state);
139 int lrm_state_poke_connection(lrm_state_t * lrm_state);
140
141 int lrm_state_get_metadata(lrm_state_t * lrm_state,
142 const char *class,
143 const char *provider,
144 const char *agent, char **output, enum lrmd_call_options options);
145 int lrm_state_cancel(lrm_state_t *lrm_state, const char *rsc_id,
146 const char *action, guint interval_ms);
147 int controld_execute_resource_agent(lrm_state_t *lrm_state, const char *rsc_id,
148 const char *action, const char *userdata,
149 guint interval_ms, int timeout_ms,
150 int start_delay_ms,
151 GHashTable *parameters, int *call_id);
152 lrmd_rsc_info_t *lrm_state_get_rsc_info(lrm_state_t * lrm_state,
153 const char *rsc_id, enum lrmd_call_options options);
154 int lrm_state_register_rsc(lrm_state_t * lrm_state,
155 const char *rsc_id,
156 const char *class,
157 const char *provider, const char *agent, enum lrmd_call_options options);
158 int lrm_state_unregister_rsc(lrm_state_t * lrm_state,
159 const char *rsc_id, enum lrmd_call_options options);
160
161
162 void remote_lrm_op_callback(lrmd_event_data_t * op);
163 gboolean is_remote_lrmd_ra(const char *agent, const char *provider, const char *id);
164 lrmd_rsc_info_t *remote_ra_get_rsc_info(lrm_state_t * lrm_state, const char *rsc_id);
165 int remote_ra_cancel(lrm_state_t *lrm_state, const char *rsc_id,
166 const char *action, guint interval_ms);
167 int controld_execute_remote_agent(const lrm_state_t *lrm_state,
168 const char *rsc_id, const char *action,
169 const char *userdata,
170 guint interval_ms, int timeout_ms,
171 int start_delay_ms, lrmd_key_value_t *params,
172 int *call_id);
173 void remote_ra_cleanup(lrm_state_t * lrm_state);
174 void remote_ra_fail(const char *node_name);
175 void remote_ra_process_pseudo(xmlNode *xml);
176 gboolean remote_ra_is_in_maintenance(lrm_state_t * lrm_state);
177 void remote_ra_process_maintenance_nodes(xmlNode *xml);
178 gboolean remote_ra_controlling_guest(lrm_state_t * lrm_state);
179
180 void process_lrm_event(lrm_state_t *lrm_state, lrmd_event_data_t *op,
181 active_op_t *pending, const xmlNode *action_xml);
182 void controld_ack_event_directly(const char *to_host, const char *to_sys,
183 const lrmd_rsc_info_t *rsc,
184 lrmd_event_data_t *op, const char *rsc_id);
185 void controld_rc2event(lrmd_event_data_t *event, int rc);
186 void controld_trigger_delete_refresh(const char *from_sys, const char *rsc_id);
187
188 #endif