testquorum.c 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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 <unistd.h>
  8. #include <corosync/corotypes.h>
  9. #include <corosync/quorum.h>
  10. static quorum_handle_t g_handle;
  11. static void quorum_notification_fn(
  12. quorum_handle_t handle,
  13. uint32_t quorate,
  14. uint64_t ring_id,
  15. uint32_t view_list_entries,
  16. uint32_t *view_list)
  17. {
  18. int i;
  19. printf("quorum notification called \n");
  20. printf(" quorate = %lu\n", (long unsigned int) quorate);
  21. printf(" ring id = " CS_PRI_RING_ID_SEQ "\n", ring_id);
  22. printf(" num nodes = %lu ", (long unsigned int) view_list_entries);
  23. for (i=0; i<view_list_entries; i++) {
  24. printf(" " CS_PRI_NODE_ID, view_list[i]);
  25. }
  26. printf("\n");
  27. }
  28. int main(int argc, char *argv[])
  29. {
  30. int quorate;
  31. quorum_callbacks_t callbacks;
  32. uint32_t quorum_type;
  33. int err;
  34. callbacks.quorum_notify_fn = quorum_notification_fn;
  35. if ( (err=quorum_initialize(&g_handle, &callbacks, &quorum_type)) != CS_OK)
  36. fprintf(stderr, "quorum_initialize FAILED: %d\n", err);
  37. if ( (err=quorum_trackstart(g_handle, CS_TRACK_CHANGES)) != CS_OK)
  38. fprintf(stderr, "quorum_trackstart FAILED: %d\n", err);
  39. if ( (err=quorum_getquorate(g_handle, &quorate)) != CS_OK)
  40. fprintf(stderr, "quorum_getquorate FAILED: %d\n", err);
  41. else {
  42. printf("quorate %d\n", quorate);
  43. }
  44. printf("Waiting for quorum events, press ^C to finish\n");
  45. printf("-------------------\n");
  46. while (1)
  47. if (quorum_dispatch(g_handle, CS_DISPATCH_ALL) != CS_OK) {
  48. fprintf(stderr, "Error from quorum_dispatch\n");
  49. return -1;
  50. }
  51. return 0;
  52. }