testquorum.c 1.5 KB

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