servlist.h 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #ifndef AVM_SERVLIST_H
  2. #define AVM_SERVLIST_H 1
  3. #include <avm/lists.h>
  4. #ifdef __cplusplus
  5. extern "C"
  6. {
  7. #endif
  8. #define AVM_MSG_RESET "R"
  9. #define AVM_MSG_STATUS "S"
  10. #define AVM_DEFAULT_TIMEOUT 10
  11. typedef struct server_list_struct *server_list;
  12. /* A server list stores information about the registered servers. */
  13. struct server_list_struct
  14. {
  15. int data_fd; /* socket descriptor for the data path; set to blocking with a short timeout */
  16. int status_fd; /* socket descriptor for the control path; set to non-blocking */
  17. char *host; /* host name passed to getaddrinfo */
  18. char *data_port; /* data path port number passed to getaddrinfo */
  19. char *status_port; /* control path port number passed to getaddrinfo; usually the next consecutive port */
  20. flag opened; /* socket descriptors are valid */
  21. flag connected; /* socket descriptors are valid and the connection has been established */
  22. list cache; /* the last function sent to the server */
  23. time_t state_change; /* the last time it changed among busy, idle, and dead, or had its status requested */
  24. flag queried; /* a status requested hasn't been answered yet */
  25. time_t request_time; /* the last time a status request was sent */
  26. char *expected_crc; /* cyclic redundancy check for the last job sent to this server */
  27. double load_metric; /* returned by the remote server in status requests and used for load balancing */
  28. server_list peer; /* points to next server in a linked list */
  29. };
  30. struct statpacket /* sent by a server in response to a status request */
  31. {
  32. double load_average;
  33. unsigned short protocol_version;
  34. char payload[128]; /* in protocol version 0, the null terminated crc for the running job */
  35. };
  36. extern int avm_offline ();
  37. extern void avm_count_servlist ();
  38. extern void avm_initialize_servlist ();
  39. extern int avm_connectable (server_list server);
  40. extern void avm_wait_for_event (time_t interval);
  41. extern void avm_watch_server (server_list server);
  42. extern void avm_flush_server (server_list server);
  43. extern void avm_release_server (server_list *server);
  44. extern int avm_writable (server_list server, int *fault);
  45. extern void avm_unregister_server (server_list *servers);
  46. extern int avm_readable (server_list *server, int *fault);
  47. extern int avm_registered_server (char *host, int port_number);
  48. extern server_list avm_revived_server (time_t interval, int *fault);
  49. extern server_list avm_acquired_server (time_t interval, int *fault);
  50. extern int avm_unresponsive (server_list *server, time_t interval, list *value, int *fault);
  51. #ifdef __cplusplus
  52. }
  53. #endif
  54. #endif /* !AVM_SERVLIST_H */