4
0

testquorummodel.c 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. #include <config.h>
  2. #include <sys/types.h>
  3. #include <stdio.h>
  4. #include <inttypes.h>
  5. #include <stdint.h>
  6. #include <stdlib.h>
  7. #include <string.h>
  8. #include <unistd.h>
  9. #include <corosync/corotypes.h>
  10. #include <corosync/quorum.h>
  11. static quorum_handle_t g_handle;
  12. static void quorum_notification_fn(
  13. quorum_handle_t handle,
  14. uint32_t quorate,
  15. struct quorum_ring_id ring_id,
  16. uint32_t view_list_entries,
  17. const uint32_t *view_list)
  18. {
  19. int i;
  20. printf("quorum notification called \n");
  21. printf(" quorate = %lu\n", (long unsigned int) quorate);
  22. printf(" ring id = " CS_PRI_RING_ID "\n", ring_id.nodeid, ring_id.seq);
  23. printf(" num nodes = %lu ", (long unsigned int) view_list_entries);
  24. for (i=0; i<view_list_entries; i++) {
  25. printf(" " CS_PRI_NODE_ID, view_list[i]);
  26. }
  27. printf("\n");
  28. }
  29. static void nodelist_notification_fn(
  30. quorum_handle_t handle,
  31. struct quorum_ring_id ring_id,
  32. uint32_t member_list_entries, const uint32_t *member_list,
  33. uint32_t joined_list_entries, const uint32_t *joined_list,
  34. uint32_t left_list_entries, const uint32_t *left_list)
  35. {
  36. int i;
  37. printf("nodelist notification called \n");
  38. printf(" ring id = " CS_PRI_RING_ID "\n", ring_id.nodeid, ring_id.seq);
  39. printf(" num members = %" PRIu32 " ", member_list_entries);
  40. for (i=0; i<member_list_entries; i++) {
  41. printf(" " CS_PRI_NODE_ID, member_list[i]);
  42. }
  43. printf("\n");
  44. printf(" num joined members = %" PRIu32 " ", joined_list_entries);
  45. for (i=0; i<joined_list_entries; i++) {
  46. printf(" " CS_PRI_NODE_ID, joined_list[i]);
  47. }
  48. printf("\n");
  49. printf(" num left members = %" PRIu32 " ", left_list_entries);
  50. for (i=0; i<left_list_entries; i++) {
  51. printf(" " CS_PRI_NODE_ID, left_list[i]);
  52. }
  53. printf("\n");
  54. }
  55. int main(int argc, char *argv[])
  56. {
  57. int quorate;
  58. quorum_model_v1_data_t model_data;
  59. uint32_t quorum_type;
  60. int err;
  61. memset(&model_data, 0, sizeof(model_data));
  62. model_data.quorum_notify_fn = quorum_notification_fn;
  63. model_data.nodelist_notify_fn = nodelist_notification_fn;
  64. if ( (err=quorum_model_initialize (&g_handle, QUORUM_MODEL_V1,
  65. (quorum_model_data_t *)&model_data, &quorum_type, NULL)) != CS_OK) {
  66. fprintf(stderr, "quorum_initialize FAILED: %d\n", err);
  67. exit(1);
  68. }
  69. if ( (err=quorum_trackstart(g_handle, CS_TRACK_CHANGES)) != CS_OK)
  70. fprintf(stderr, "quorum_trackstart FAILED: %d\n", err);
  71. if ( (err=quorum_getquorate(g_handle, &quorate)) != CS_OK)
  72. fprintf(stderr, "quorum_getquorate FAILED: %d\n", err);
  73. else {
  74. printf("quorate %d\n", quorate);
  75. }
  76. printf("Waiting for quorum events, press ^C to finish\n");
  77. printf("-------------------\n");
  78. if (quorum_dispatch(g_handle, CS_DISPATCH_BLOCKING) != CS_OK) {
  79. fprintf(stderr, "Error from quorum_dispatch\n");
  80. return -1;
  81. }
  82. return 0;
  83. }