From 3a4714d07c12500a2a9306d2fb672ad473847132 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 19 Jun 2020 16:46:16 +0800 Subject: [PATCH] 1 --- server/imserver/dbengine.cc | 51 +++++++++++++++++++++++++++++++++++++ server/imserver/dbengine.h | 1 + 2 files changed, 52 insertions(+) diff --git a/server/imserver/dbengine.cc b/server/imserver/dbengine.cc index 4d3e5bf..1175025 100644 --- a/server/imserver/dbengine.cc +++ b/server/imserver/dbengine.cc @@ -2,6 +2,7 @@ #include #include +#include #include "dbengine.h" #include "jsondatamgr.h" @@ -31,6 +32,15 @@ void DBEngine::Init() f8::DBPool::Instance()->Init(); f8::DBPool::Instance()->SetThreadNum(16); f8::DBPool::Instance()->on_dberror = OnDBError; + a8::Timer::Instance()->AddRepeatTimer + ( + 1000 * 3 + (rand() % 3000), + a8::XParams(), + [] (const a8::XParams& param) + { + DBEngine::Instance()->RefreshIdx(); + } + ); } void DBEngine::UnInit() @@ -140,3 +150,44 @@ int DBEngine::GetInstanceId(long long crc32_code) } return (crc32_code % mysql_cluster_conf->Size()) + 1; } + +void DBEngine::RefreshIdx() +{ + std::shared_ptr mysql_cluster_conf = + JsonDataMgr::Instance()->GetMysqlClusterConf(); + if (mysql_cluster_conf->Size() <= 0) { + abort(); + } + + auto on_ok = + [] (a8::XParams& param, const f8::DataSet* data_set) + { + long long instance_id = param.sender.GetInt64() + 1; + const std::vector& row = (*data_set)[0]; + long long friend_apply_idx = a8::XValue(row[0]); + long long event_idx = a8::XValue(row[1]); + DBEngine::Instance()->UpdateFriendApplyIdx(instance_id, friend_apply_idx); + DBEngine::Instance()->UpdateEventIdx(instance_id, event_idx); + }; + auto on_error = + [] (a8::XParams& param, int error_code, const std::string& error_msg) + { + }; + + for (int i = 0; i < mysql_cluster_conf->Size(); ++i) { + a8::XObject conn_info = GetConnInfo(i); + DBEngine::Instance()->ExecAsyncQuery + ( + conn_info, + "SELECT MAX(idx) FROM friend_apply UNION " + "SELECT MAX(idx) FROM event;", + { + }, + a8::XParams() + .SetSender(i), + on_ok, + on_error, + i + ); + } +} diff --git a/server/imserver/dbengine.h b/server/imserver/dbengine.h index 2a96e52..5f82a1c 100644 --- a/server/imserver/dbengine.h +++ b/server/imserver/dbengine.h @@ -43,6 +43,7 @@ private: private: int GetInstanceId(long long crc32_code); + void RefreshIdx(); private: std::map friend_apply_idx_hash_;