/* * hb_create_master_reader () - * return: NO_ERROR or ER_FAILED * * conn(in): */ static int hb_create_master_reader (void) { int rv; pthread_attr_t thread_attr; size_t ts_size; pthread_t master_reader_th; rv = pthread_attr_init (&thread_attr); if (rv != 0) { er_set_with_oserror (ER_ERROR_SEVERITY, ARG_FILE_LINE, ER_CSS_PTHREAD_ATTR_INIT, 0); return ER_CSS_PTHREAD_ATTR_INIT; } rv = pthread_attr_setdetachstate (&thread_attr, PTHREAD_CREATE_DETACHED); if (rv != 0) { er_set_with_oserror (ER_ERROR_SEVERITY, ARG_FILE_LINE, ER_CSS_PTHREAD_ATTR_SETDETACHSTATE, 0); return ER_CSS_PTHREAD_ATTR_SETDETACHSTATE; } #if defined(AIX) /* AIX's pthread is slightly different from other systems. Its performance highly depends on the pthread's scope and * it's related kernel parameters. */ rv = pthread_attr_setscope (&thread_attr, prm_get_bool_value (PRM_ID_PTHREAD_SCOPE_PROCESS) ? PTHREAD_SCOPE_PROCESS : PTHREAD_SCOPE_SYSTEM); #else /* AIX */ rv = pthread_attr_setscope (&thread_attr, PTHREAD_SCOPE_SYSTEM); #endif /* AIX */ if (rv != 0) { er_set_with_oserror (ER_ERROR_SEVERITY, ARG_FILE_LINE, ER_CSS_PTHREAD_ATTR_SETSCOPE, 0); return ER_CSS_PTHREAD_ATTR_SETSCOPE; } #if defined(_POSIX_THREAD_ATTR_STACKSIZE) rv = pthread_attr_getstacksize (&thread_attr, &ts_size); if (ts_size != (size_t) prm_get_bigint_value (PRM_ID_THREAD_STACKSIZE)) { rv = pthread_attr_setstacksize (&thread_attr, prm_get_bigint_value (PRM_ID_THREAD_STACKSIZE)); if (rv != 0) { er_set_with_oserror (ER_ERROR_SEVERITY, ARG_FILE_LINE, ER_CSS_PTHREAD_ATTR_SETSTACKSIZE, 0); return ER_CSS_PTHREAD_ATTR_SETSTACKSIZE; } } #endif /* _POSIX_THREAD_ATTR_STACKSIZE */ rv = pthread_create (&master_reader_th, &thread_attr, hb_thread_master_reader, (void *) NULL); if (rv != 0) { er_set_with_oserror (ER_ERROR_SEVERITY, ARG_FILE_LINE, ER_CSS_PTHREAD_CREATE, 0); return ER_CSS_PTHREAD_CREATE; } return (NO_ERROR); }
/* * logwr_flush_header_page - * * return: * Note: */ void logwr_flush_header_page (void) { PAGEID phy_pageid; PAGEID logical_pageid; int nbytes; if (logwr_Gl.loghdr_pgptr == NULL) { return; } /* flush current archiving status */ logwr_Gl.hdr.nxarv_num = logwr_Gl.last_arv_num; logwr_Gl.hdr.last_deleted_arv_num = logwr_Gl.last_deleted_arv_num; logwr_Gl.hdr.nxarv_pageid = logwr_Gl.last_arv_fpageid; logwr_Gl.hdr.nxarv_phy_pageid = logwr_to_physical_pageid (logwr_Gl.last_arv_fpageid); memcpy (logwr_Gl.loghdr_pgptr->area, &logwr_Gl.hdr, sizeof (logwr_Gl.hdr)); logical_pageid = LOGPB_HEADER_PAGE_ID; phy_pageid = logwr_to_physical_pageid (logical_pageid); /* logwr_Gl.append_vdes is only changed * while starting or finishing or recovering server. * So, log cs is not needed. */ if (fileio_write (NULL, logwr_Gl.append_vdes, logwr_Gl.loghdr_pgptr, phy_pageid, LOG_PAGESIZE) == NULL || (logwr_Gl.mode != LOGWR_MODE_ASYNC && fileio_synchronize (NULL, logwr_Gl.append_vdes, logwr_Gl.active_name)) == NULL_VOLDES) { if (er_errid () == ER_IO_WRITE_OUT_OF_SPACE) { nbytes = ((logwr_Gl.hdr.npages + 1 - logical_pageid) * logwr_Gl.hdr.db_logpagesize); er_set (ER_FATAL_ERROR_SEVERITY, ARG_FILE_LINE, ER_LOG_WRITE_OUT_OF_SPACE, 4, logical_pageid, phy_pageid, logwr_Gl.active_name, nbytes); } else { er_set_with_oserror (ER_FATAL_ERROR_SEVERITY, ARG_FILE_LINE, ER_LOG_WRITE, 3, logical_pageid, phy_pageid, logwr_Gl.active_name); } } /* save last checkpoint pageid */ logwr_Gl.last_chkpt_pageid = logwr_Gl.hdr.chkpt_lsa.pageid; er_log_debug (ARG_FILE_LINE, "logwr_flush_header_page, ha_server_state=%s, ha_file_status=%s\n", css_ha_server_state_string (logwr_Gl.hdr.ha_server_state), logwr_Gl.hdr.ha_file_status == LOG_HA_FILESTAT_SYNCHRONIZED ? "sync" : "unsync"); }
/* * css_tcp_client_open() - * return: * hostname(in): * port(in): */ SOCKET css_tcp_client_open (const char *host_name, int port) { SOCKET fd; fd = css_tcp_client_open_with_retry (host_name, port, true); if (IS_INVALID_SOCKET (fd)) { er_set_with_oserror (ER_ERROR_SEVERITY, ARG_FILE_LINE, ERR_CSS_TCP_CANNOT_CONNECT_TO_MASTER, 1, host_name); } return fd; }
static int set_server_error (int error) { int server_error; switch (error) { case CANT_ALLOC_BUFFER: server_error = ER_NET_CANT_ALLOC_BUFFER; er_set (ER_ERROR_SEVERITY, ARG_FILE_LINE, server_error, 0); break; case RECORD_TRUNCATED: server_error = ER_NET_DATA_TRUNCATED; er_set (ER_ERROR_SEVERITY, ARG_FILE_LINE, server_error, 0); break; case REQUEST_REFUSED: server_error = er_errid (); break; case SERVER_ABORTED: server_error = er_errid (); /* those errors are generated by the net_server_request() * so that do not fall to server crash handling */ switch (server_error) { case ER_DB_NO_MODIFICATIONS: er_set (ER_ERROR_SEVERITY, ARG_FILE_LINE, server_error, 0); return (server_error); case ER_AU_DBA_ONLY: er_set (ER_ERROR_SEVERITY, ARG_FILE_LINE, server_error, 1, ""); return (server_error); } /* no break; fall through */ default: server_error = ER_NET_SERVER_CRASHED; er_set_with_oserror (ER_ERROR_SEVERITY, ARG_FILE_LINE, server_error, 0); break; } er_log_debug (ARG_FILE_LINE, "set_server_error(%d) server_error %d\n", error, server_error); db_Connect_status = DB_CONNECTION_STATUS_NOT_CONNECTED; return (server_error); }