| 1245 | |
| 1246 | int current_instance = 0; |
| 1247 | void |
| 1248 | cib_ccm_msg_callback(oc_ed_t event, void *cookie, size_t size, const void *data) |
| 1249 | { |
| 1250 | gboolean update_id = FALSE; |
| 1251 | const oc_ev_membership_t *membership = data; |
| 1252 | |
| 1253 | CRM_ASSERT(membership != NULL); |
| 1254 | |
| 1255 | crm_info("Processing CCM event=%s (id=%d)", ccm_event_name(event), membership->m_instance); |
| 1256 | |
| 1257 | if (current_instance > membership->m_instance) { |
| 1258 | crm_err("Membership instance ID went backwards! %d->%d", |
| 1259 | current_instance, membership->m_instance); |
| 1260 | CRM_ASSERT(current_instance <= membership->m_instance); |
| 1261 | } |
| 1262 | |
| 1263 | switch (event) { |
| 1264 | case OC_EV_MS_NEW_MEMBERSHIP: |
| 1265 | case OC_EV_MS_INVALID: |
| 1266 | update_id = TRUE; |
| 1267 | break; |
| 1268 | case OC_EV_MS_PRIMARY_RESTORED: |
| 1269 | update_id = TRUE; |
| 1270 | break; |
| 1271 | case OC_EV_MS_NOT_PRIMARY: |
| 1272 | crm_trace("Ignoring transitional CCM event: %s", ccm_event_name(event)); |
| 1273 | break; |
| 1274 | case OC_EV_MS_EVICTED: |
| 1275 | crm_err("Evicted from CCM: %s", ccm_event_name(event)); |
| 1276 | break; |
| 1277 | default: |
| 1278 | crm_err("Unknown CCM event: %d", event); |
| 1279 | } |
| 1280 | |
| 1281 | if (update_id) { |
| 1282 | unsigned int lpc = 0; |
| 1283 | |
| 1284 | CRM_CHECK(membership != NULL, return); |
| 1285 | |
| 1286 | current_instance = membership->m_instance; |
| 1287 | |
| 1288 | for (lpc = 0; lpc < membership->m_n_out; lpc++) { |
| 1289 | crm_update_ccm_node(membership, lpc + membership->m_out_idx, CRM_NODE_LOST, |
| 1290 | current_instance); |
| 1291 | } |
| 1292 | |
| 1293 | for (lpc = 0; lpc < membership->m_n_member; lpc++) { |
| 1294 | crm_update_ccm_node(membership, lpc + membership->m_memb_idx, CRM_NODE_ACTIVE, |
| 1295 | current_instance); |
| 1296 | } |
| 1297 | } |
| 1298 | |
| 1299 | if (ccm_api_callback_done == NULL) { |
| 1300 | ccm_api_callback_done = |
| 1301 | find_library_function(&ccm_library, CCM_LIBRARY, "oc_ev_callback_done", 1); |
| 1302 | } |
| 1303 | (*ccm_api_callback_done) (cookie); |
| 1304 | return; |
nothing calls this directly
no test coverage detected