/**************************************************************************** Callbacks *****************************************************************************/ static void start_stop_action (GtkWidget* w, void * unused) { if (gLoopFlag) { gLoopFlag = 0; return; } if (running) stop_action (w); else start_action (w); }
void group_create_actions(resource_t * rsc, pe_working_set_t * data_set) { action_t *op = NULL; const char *value = NULL; GListPtr gIter = rsc->children; crm_debug_2("Creating actions for %s", rsc->id); for (; gIter != NULL; gIter = gIter->next) { resource_t *child_rsc = (resource_t *) gIter->data; child_rsc->cmds->create_actions(child_rsc, data_set); group_update_pseudo_status(rsc, child_rsc); } op = start_action(rsc, NULL, TRUE /* !group_data->child_starting */ ); set_bit_inplace(op->flags, pe_action_pseudo | pe_action_runnable); op = custom_action(rsc, started_key(rsc), RSC_STARTED, NULL, TRUE /* !group_data->child_starting */ , TRUE, data_set); set_bit_inplace(op->flags, pe_action_pseudo | pe_action_runnable); op = stop_action(rsc, NULL, TRUE /* !group_data->child_stopping */ ); set_bit_inplace(op->flags, pe_action_pseudo | pe_action_runnable); op = custom_action(rsc, stopped_key(rsc), RSC_STOPPED, NULL, TRUE /* !group_data->child_stopping */ , TRUE, data_set); set_bit_inplace(op->flags, pe_action_pseudo | pe_action_runnable); value = g_hash_table_lookup(rsc->meta, "stateful"); if (crm_is_true(value)) { op = custom_action(rsc, demote_key(rsc), RSC_DEMOTE, NULL, TRUE, TRUE, data_set); set_bit_inplace(op->flags, pe_action_pseudo); set_bit_inplace(op->flags, pe_action_runnable); op = custom_action(rsc, demoted_key(rsc), RSC_DEMOTED, NULL, TRUE, TRUE, data_set); set_bit_inplace(op->flags, pe_action_pseudo); set_bit_inplace(op->flags, pe_action_runnable); op = custom_action(rsc, promote_key(rsc), RSC_PROMOTE, NULL, TRUE, TRUE, data_set); set_bit_inplace(op->flags, pe_action_pseudo); set_bit_inplace(op->flags, pe_action_runnable); op = custom_action(rsc, promoted_key(rsc), RSC_PROMOTED, NULL, TRUE, TRUE, data_set); set_bit_inplace(op->flags, pe_action_pseudo); set_bit_inplace(op->flags, pe_action_runnable); } }
static gboolean check_rsc_parameters(resource_t *rsc, node_t *node, crm_data_t *rsc_entry, pe_working_set_t *data_set) { int attr_lpc = 0; gboolean force_restart = FALSE; gboolean delete_resource = FALSE; const char *value = NULL; const char *old_value = NULL; const char *attr_list[] = { XML_ATTR_TYPE, XML_AGENT_ATTR_CLASS, XML_AGENT_ATTR_PROVIDER }; for(; attr_lpc < DIMOF(attr_list); attr_lpc++) { value = crm_element_value(rsc->xml, attr_list[attr_lpc]); old_value = crm_element_value(rsc_entry, attr_list[attr_lpc]); if(value == old_value /* ie. NULL */ || crm_str_eq(value, old_value, TRUE)) { continue; } force_restart = TRUE; crm_notice("Forcing restart of %s on %s, %s changed: %s -> %s", rsc->id, node->details->uname, attr_list[attr_lpc], crm_str(old_value), crm_str(value)); } if(force_restart) { /* make sure the restart happens */ stop_action(rsc, node, FALSE); set_bit(rsc->flags, pe_rsc_start_pending); delete_resource = TRUE; } return delete_resource; }
void parse_serial(void) { int a = (serial_buf[1] - '0'); if (a >= NACTIONS) a = 0; Action *ap = &action[a]; switch(serial_buf[0]) { case '+': // command '+': start action start_action(a); return; case '-': // command '-': stop action stop_action(a); return; case '=': // command '=': define action ap->i_active = false; // deactivate redefined action uchar i = 2; while (i < serial_len) switch(serial_buf[i++]) { case 'p': // p 0000 = pattern ap->d_pattern = get_hex16(serial_buf+i); i += 4; break; case 's': // s 0000 = speed ap->d_speed = get_hex16(serial_buf+i); i += 4; break; case 'l': // l 00 = length ap->d_length = get_hex8(serial_buf+i); i += 2; case 'o': // o 00 = override length ap->d_override = get_hex8(serial_buf+i); i += 2; break; case 'r': // r 00 = repeat ap->d_repeat = get_hex8(serial_buf+i); i += 2; break; case 'f': // f 000000 = fg color ap->d_color1[0] = get_hex8(serial_buf+i); ap->d_color1[1] = get_hex8(serial_buf+i+2); ap->d_color1[2] = get_hex8(serial_buf+i+4); i += 6; break; case 'b': // b 000000 = bg color ap->d_color0[0] = get_hex8(serial_buf+i); ap->d_color0[1] = get_hex8(serial_buf+i+2); ap->d_color0[2] = get_hex8(serial_buf+i+4); i += 6; break; case 'S': // S = soft ap->d_soft = true; break; case 'H': // H = hard ap->d_soft = false; break; case 'C': // C = clear {int j; for (j=0; j < sizeof(Action); j++) ((char *)ap)[i] = 0; break;} case 'A': // A = activate start_action(a); } } }