This commit is contained in:
biosvos
2026-08-07 17:38:18 +09:00
commit 873193a243
9613 changed files with 2755992 additions and 0 deletions
+215
View File
@@ -0,0 +1,215 @@
#include "SyncList.h"
#include "ServiceConfig.h"
#include "Database.h"
#include "DBConnPool.h"
#include "Logger.h"
#include "ReportLog.h"
#include <unistd.h>
#include <string.h>
#define SYNC_FILE_PATH "/user/service/_sync"
// CSyncInfo class
CSyncInfo::CSyncInfo()
{
}
CSyncInfo::~CSyncInfo()
{
}
void CSyncInfo::UnlinkFile()
{
unlink(file_master_name.c_str());
unlink(file_slave_name.c_str());
unlink(file_diff_name.c_str());
if (sync_type < SYNC_TYPE::CHK_ONLY )
unlink(file_sync_name.c_str());
}
// CSyncLinst class
CSyncList::CSyncList()
{
}
CSyncList::~CSyncList()
{
m_list.clear();
}
bool CSyncList::CreateList(CReqMasterData & d)
{
// Sync Info from RCDB
DataBase *db = CMasterDBPool::getInstance()->GetConnFromPool();
if (!db)
{
LOG(LERR, "Failed GetDB.");
return false;
}
ostringstream sql;
sql << "SELECT";
sql << " S.sp_svc_tran_id, S.master_yn, S.linked_sp_svc_tran_id, S.linked_rcts, P.sp_svc_tran_id, P.uri_ignore_case ";
sql << " FROM t_sms_sp_svc_product_sync S ";
sql << " LEFT JOIN t_sms_sp_svc_product P ON(S.sp_svc_tran_id = P.sp_svc_tran_id) ";
if (d.one_service.empty())//d.service_list.empty())
{
// All
}
else
{
string s = d.one_service;
// part
/*
for (list<string>::iterator list_iter = d.service_list.begin();
list_iter != d.service_list.end(); list_iter++)
{
if (list_iter != d.service_list.begin())
s += ",";
s += *list_iter;
}
*/
sql << " WHERE P.sp_svc_tran_id IN (" << s << ")";
}
db->PgDoExec((char*)sql.str().c_str());
if (db->PgResult(DataBase::NOT_CLEAR) < 0)
{
LOG(LERR, " Failed Get Sync List. %s", db->GetErrorMessage().c_str());
db->PgClear();
CMasterDBPool::getInstance()->ReleaseConnToPool(db, false);
return false;
}
for (int i = 0; i < db->GetNoTuples(); ++i)
{
CSyncInfo t;
if (strlen(db->GetValue(i, 4)) <= 0)
{
//LOG(LNOT, "Not Found Service.[tran_id :%s]", db->GetValue(i, 0));
CReportLog rlog;
if (rlog.Init(CServiceConfig::GetInstance()->GetLogPath()))
{
rlog.Write("NOT", "[%s] [Not Found Sync Service in Product Table.[tran_id :%s]]", PROG_NAME, db->GetValue(i, 0));
}
continue;
}
// master
if (strcmp(db->GetValue(i, 1), "Y") == 0)
{
t.uri_ignore_case = db->GetValue(i, 5);
t.start_time = d.start_time;
t.end_time = d.end_time;
t.sync_type = d.sync_type;
t.sync_master = db->GetValue(i, 0);
t.sync_slave = db->GetValue(i, 2);
t.sync_rcts = db->GetValue(i, 3);
GenFileName(t);
m_list.push_back(t);
}
}
db->PgClear();
CMasterDBPool::getInstance()->ReleaseConnToPool(db);
if (m_list.empty())
{
LOG(LWAR, "Empty Sync List.");
return false;
}
return true;
}
bool CSyncList::CreateList(CReqSlaveData & d)
{
CSyncInfo i;
CreateList((CReqServiceData*)&d, i);
i.sync_master = d.master;
i.sync_slave = d.slave;
GenFileName(i);
m_list.push_back(i);
return true;
}
bool CSyncList::CreateList(CReqSyncData & d)
{
CSyncInfo i;
CreateList((CReqServiceData*)&d, i);
i.sync_master = d.master;
i.sync_slave = d.slave;
GenFileName(i);
m_list.push_back(i);
return true;
}
CSyncInfo CSyncList::Pop()
{
CSyncInfo r = m_list.front();
m_list.pop_front();
return r;
}
bool CSyncList::CreateList(const CReqServiceData * d, CSyncInfo & i)
{
i.start_time = d->start_time;
i.end_time = d->end_time;
i.sync_type = d->sync_type;
return true;
}
void CSyncList::GenFileName(CSyncInfo & i)
{
ostringstream tmp;
//Source file
// - diff 대상 파일
// - source_(master)tran_id_starttime_endtime_TreadID.(master / slave)
tmp.str("");
tmp << SYNC_FILE_PATH << "/source_" << i.sync_master << "_" << i.sync_slave << i.sync_rcts << "_";
tmp << i.start_time << "_" << i.end_time << "_" << pthread_self() << ".master";
i.file_master_name = tmp.str();
tmp.str("");
tmp << SYNC_FILE_PATH << "/source_" << i.sync_master << "_" << i.sync_slave << i.sync_rcts << "_";
tmp << i.start_time << "_" << i.end_time << "_" << pthread_self() << ".slave";
i.file_slave_name = tmp.str();
//Diff file
// - Source data 비교한 결과
// - diff_(master)tran_id_starttime_endtime_TreadID
tmp.str("");
tmp << SYNC_FILE_PATH << "/diff_" << i.sync_master << "_" << i.sync_slave << i.sync_rcts << "_";
tmp << i.start_time << "_" << i.end_time << "_" << pthread_self() ;
i.file_diff_name = tmp.str();
//Sync file
//- 동기(이관) 대상 파일
//- sync_(master)tran_id_starttime_endtime_TreadID
tmp.str("");
tmp << SYNC_FILE_PATH << "/sync_" << i.sync_master << "_" << i.sync_slave << i.sync_rcts << "_";
tmp << i.start_time << "_" << i.end_time << "_" << pthread_self();
i.file_sync_name = tmp.str();
}