This source file includes following definitions.
- log_resource_details
- pcmk__schedule_actions
1
2
3
4
5
6
7
8
9
10 #include <crm_internal.h>
11
12 #include <sys/param.h>
13
14 #include <crm/crm.h>
15 #include <crm/cib.h>
16 #include <crm/msg_xml.h>
17 #include <crm/common/xml.h>
18
19 #include <glib.h>
20
21 #include <crm/pengine/status.h>
22 #include <pacemaker-internal.h>
23 #include <crm/common/ipc_internal.h>
24
25 gboolean show_scores = FALSE;
26 gboolean show_utilization = FALSE;
27
28 static void
29 log_resource_details(pe_working_set_t *data_set)
30 {
31 int rc = pcmk_rc_ok;
32 pcmk__output_t *out = NULL;
33 const char* argv[] = { "", NULL };
34 GListPtr all = NULL;
35 pcmk__supported_format_t formats[] = {
36 PCMK__SUPPORTED_FORMAT_LOG,
37 { NULL, NULL, NULL }
38 };
39
40
41
42
43
44
45 all = g_list_prepend(all, strdup("*"));
46
47 pcmk__register_formats(NULL, formats);
48 rc = pcmk__output_new(&out, "log", NULL, (char**)argv);
49 if ((rc != pcmk_rc_ok) || (out == NULL)) {
50 crm_err("Can't log resource details due to internal error: %s\n",
51 pcmk_rc_str(rc));
52 return;
53 }
54 pe__register_messages(out);
55
56 for (GList *item = data_set->resources; item != NULL; item = item->next) {
57 pe_resource_t *rsc = (pe_resource_t *) item->data;
58
59
60 if (!pcmk_is_set(rsc->flags, pe_rsc_orphan)
61 || (rsc->role != RSC_ROLE_STOPPED)) {
62 out->message(out, crm_map_element_name(rsc->xml), 0, rsc, all, all);
63 }
64 }
65
66 pcmk__output_free(out);
67 g_list_free_full(all, free);
68 }
69
70
71
72
73
74
75
76
77
78 xmlNode *
79 pcmk__schedule_actions(pe_working_set_t *data_set, xmlNode *xml_input,
80 crm_time_t *now)
81 {
82 GListPtr gIter = NULL;
83
84
85
86 CRM_ASSERT(xml_input || pcmk_is_set(data_set->flags, pe_flag_have_status));
87
88 if (!pcmk_is_set(data_set->flags, pe_flag_have_status)) {
89 set_working_set_defaults(data_set);
90 data_set->input = xml_input;
91 data_set->now = now;
92
93 } else {
94 crm_trace("Already have status - reusing");
95 }
96
97 if (data_set->now == NULL) {
98 data_set->now = crm_time_new(NULL);
99 }
100
101 crm_trace("Calculate cluster status");
102 stage0(data_set);
103 if (!pcmk_is_set(data_set->flags, pe_flag_quick_location)) {
104 log_resource_details(data_set);
105 }
106
107 crm_trace("Applying location constraints");
108 stage2(data_set);
109
110 if (pcmk_is_set(data_set->flags, pe_flag_quick_location)) {
111 return NULL;
112 }
113
114 crm_trace("Create internal constraints");
115 stage3(data_set);
116
117 crm_trace("Check actions");
118 stage4(data_set);
119
120 crm_trace("Allocate resources");
121 stage5(data_set);
122
123 crm_trace("Processing fencing and shutdown cases");
124 stage6(data_set);
125
126 crm_trace("Applying ordering constraints");
127 stage7(data_set);
128
129 crm_trace("Create transition graph");
130 stage8(data_set);
131
132 crm_trace("=#=#=#=#= Summary =#=#=#=#=");
133 crm_trace("\t========= Set %d (Un-runnable) =========", -1);
134 if (get_crm_log_level() == LOG_TRACE) {
135 gIter = data_set->actions;
136 for (; gIter != NULL; gIter = gIter->next) {
137 pe_action_t *action = (pe_action_t *) gIter->data;
138
139 if (!pcmk_any_flags_set(action->flags,
140 pe_action_optional
141 |pe_action_runnable
142 |pe_action_pseudo)) {
143 log_action(LOG_TRACE, "\t", action, TRUE);
144 }
145 }
146 }
147
148 return data_set->graph;
149 }