| 400 | # include <libcman.h> |
| 401 | # define MAX_NODES 256 |
| 402 | static gboolean |
| 403 | try_cman(int command, enum cluster_type_e stack) |
| 404 | { |
| 405 | |
| 406 | int rc = -1, lpc = 0, node_count = 0; |
| 407 | cman_node_t node; |
| 408 | cman_cluster_t cluster; |
| 409 | cman_handle_t cman_handle = NULL; |
| 410 | cman_node_t cman_nodes[MAX_NODES]; |
| 411 | |
| 412 | memset(&cluster, 0, sizeof(cluster)); |
| 413 | |
| 414 | cman_handle = cman_init(NULL); |
| 415 | if (cman_handle == NULL || cman_is_active(cman_handle) == FALSE) { |
| 416 | crm_info("Couldn't connect to cman"); |
| 417 | return FALSE; |
| 418 | } |
| 419 | |
| 420 | switch (command) { |
| 421 | case 'R': |
| 422 | if (crmd_remove_node_cache(target_uname)) { |
| 423 | crm_err("Failed to connect to crmd to remove node id %s", target_uname); |
| 424 | } |
| 425 | break; |
| 426 | |
| 427 | case 'e': |
| 428 | /* Age makes no sense (yet?) in a cman cluster */ |
| 429 | fprintf(stdout, "1\n"); |
| 430 | break; |
| 431 | |
| 432 | case 'q': |
| 433 | fprintf(stdout, "%d\n", cman_is_quorate(cman_handle)); |
| 434 | break; |
| 435 | |
| 436 | case 'l': |
| 437 | case 'p': |
| 438 | rc = cman_get_nodes(cman_handle, MAX_NODES, &node_count, cman_nodes); |
| 439 | if (rc != 0) { |
| 440 | fprintf(stderr, "Couldn't query cman node list: %d %d", rc, errno); |
| 441 | goto cman_bail; |
| 442 | } |
| 443 | |
| 444 | for (lpc = 0; lpc < node_count; lpc++) { |
| 445 | if (command == 'l') { |
| 446 | printf("%s ", cman_nodes[lpc].cn_name); |
| 447 | |
| 448 | } else if (cman_nodes[lpc].cn_nodeid != 0 && cman_nodes[lpc].cn_member) { |
| 449 | /* Never allow node ID 0 to be considered a member #315711 */ |
| 450 | printf("%s ", cman_nodes[lpc].cn_name); |
| 451 | } |
| 452 | } |
| 453 | printf("\n"); |
| 454 | break; |
| 455 | |
| 456 | case 'i': |
| 457 | rc = cman_get_node(cman_handle, CMAN_NODEID_US, &node); |
| 458 | if (rc != 0) { |
| 459 | fprintf(stderr, "Couldn't query cman node id: %d %d", rc, errno); |
no test coverage detected