diff --git a/server/imserver/dbengine.cc b/server/imserver/dbengine.cc index d280162..edbb3f7 100644 --- a/server/imserver/dbengine.cc +++ b/server/imserver/dbengine.cc @@ -83,7 +83,8 @@ a8::XObject DBEngine::GetConnInfo(const std::string& data) a8::XObject DBEngine::GetConnInfo(long long data) { - std::shared_ptr mysql_cluster_conf = JsonDataMgr::Instance()->GetMysqlClusterConf(); + std::shared_ptr mysql_cluster_conf = + JsonDataMgr::Instance()->GetMysqlClusterConf(); if (mysql_cluster_conf->Size() <= 0) { abort(); } @@ -93,22 +94,49 @@ a8::XObject DBEngine::GetConnInfo(long long data) void DBEngine::UpdateFriendApplyIdx(long long crc32_code, long long new_idx) { - friend_apply_idx_hash_[crc32_code] = new_idx; + if (GetFriendApplyCurrIdx(crc32_code) < new_idx) { + friend_apply_idx_hash_[GetInstanceId(crc32_code)] = new_idx; + } } long long DBEngine::GetFriendApplyCurrIdx(long long crc32_code) { - auto itr = friend_apply_idx_hash_.find(crc32_code); + auto itr = friend_apply_idx_hash_.find(GetInstanceId(crc32_code)); return itr != friend_apply_idx_hash_.end() ? itr->second : 0; } void DBEngine::UpdateGroupApplyIdx(long long crc32_code, long long new_idx) { - group_apply_idx_hash_[crc32_code] = new_idx; + if (GetGroupApplyCurrIdx(crc32_code) < new_idx) { + group_apply_idx_hash_[GetInstanceId(crc32_code)] = new_idx; + } } long long DBEngine::GetGroupApplyCurrIdx(long long crc32_code) { - auto itr = group_apply_idx_hash_.find(crc32_code); + auto itr = group_apply_idx_hash_.find(GetInstanceId(crc32_code)); return itr != group_apply_idx_hash_.end() ? itr->second : 0; } + +long long DBEngine::GetEventCurrIdx(long long crc32_code) +{ + auto itr = event_idx_hash_.find(GetInstanceId(crc32_code)); + return itr != event_idx_hash_.end() ? itr->second : 0; +} + +void DBEngine::UpdateEventIdx(long long crc32_code, long long new_idx) +{ + if (GetEventCurrIdx(crc32_code) < new_idx) { + event_idx_hash_[crc32_code] = new_idx; + } +} + +int DBEngine::GetInstanceId(long long crc32_code) +{ + std::shared_ptr mysql_cluster_conf = + JsonDataMgr::Instance()->GetMysqlClusterConf(); + if (mysql_cluster_conf->Size() <= 0) { + abort(); + } + return crc32_code % mysql_cluster_conf->Size(); +} diff --git a/server/imserver/dbengine.h b/server/imserver/dbengine.h index 677c899..2a96e52 100644 --- a/server/imserver/dbengine.h +++ b/server/imserver/dbengine.h @@ -34,13 +34,19 @@ class DBEngine : public a8::Singleton long long GetFriendApplyCurrIdx(long long crc32_code); long long GetGroupApplyCurrIdx(long long crc32_code); + long long GetEventCurrIdx(long long crc32_code); private: void UpdateFriendApplyIdx(long long crc32_code, long long new_idx); void UpdateGroupApplyIdx(long long crc32_code, long long new_idx); + void UpdateEventIdx(long long crc32_code, long long new_idx); + +private: + int GetInstanceId(long long crc32_code); private: std::map friend_apply_idx_hash_; std::map group_apply_idx_hash_; + std::map event_idx_hash_; };