diff --git a/src/observer/table/ob_table_session_pool.cpp b/src/observer/table/ob_table_session_pool.cpp index 16a209f72c..0f61134eb9 100644 --- a/src/observer/table/ob_table_session_pool.cpp +++ b/src/observer/table/ob_table_session_pool.cpp @@ -258,7 +258,7 @@ int ObTableApiSessPoolMgr::ObTableApiSessEliminationTask::run_recycle_retired_se /* init session pool - - init key_node_map_ which is a hashmap, key is user_id, value is ObTableApiSessNode* + - init key_node_map_ which is a hashmap, key is ObTableApiCredential.hash_val_, value is ObTableApiSessNode* */ int ObTableApiSessPool::init(int64_t hash_bucket/* = SESS_POOL_DEFAULT_BUCKET_NUM */) { @@ -432,7 +432,7 @@ int ObTableApiSessPool::get_sess_node(uint64_t key, 3.1 if there is no session node val in node list, extend it. struct pool { - map: [user_id0:node1][user_id2:node:2] + map: [key1:node1][key2:node:2] } struct node { @@ -445,7 +445,7 @@ int ObTableApiSessPool::get_sess_info(ObTableApiCredential &credential, ObTableA ObTableApiSessNode *sess_node = nullptr; bool need_extend = false; - if (OB_FAIL(get_sess_node(credential.user_id_, sess_node))) { // first get + if (OB_FAIL(get_sess_node(credential.hash_val_, sess_node))) { // first get if (OB_HASH_NOT_EXIST != ret) { LOG_WARN("fail to get sess node", K(ret), K(credential)); } @@ -455,7 +455,7 @@ int ObTableApiSessPool::get_sess_info(ObTableApiCredential &credential, ObTableA // do nothing } else if (OB_UNLIKELY(OB_HASH_NOT_EXIST == ret) && OB_FAIL(create_and_add_node_safe(credential))) { // not exist, create LOG_WARN("fail to create and add session node", K(ret), K(credential)); - } else if (OB_UNLIKELY(OB_ISNULL(sess_node)) && OB_FAIL(get_sess_node(credential.user_id_, sess_node))) { // get again + } else if (OB_UNLIKELY(OB_ISNULL(sess_node)) && OB_FAIL(get_sess_node(credential.hash_val_, sess_node))) { // get again LOG_WARN("fail to get sess node", K(ret), K(credential)); } else if (OB_UNLIKELY(OB_ISNULL(sess_node))) { ret = OB_ERR_UNEXPECTED; @@ -511,9 +511,9 @@ int ObTableApiSessPool::create_and_add_node_safe(ObTableApiCredential &credentia ObTableApiSessNode *node = nullptr; if (OB_FAIL(create_node_safe(credential, node))) { LOG_WARN("fail to create node", K(ret), K(credential)); - } else if (OB_FAIL(key_node_map_.set_refactored(credential.user_id_, node))) { + } else if (OB_FAIL(key_node_map_.set_refactored(credential.hash_val_, node))) { if (OB_HASH_EXIST != ret) { - LOG_WARN("fail to add sess node to hash map", K(ret), K(credential.user_id_), K(*node)); + LOG_WARN("fail to add sess node to hash map", K(ret), K(credential), K(*node)); } // this node has been set by other thread, free it ObLockGuard guard(lock_); @@ -534,7 +534,7 @@ int ObTableApiSessPool::update_sess(ObTableApiCredential &credential) int ret = OB_SUCCESS; ObTableApiSessNode *node = nullptr; - const uint64_t key = credential.user_id_; + const uint64_t key = credential.hash_val_; if (OB_FAIL(get_sess_node(key, node))) { if (OB_HASH_NOT_EXIST == ret) { // not exist, create if (OB_FAIL(create_and_add_node_safe(credential))) { @@ -556,7 +556,7 @@ int ObTableApiSessPool::replace_sess_node_safe(ObTableApiCredential &credential) int ret = OB_SUCCESS; ObTableApiSessNodeReplaceOp replace_callback(*this, credential); - if (OB_FAIL(key_node_map_.atomic_refactored(credential.user_id_, replace_callback))) { + if (OB_FAIL(key_node_map_.atomic_refactored(credential.hash_val_, replace_callback))) { LOG_WARN("fail to replace session", K(ret), K(credential)); } diff --git a/src/observer/table/ob_table_session_pool.h b/src/observer/table/ob_table_session_pool.h index 00ba0dda48..b98957f84b 100644 --- a/src/observer/table/ob_table_session_pool.h +++ b/src/observer/table/ob_table_session_pool.h @@ -85,7 +85,7 @@ private: class ObTableApiSessPool final { public: - // key is user_id + // key is ObTableApiCredential.hash_val_ typedef common::hash::ObHashMap CacheKeyNodeMap; static const int64_t SESS_POOL_DEFAULT_BUCKET_NUM = 10; // 取决于客户端登录的用户数量 static const int64_t SESS_RETIRE_TIME = 300 * 1000000; // 超过300s未被访问的session会被标记淘汰 diff --git a/unittest/observer/table/test_table_sess_pool.cpp b/unittest/observer/table/test_table_sess_pool.cpp index 60e09b6392..bb43bd9ae3 100644 --- a/unittest/observer/table/test_table_sess_pool.cpp +++ b/unittest/observer/table/test_table_sess_pool.cpp @@ -113,7 +113,7 @@ TEST_F(TestTableSessPool, mgr_get_session) ASSERT_EQ(1, mgr->pool_->key_node_map_.size()); ASSERT_EQ(0, mgr->pool_->retired_nodes_.size_); ObTableApiSessNode *node; - ASSERT_EQ(OB_SUCCESS, mgr->pool_->get_sess_node(mock_cred_->user_id_, node)); + ASSERT_EQ(OB_SUCCESS, mgr->pool_->get_sess_node(mock_cred_->hash_val_, node)); ASSERT_NE(nullptr, node); ASSERT_TRUE(node->sess_lists_.free_list_.is_empty()); ASSERT_TRUE(node->sess_lists_.used_list_.is_empty()); @@ -144,7 +144,7 @@ TEST_F(TestTableSessPool, mgr_update_session) ASSERT_EQ(1, mgr->pool_->key_node_map_.size()); ASSERT_EQ(0, mgr->pool_->retired_nodes_.size_); ObTableApiSessNode *node; - ASSERT_EQ(OB_SUCCESS, mgr->pool_->get_sess_node(mock_cred_->user_id_, node)); + ASSERT_EQ(OB_SUCCESS, mgr->pool_->get_sess_node(mock_cred_->hash_val_, node)); ASSERT_NE(nullptr, node); ASSERT_TRUE(node->sess_lists_.free_list_.is_empty()); ASSERT_TRUE(node->sess_lists_.used_list_.is_empty()); @@ -159,7 +159,7 @@ TEST_F(TestTableSessPool, mgr_update_session) ASSERT_EQ(1, mgr->pool_->key_node_map_.size()); ASSERT_EQ(1, mgr->pool_->retired_nodes_.size_); ASSERT_EQ(node, mgr->pool_->retired_nodes_.get_last()); - ASSERT_EQ(OB_SUCCESS, mgr->pool_->get_sess_node(new_cred->user_id_, node)); + ASSERT_EQ(OB_SUCCESS, mgr->pool_->get_sess_node(new_cred->hash_val_, node)); ASSERT_NE(nullptr, node); ASSERT_TRUE(node->sess_lists_.free_list_.is_empty()); ASSERT_TRUE(node->sess_lists_.used_list_.is_empty()); @@ -172,7 +172,7 @@ TEST_F(TestTableSessPool, mgr_update_session) ASSERT_TRUE(mgr->pool_->is_inited_); ASSERT_EQ(2, mgr->pool_->key_node_map_.size()); ASSERT_EQ(1, mgr->pool_->retired_nodes_.size_); - ASSERT_EQ(OB_SUCCESS, mgr->pool_->get_sess_node(new_cred->user_id_, node)); + ASSERT_EQ(OB_SUCCESS, mgr->pool_->get_sess_node(new_cred->hash_val_, node)); ASSERT_NE(nullptr, node); ASSERT_TRUE(node->sess_lists_.free_list_.is_empty()); ASSERT_TRUE(node->sess_lists_.used_list_.is_empty()); @@ -186,7 +186,7 @@ TEST_F(TestTableSessPool, mgr_destroy) ASSERT_EQ(OB_SUCCESS, mgr->update_sess(*mock_cred_)); ASSERT_NE(nullptr, mgr->pool_); ObTableApiSessNode *node; - ASSERT_EQ(OB_SUCCESS, mgr->pool_->get_sess_node(mock_cred_->user_id_, node)); + ASSERT_EQ(OB_SUCCESS, mgr->pool_->get_sess_node(mock_cred_->hash_val_, node)); mgr->destroy(); ASSERT_FALSE(mgr->is_inited_); ASSERT_EQ(nullptr, mgr->pool_); @@ -203,7 +203,7 @@ TEST_F(TestTableSessPool, mgr_sess_recycle) // add mock val to node ObTableApiSessNode *node; - ASSERT_EQ(OB_SUCCESS, mgr->pool_->get_sess_node(mock_cred_->user_id_, node)); + ASSERT_EQ(OB_SUCCESS, mgr->pool_->get_sess_node(mock_cred_->hash_val_, node)); ObTableApiSessNodeVal val(node); val.is_inited_ = true; ASSERT_EQ(true, node->sess_lists_.free_list_.add_last(&val)); @@ -216,7 +216,7 @@ TEST_F(TestTableSessPool, mgr_sess_recycle) guard.~ObTableApiSessGuard(); // 3min not access - ASSERT_EQ(OB_SUCCESS, mgr->pool_->get_sess_node(mock_cred_->user_id_, node)); + ASSERT_EQ(OB_SUCCESS, mgr->pool_->get_sess_node(mock_cred_->hash_val_, node)); node->last_active_ts_ = node->last_active_ts_ - ObTableApiSessPool::SESS_RETIRE_TIME; mgr->elimination_task_.run_retire_sess_task(); ASSERT_EQ(0, mgr->pool_->key_node_map_.size());