33 #include <sys/types.h> 59 static int shm_id_cmp_func (
void *key1,
void *key2);
60 static int shm_info_assign_func (
T_LIST * node,
void *key,
void *value);
61 static char *shm_id_to_name (
int shm_key);
98 HANDLE hMapObject =
NULL;
102 shm_name = shm_id_to_name (shm_key);
106 dwAccessRight = FILE_MAP_READ;
110 dwAccessRight = FILE_MAP_WRITE;
113 hMapObject = OpenFileMapping (dwAccessRight,
FALSE,
116 if (hMapObject ==
NULL)
122 lpvMem = MapViewOfFile (hMapObject,
129 CloseHandle (hMapObject);
133 link_list_add (&shm_id_list_header, (
void *) lpvMem, (
void *) hMapObject, shm_info_assign_func);
149 mid = shmget (shm_key, 0,
SHMODE);
156 p = shmat (mid, (
char *) 0, ((shm_mode ==
SHM_MODE_ADMIN) ? 0 : SHM_RDONLY));
157 if (p == (
void *) -1)
207 LPVOID lpvMem =
NULL;
208 HANDLE hMapObject =
NULL;
211 PSID pEveryoneSID =
NULL;
212 PSID pAdminSID =
NULL;
214 PSECURITY_DESCRIPTOR pSD =
NULL;
215 EXPLICIT_ACCESS ea[2];
216 SID_IDENTIFIER_AUTHORITY SIDAuthWorld = SECURITY_WORLD_SID_AUTHORITY;
217 SID_IDENTIFIER_AUTHORITY SIDAuthNT = SECURITY_NT_AUTHORITY;
218 SECURITY_ATTRIBUTES sa;
221 if (!AllocateAndInitializeSid (&SIDAuthWorld, 1, SECURITY_WORLD_RID, 0, 0, 0, 0, 0, 0, 0, &pEveryoneSID))
227 memset (ea,
'\0', 2 *
sizeof (EXPLICIT_ACCESS));
228 ea[0].grfAccessPermissions = GENERIC_READ;
229 ea[0].grfAccessMode = SET_ACCESS;
230 ea[0].grfInheritance = NO_INHERITANCE;
231 ea[0].Trustee.TrusteeForm = TRUSTEE_IS_SID;
232 ea[0].Trustee.TrusteeType = TRUSTEE_IS_WELL_KNOWN_GROUP;
233 ea[0].Trustee.ptstrName = (LPTSTR) pEveryoneSID;
236 if (!AllocateAndInitializeSid
237 (&SIDAuthNT, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, &pAdminSID))
244 ea[1].grfAccessPermissions = GENERIC_ALL;
245 ea[1].grfAccessMode = SET_ACCESS;
246 ea[1].grfInheritance = NO_INHERITANCE;
247 ea[1].Trustee.TrusteeForm = TRUSTEE_IS_SID;
248 ea[1].Trustee.TrusteeType = TRUSTEE_IS_GROUP;
249 ea[1].Trustee.ptstrName = (LPTSTR) pAdminSID;
252 dwRes = SetEntriesInAcl (2, ea,
NULL, &pACL);
253 if (ERROR_SUCCESS != dwRes)
259 pSD = (PSECURITY_DESCRIPTOR) LocalAlloc (LPTR, SECURITY_DESCRIPTOR_MIN_LENGTH);
266 if (!InitializeSecurityDescriptor (pSD, SECURITY_DESCRIPTOR_REVISION))
272 if (!SetSecurityDescriptorDacl (pSD,
TRUE, pACL,
FALSE))
278 sa.nLength =
sizeof (SECURITY_ATTRIBUTES);
279 sa.lpSecurityDescriptor = pSD;
280 sa.bInheritHandle =
FALSE;
282 shm_name = shm_id_to_name (shm_key);
284 hMapObject = CreateFileMapping (INVALID_HANDLE_VALUE, &sa, PAGE_READWRITE, 0, size, shm_name);
286 if (hMapObject ==
NULL)
291 if (GetLastError () == ERROR_ALREADY_EXISTS)
293 CloseHandle (hMapObject);
297 lpvMem = MapViewOfFile (hMapObject, FILE_MAP_WRITE, 0, 0, 0);
301 CloseHandle (hMapObject);
305 link_list_add (&shm_id_list_header, (
void *) lpvMem, (
void *) hMapObject, shm_info_assign_func);
312 FreeSid (pEveryoneSID);
339 if (size <= 0 || shm_key <= 0)
342 mid = shmget (shm_key, size, IPC_CREAT | IPC_EXCL |
SHMODE);
346 p = shmat (mid, (
char *) 0, 0);
348 if (p == (
void *) -1)
398 mid = shmget (shm_key, 0,
SHMODE);
405 if (shmctl (mid, IPC_RMID, 0) == -1)
420 unsigned char ip_addr[4];
438 shm_br->
magic = uw_shm_get_magic_number ();
449 if (acl_file !=
NULL)
454 for (i = 0; i < br_num; i++)
458 if (br_info[i].shard_flag ==
OFF)
480 short proxy_id, shard_id, shard_cas_id;
485 if (shm_as_p ==
NULL)
516 shm_as_p->as_port = br_info_p->appl_server_port;
552 as_info_p = &(shm_as_p->
as_info[as_index]);
570 for (proxy_id = 0; proxy_id < shm_proxy_p->
num_proxy; proxy_id++)
574 for (shard_id = 0; shard_id < proxy_info_p->
num_shard_conn; shard_id++)
576 shard_info_p = &proxy_info_p->
shard_info[shard_id];
581 for (shard_cas_id = 0; shard_cas_id < shard_info_p->
max_appl_server; shard_cas_id++)
595 if (shard_cas_id < shard_info_p->min_appl_server)
647 as_info_p->
as_id = as_index;
691 if (hMapObject ==
NULL)
695 CloseHandle (hMapObject);
708 uw_shm_get_magic_number ()
716 shm_id_cmp_func (
void *key1,
void *key2)
724 shm_info_assign_func (
T_LIST * node,
void *key,
void *value)
732 shm_id_to_name (
int shm_key)
734 static char shm_name[32];
736 sprintf (shm_name,
"Global\\v3mapfile%d", shm_key);
747 if (gethostname (hostname,
sizeof (hostname)) < 0)
749 fprintf (stderr,
"gethostname error\n");
752 if ((hp = gethostbyname (hostname)) ==
NULL)
754 fprintf (stderr,
"unknown host : %s\n", hostname);
757 memcpy ((
void *) ip_addr, (
void *) hp->h_addr_list[0], 4);
765 bs_log_msg (LPTSTR lpszMsg)
767 char lpDisplayBuf[4096];
768 sprintf (lpDisplayBuf,
"%s", lpszMsg);
769 MessageBox (
NULL, (LPCTSTR) lpDisplayBuf, TEXT (
"Error"), MB_OK);
773 bs_last_error_msg (LPTSTR lpszFunction)
779 dw = GetLastError ();
780 FormatMessage (FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, dw,
781 MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) & lpMsgBuf, 0,
NULL);
783 (LPVOID) LocalAlloc (LMEM_ZEROINIT,
784 (lstrlen ((LPCTSTR) lpMsgBuf) + lstrlen ((LPCTSTR) lpszFunction) + 40) *
sizeof (TCHAR));
785 sprintf ((LPTSTR) lpDisplayBuf,
"%s failed with error %d: %s", lpszFunction, dw, lpMsgBuf);
786 MessageBox (
NULL, (LPCTSTR) lpDisplayBuf, TEXT (
"Error"), MB_OK);
787 LocalFree (lpMsgBuf);
788 LocalFree (lpDisplayBuf);
792 #if defined (WINDOWS) 794 uw_sem_open (
char *sem_name, HANDLE * sem_handle)
798 new_handle = OpenMutex (SYNCHRONIZE,
FALSE, sem_name);
799 if (new_handle ==
NULL)
806 *sem_handle = new_handle;
817 sem_handle = CreateMutex (
NULL,
FALSE, sem_name);
818 if (sem_handle ==
NULL && GetLastError () == ERROR_ALREADY_EXISTS)
820 sem_handle = OpenMutex (SYNCHRONIZE,
FALSE, sem_name);
823 if (sem_handle ==
NULL)
836 return sem_init (sem, 1, 1);
840 #if defined (WINDOWS) 847 if (uw_sem_open (sem_name, &sem_handle) != 0)
852 dwWaitResult = WaitForSingleObject (sem_handle, INFINITE);
853 switch (dwWaitResult)
869 return sem_wait (sem);
873 #if defined (WINDOWS) 879 if (uw_sem_open (sem_name, &sem_handle) != 0)
884 if (ReleaseMutex (sem_handle) != 0)
895 return sem_post (sem);
899 #if defined (WINDOWS) 905 if (uw_sem_open (sem_name, &sem_handle) != 0)
910 if (sem_handle !=
NULL && CloseHandle (sem_handle) != 0)
921 return sem_destroy (sem);
928 snprintf (access_log_file, len,
"%s/%s.access", access_log_path, broker_name);
934 snprintf (access_log_file, len,
"%s/%s.err", error_log_path, broker_name);
#define SLEEP_MILISEC(sec, msec)
int long_transaction_time
INT64 num_long_transactions
char jdbc_cache_only_hint
char database_name[SRV_CON_DBNAME_SIZE]
int link_list_node_delete(T_LIST **cur_head, void *key, int(*cmp_func)(void *, void *), void(*node_dealloc)(T_LIST *))
struct t_broker_info T_BROKER_INFO
#define APPL_SERVER_CAS_MYSQL_NAME
T_MAX_HEAP_NODE job_queue[JOB_QUEUE_MAX_SIZE+1]
int max_prepared_stmt_count
char proxy_log_dir[CONF_LOG_FILE_LEN]
T_PROXY_INFO proxy_info[MAX_PROXY_NUM]
char db_name[MAX_DBNAME_LENGTH]
int proxy_conn_wait_timeout
T_SHARD_CONN shard_conn[MAX_SHARD_CONN]
char error_log_file[CONF_LOG_FILE_LEN]
char port_name[SHM_APPL_SERVER_NAME_MAX]
#define APPL_SERVER_CAS_MYSQL51_NAME
int advance_activate_flag
int link_list_add(T_LIST **cur_head, void *add_key, void *add_val, int(*assign_func)(T_LIST *, void *, void *))
int max_num_delayed_hosts_lookup
char broker_name[BROKER_NAME_LEN]
static T_BROKER_INFO * br_info_p
int uw_sem_post(sem_t *sem)
#define UW_SET_ERROR_CODE(code, os_errno)
int proxy_conn_wait_timeout
static T_SHM_PROXY * shm_proxy_p
char slow_log_dir[CONF_LOG_FILE_LEN]
char proxy_log_dir[CONF_LOG_FILE_LEN]
int unusable_databases_cnt[PAIR_LIST]
int mysql_keepalive_interval
int uw_sem_init(sem_t *sem)
char database_user[SRV_CON_DBUSER_SIZE]
#define LINK_LIST_FIND_VALUE(VALUE, HEAD, KEY, KEY_CMP_FUNC)
void ut_get_broker_port_name(char *port_name, char *broker_name, int len)
INT64 num_queries_processed
char db_host[MAX_CONN_INFO_LENGTH]
T_SHARD_INFO shard_info[SHARD_INFO_SIZE_LIMIT]
unsigned char my_ip_addr[4]
int appl_server_hard_limit
char broker_name[BROKER_NAME_LEN]
int appl_server_hard_limit
char db_user[SRV_CON_DBUSER_SIZE]
char jdbc_cache_only_hint
char db_password[SRV_CON_DBPASSWD_SIZE]
char cci_default_autocommit
#define APPL_SERVER_CAS_MYSQL
#define APPL_SERVER_CAS_ORACLE
static void broker_shm_set_as_info(T_SHM_APPL_SERVER *shm_appl, T_APPL_SERVER_INFO *as_info_p, T_BROKER_INFO *br_info_p, int as_index)
#define APPL_SERVER_CAS_ORACLE_NAME
int long_transaction_time
static const char * get_appl_server_name(int appl_server_type)
char db_password[SRV_CON_DBPASSWD_SIZE]
T_SHM_SHARD_USER shm_shard_user
char log_dir[CONF_LOG_FILE_LEN]
int mysql_keepalive_interval
char database_passwd[SRV_CON_DBPASSWD_SIZE]
INT64 num_connect_requests
char cci_default_autocommit
static void get_access_log_file_name(char *access_log_file, char *access_log_path, char *broker_name, int len)
void uw_shm_detach(void *p)
char stripped_column_name
enum t_shm_mode T_SHM_MODE
int uw_shm_destroy(int shm_key)
time_t transaction_start_time
int max_prepared_stmt_count
T_SHM_SHARD_USER * shm_user_p
#define strncpy_bufsize(buf, str)
#define SHM_PROXY_NAME_MAX
char db_conn_info[MAX_CONN_INFO_LENGTH]
INT64 num_transactions_processed
static T_SHM_APPL_SERVER * shm_appl
char err_log_dir[CONF_LOG_FILE_LEN]
char access_log_file[CONF_LOG_FILE_LEN]
T_SHM_SHARD_CONN shm_shard_conn
char database_host[CUB_MAXHOSTNAMELEN]
#define APPL_SERVER_CAS_NAME
char preferred_hosts[BROKER_INFO_NAME_MAX]
static T_SHM_BROKER * shm_br
T_PROXY_INFO * proxy_info_p
int max_num_delayed_hosts_lookup
INT64 num_requests_received
char db_connection_file[BROKER_INFO_PATH_MAX]
char preferred_hosts[SHM_APPL_SERVER_NAME_MAX]
T_SHARD_USER shard_user[1]
char name[BROKER_NAME_LEN]
char error_log_file[CONF_LOG_FILE_LEN]
char appl_server_name[APPL_SERVER_NAME_MAX_SIZE]
T_SHM_APPL_SERVER * broker_shm_initialize_shm_as(T_BROKER_INFO *br_info_p, T_SHM_PROXY *shm_proxy_p)
T_APPL_SERVER_INFO as_info[APPL_SERVER_NUM_LIMIT]
struct t_shm_broker T_SHM_BROKER
static void get_error_log_file_name(char *access_log_file, char *error_log_path, char *broker_name, int len)
#define CONF_LOG_FILE_LEN
T_SHM_BROKER * broker_shm_initialize_shm_broker(int master_shm_id, T_BROKER_INFO *br_info, int br_num, int acl_flag, char *acl_file)
char access_log_file[CONF_LOG_FILE_LEN]
int uw_sem_wait(sem_t *sem)
#define APPL_SERVER_CAS_MYSQL51
static void shard_shm_set_shard_conn_info(T_SHM_APPL_SERVER *shm_as_p, T_SHM_PROXY *shm_proxy_p)
char stripped_column_name
char db_user[SRV_CON_DBUSER_SIZE]
T_SHM_APPL_SERVER * shm_as_p
void * uw_shm_open(int shm_key, int which_shm, T_SHM_MODE shm_mode)
char slow_log_dir[CONF_LOG_FILE_LEN]
#define CUB_MAXHOSTNAMELEN
T_SHM_SHARD_CONN * shm_conn_p
char log_dir[CONF_LOG_FILE_LEN]
T_SHARD_CONN_INFO shard_conn_info[SHARD_INFO_SIZE_LIMIT]
char err_log_dir[CONF_LOG_FILE_LEN]
char access_control_file[SHM_BROKER_PATH_MAX]
static int get_host_ip(unsigned char *ip_addr)
INT64 num_connect_rejected
char db_connection_file[BROKER_INFO_PATH_MAX]
#define UW_ER_SHM_OPEN_MAGIC
int uw_sem_destroy(sem_t *sem)
char db_name[MAX_DBNAME_LENGTH]
void * uw_shm_create(int shm_key, int size, int which_shm)