testquorum.c 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #include <sys/types.h>
  2. #include <stdio.h>
  3. #include <stdint.h>
  4. #include <stdlib.h>
  5. #include <unistd.h>
  6. #include <corosync/corotypes.h>
  7. #include <corosync/quorum.h>
  8. static quorum_handle_t handle;
  9. static void quorum_notification_fn(
  10. quorum_handle_t handle,
  11. uint32_t quorate,
  12. uint64_t ring_id,
  13. uint32_t view_list_entries,
  14. uint32_t *view_list)
  15. {
  16. int i;
  17. printf("quorum notification called \n");
  18. printf(" quorate = %d\n", quorate);
  19. printf(" ring id = %lld\n", ring_id);
  20. printf(" num nodes = %d ", view_list_entries);
  21. for (i=0; i<view_list_entries; i++) {
  22. printf(" %d ", view_list[i]);
  23. }
  24. printf("\n");
  25. }
  26. int main(int argc, char *argv[])
  27. {
  28. int quorate;
  29. quorum_callbacks_t callbacks;
  30. int err;
  31. callbacks.quorum_notify_fn = quorum_notification_fn;
  32. if ( (err=quorum_initialize(&handle, &callbacks)) != CS_OK)
  33. fprintf(stderr, "quorum_initialize FAILED: %d\n", err);
  34. if ( (err=quorum_trackstart(handle, CS_TRACK_CHANGES)) != CS_OK)
  35. fprintf(stderr, "quorum_trackstart FAILED: %d\n", err);
  36. if ( (err=quorum_getquorate(handle, &quorate)) != CS_OK)
  37. fprintf(stderr, "quorum_getquorate FAILED: %d\n", err);
  38. else {
  39. printf("quorate %d\n", quorate);
  40. }
  41. printf("Waiting for quorum events, press ^C to finish\n");
  42. printf("-------------------\n");
  43. while (1)
  44. quorum_dispatch(handle, CS_DISPATCH_ALL);
  45. return 0;
  46. }