heartbeat.h 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. /* -*- mode: c; c-basic-offset: 8; -*-
  2. * vim: noexpandtab sw=8 ts=8 sts=0:
  3. *
  4. * heartbeat.h
  5. *
  6. * Function prototypes
  7. *
  8. * Copyright (C) 2004 Oracle. All rights reserved.
  9. *
  10. * This program is free software; you can redistribute it and/or
  11. * modify it under the terms of the GNU General Public
  12. * License as published by the Free Software Foundation; either
  13. * version 2 of the License, or (at your option) any later version.
  14. *
  15. * This program is distributed in the hope that it will be useful,
  16. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  17. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  18. * General Public License for more details.
  19. *
  20. * You should have received a copy of the GNU General Public
  21. * License along with this program; if not, write to the
  22. * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  23. * Boston, MA 021110-1307, USA.
  24. *
  25. */
  26. #ifndef O2CLUSTER_HEARTBEAT_H
  27. #define O2CLUSTER_HEARTBEAT_H
  28. #include "ocfs2_heartbeat.h"
  29. #define O2HB_REGION_TIMEOUT_MS 2000
  30. /* number of changes to be seen as live */
  31. #define O2HB_LIVE_THRESHOLD 2
  32. /* number of equal samples to be seen as dead */
  33. extern unsigned int o2hb_dead_threshold;
  34. #define O2HB_DEFAULT_DEAD_THRESHOLD 31
  35. /* Otherwise MAX_WRITE_TIMEOUT will be zero... */
  36. #define O2HB_MIN_DEAD_THRESHOLD 2
  37. #define O2HB_MAX_WRITE_TIMEOUT_MS (O2HB_REGION_TIMEOUT_MS * (o2hb_dead_threshold - 1))
  38. #define O2HB_CB_MAGIC 0x51d1e4ec
  39. /* callback stuff */
  40. enum o2hb_callback_type {
  41. O2HB_NODE_DOWN_CB = 0,
  42. O2HB_NODE_UP_CB,
  43. O2HB_NUM_CB
  44. };
  45. struct o2nm_node;
  46. typedef void (o2hb_cb_func)(struct o2nm_node *, int, void *);
  47. struct o2hb_callback_func {
  48. u32 hc_magic;
  49. struct list_head hc_item;
  50. o2hb_cb_func *hc_func;
  51. void *hc_data;
  52. int hc_priority;
  53. enum o2hb_callback_type hc_type;
  54. };
  55. struct config_group *o2hb_alloc_hb_set(void);
  56. void o2hb_free_hb_set(struct config_group *group);
  57. void o2hb_setup_callback(struct o2hb_callback_func *hc,
  58. enum o2hb_callback_type type,
  59. o2hb_cb_func *func,
  60. void *data,
  61. int priority);
  62. int o2hb_register_callback(const char *region_uuid,
  63. struct o2hb_callback_func *hc);
  64. void o2hb_unregister_callback(const char *region_uuid,
  65. struct o2hb_callback_func *hc);
  66. void o2hb_fill_node_map(unsigned long *map,
  67. unsigned bytes);
  68. void o2hb_exit(void);
  69. int o2hb_init(void);
  70. int o2hb_check_node_heartbeating(u8 node_num);
  71. int o2hb_check_node_heartbeating_from_callback(u8 node_num);
  72. int o2hb_check_local_node_heartbeating(void);
  73. void o2hb_stop_all_regions(void);
  74. #endif /* O2CLUSTER_HEARTBEAT_H */