31 #include <sys/types.h> 41 #include <sys/ioctl.h> 43 #include <sys/socket.h> 44 #include <netinet/in.h> 48 #include <sys/select.h> 52 #include <sys/filio.h> 56 #if defined(SOLARIS) || defined(LINUX) 156 request =
htonl (command);
159 nbytes = send (conn->
fd, (
char *) &request, sizeof (
int), 0);
160 if (nbytes ==
sizeof (
int))
184 nbytes = send (conn->
fd, (
char *) data, size, 0);
206 int size =
sizeof (request);
210 nbytes =
css_readn (conn->
fd, (
char *) &request, size, -1);
213 *command =
ntohl (request);
255 #if !defined(WINDOWS) 272 kill (getpid (), SIGTERM);
293 if (
NULL == hbp_register)
300 hbp_register->
pid =
htonl (getpid ());
304 p = (
char *) &hbp_register->
args[0];
305 last = (
char *) (p +
sizeof (hbp_register->
args));
308 p += snprintf (p, MAX ((last - p), 0),
"%s ", *argv);
311 return (hbp_register);
337 pid =
htonl (getpid ());
367 if (
NULL == hbp_register)
451 struct pollfd po[1] = { {0, 0, 0} };
461 po[0].fd = hb_Conn->
fd;
462 po[0].events = POLLIN;
472 && ioctlsocket (hb_Conn->
fd, FIONREAD, (u_long *) (&status)) == SOCKET_ERROR
474 && fcntl (hb_Conn->
fd, F_GETFL, status) < 0
512 char *packed_name =
NULL;
513 const char *env_name =
NULL;
515 int n_len, l_len, r_len, e_len, p_len;
517 if (server_name !=
NULL)
520 if (env_name ==
NULL)
528 snprintf (pid_string,
sizeof (pid_string),
"%d", getpid ());
529 n_len = (int)
strlen (server_name) + 1;
530 l_len = (log_path) ? (
int)
strlen (log_path) + 1 : 0;
532 e_len = (int)
strlen (env_name) + 1;
533 p_len = (int)
strlen (pid_string) + 1;
534 *name_length = n_len + l_len + r_len + e_len + p_len + 5;
536 packed_name = (
char *) malloc (*name_length);
537 if (packed_name ==
NULL)
545 packed_name[0] =
'$';
549 packed_name[0] =
'%';
558 memcpy (packed_name + 1, server_name, n_len);
561 packed_name[(1 + n_len) - 1] =
':';
562 memcpy (packed_name + 1 + n_len, log_path, l_len);
565 memcpy (packed_name + 1 + n_len + l_len + r_len, env_name, e_len);
566 memcpy (packed_name + 1 + n_len + l_len + r_len + e_len, pid_string, p_len);
568 return (packed_name);
586 if (packed_name ==
NULL)
611 #if !defined (WINDOWS) 613 pthread_attr_t thread_attr;
615 pthread_t master_reader_th;
617 rv = pthread_attr_init (&thread_attr);
624 rv = pthread_attr_setdetachstate (&thread_attr, PTHREAD_CREATE_DETACHED);
635 pthread_attr_setscope (&thread_attr,
637 PTHREAD_SCOPE_SYSTEM);
639 rv = pthread_attr_setscope (&thread_attr, PTHREAD_SCOPE_SYSTEM);
647 #if defined(_POSIX_THREAD_ATTR_STACKSIZE) 648 rv = pthread_attr_getstacksize (&thread_attr, &ts_size);
684 #if !defined(SERVER_MODE) 686 static bool is_first =
true;
688 if (is_first ==
false)
const char * envvar_root(void)
#define ER_CSS_PTHREAD_ATTR_SETDETACHSTATE
static THREAD_RET_T THREAD_CALLING_CONVENTION hb_thread_master_reader(void *arg)
static int hb_process_master_request_info(CSS_CONN_ENTRY *conn)
unsigned int htonl(unsigned int from)
int hb_deregister_from_master(void)
#define ER_CSS_PTHREAD_CREATE
int css_receive_heartbeat_request(CSS_CONN_ENTRY *conn, int *command)
void hb_set_exec_path(char *exec_path)
static pthread_t hb_Master_mon_th
int css_receive_heartbeat_data(CSS_CONN_ENTRY *conn, char *data, int size)
#define er_log_debug(...)
int css_platform_independent_poll(POLL_FD *fds, int num_of_fds, int timeout)
#define HB_NSTATE_TO_BE_MASTER_STR
void hb_set_argv(char **argv)
#define HB_PTYPE_SERVER_STR
int css_send_heartbeat_data(CSS_CONN_ENTRY *conn, const char *data, int size)
UINT64 prm_get_bigint_value(PARAM_ID prm_id)
void er_set(int severity, const char *file_name, const int line_no, int err_id, int num_args,...)
int prm_get_integer_value(PARAM_ID prm_id)
#define HB_NSTATE_MASTER_STR
#define ER_OUT_OF_VIRTUAL_MEMORY
void css_shutdown_conn(CSS_CONN_ENTRY *conn)
#define ER_CSS_PTHREAD_ATTR_SETSCOPE
int prm_get_master_port_id(void)
#define IS_INVALID_SOCKET(socket)
#define HB_NSTATE_UNKNOWN_STR
enum hb_proc_type HB_PROC_TYPE
#define strncpy_bufsize(buf, str)
static char * hb_pack_server_name(const char *server_name, int *name_length, const char *log_path, HB_PROC_TYPE type)
#define HB_NSTATE_TO_BE_SLAVE_STR
int hb_process_init(const char *server_name, const char *log_path, HB_PROC_TYPE type)
void er_set_with_oserror(int severity, const char *file_name, const int line_no, int err_id, int num_args,...)
#define ER_CSS_PTHREAD_ATTR_INIT
int css_send_heartbeat_request(CSS_CONN_ENTRY *conn, int command)
CSS_CONN_ENTRY * css_connect_to_master_server(int master_port_id, const char *server_name, int name_length)
static void error(const char *msg)
int css_readn(SOCKET fd, char *ptr, int nbytes, int timeout)
#define HB_NSTATE_SLAVE_STR
static int hb_create_master_reader(void)
#define HB_NSTATE_REPLICA_STR
enum HB_NODE_STATE HB_NODE_STATE_TYPE
static char hb_Exec_path[PATH_MAX]
const char * hb_process_type_string(int ptype)
#define free_and_init(ptr)
static HBP_PROC_REGISTER * hb_make_set_hbp_register(int type)
bool prm_get_bool_value(PARAM_ID prm_id)
int hb_register_to_master(CSS_CONN_ENTRY *conn, int type)
int hb_process_master_request(void)
#define ER_CSS_PTHREAD_ATTR_SETSTACKSIZE
unsigned int ntohl(unsigned int from)
static CSS_CONN_ENTRY * hb_connect_to_master(const char *server_name, const char *log_path, HB_PROC_TYPE type)
#define HB_PTYPE_APPLYLOGDB_STR
static CSS_CONN_ENTRY * hb_Conn
char exec_path[HB_MAX_SZ_PROC_EXEC_PATH]
static const char * hb_type_to_str(HB_PROC_TYPE type)
void hb_process_term(void)
const char * hb_node_state_string(HB_NODE_STATE_TYPE nstate)
#define THREAD_CALLING_CONVENTION
#define HB_PTYPE_COPYLOGDB_STR
const char * rel_major_release_string(void)
char args[HB_MAX_SZ_PROC_ARGS]