Files
interactive/rcts/rc_cmove/src/dbconnpool.h
T
2026-08-07 17:38:18 +09:00

109 lines
2.5 KiB
C++

/***************************************************************************
Database Connection Pool
-----------------------------------------
begin : 2012/05/13
copyright : (C) 2011 SolutionBox Inc.
author : Service 1 Team
email : svc1@solbox.com
version : 3.1.0
CopyRight(C) 2011 SolutionBox Inc. All Rights reserved.
Redistribution and use in source and binary forms, with or with out
modification, are not permitted in outside of SolutionBox Inc.
***************************************************************************/
#ifndef __DATABASE_CONNECTION_POOL__
#define __DATABASE_CONNECTION_POOL__
class DataBase;
class conndbpool
{
public:
enum POOL_STATUSE
{
POOL_ERR = -1,
POOL_FREE = 0,
POOL_USE = 1
};
public:
conndbpool(databaseinfo info);
virtual ~conndbpool();
int CreatePool( int poolcnt = 4 );
int DestroyPool();
DataBase* GetConnFromPool(int timeout = 10);
void ReleaseConnToPool(DataBase * t, bool success = true);
int SetKeepAliveTimeout(int sec);
void printstatus(string prefixed = "");
int GetFreePoolCnt();
bool IsExit() { return m_exitpool; }
bool IsTimeoutAlive();
bool SendAliveMsg();
void SetDatabaseInfo(databaseinfo info) { m_dbinfo = info; }
databaseinfo GetDatabaseInfo() { return m_dbinfo; }
size_t GetPoolSize() { return m_poolmap.size(); }
// 2014.06.06 dadamin
// 현재 DB 형상 체크
bool SetTargetTableType(DataBase * d);
// 작업할 메타 테이블명
string GetMetaTableName(const char * tranid);
// display_name 컬럼 사용 유무
bool UseDisplayname() { return (m_tabletype == 1); }
private:
static void* KeepPoolAlive(void*);
private:
databaseinfo m_dbinfo;
map<DataBase*, short> m_poolmap;
pthread_mutex_t m_mutex;
bool m_exitpool;
DataBase* m_lastset;
int m_alivetime;
pthread_t m_keepalive;
pthread_cond_t m_alivecond;
pthread_mutex_t m_alivemutex;
// 2014.06.04 dadamin
// -1: unset, 0: t_dav_resource, 1: t_meat_[sp_svc_tran_id]
int m_tabletype;
};
class masterdbpool : public conndbpool
{
public:
static void init(databaseinfo info);
static masterdbpool* getInstance();
static int release();
private:
masterdbpool(databaseinfo info);
~masterdbpool();
private:
static masterdbpool* m_inst;
};
class slavedbpool : public conndbpool
{
public:
static void init(databaseinfo info);
static slavedbpool* getInstance();
static int release();
private:
slavedbpool(databaseinfo info);
~slavedbpool();
private:
static slavedbpool* m_inst;
};
#endif // __DATABASE_CONNECTION_POOL__