[FEAT MERGE] [OBKV] support TTL

Co-authored-by: IHEII <602280108@qq.com>
This commit is contained in:
shenyunlong.syl
2023-09-04 01:10:36 +00:00
committed by ob-robot
parent 464ba63de9
commit b60e4f8d97
133 changed files with 12634 additions and 725 deletions

View File

@ -45,6 +45,22 @@ class CallBack
HashValue v_;
};
class Predicate
{
public:
bool operator () (HashMapPair<HashKey, HashValue> &v)
{
return v.second >= min_value_;
};
void set_min_value(HashValue v)
{
min_value_ = v;
};
private:
HashValue min_value_;
};
TEST(TestObHashMap, create)
{
ObHashMap<HashKey, HashValue> hm;
@ -274,6 +290,60 @@ TEST(TestObHashMap, atomic)
EXPECT_EQ(value_update, value_tmp);
}
TEST(TestObHashMap, set_or_update)
{
ObHashMap<HashKey, HashValue> hm;
uint64_t key = 1;
uint64_t value = 100;
CallBack callback;
HashValue value_tmp;
// 没有create
EXPECT_EQ(OB_NOT_INIT, hm.set_or_update(key, value, callback));
hm.create(cal_next_prime(gHashItemNum), ObModIds::OB_HASH_BUCKET);
callback.set_v(value);
EXPECT_EQ(OB_HASH_NOT_EXIST, hm.get_refactored(key, value_tmp));
EXPECT_EQ(OB_SUCCESS, hm.set_or_update(key, value, callback));
EXPECT_EQ(OB_SUCCESS, hm.get_refactored(key, value_tmp));
EXPECT_EQ(value, value_tmp);
uint64_t value_update = 3000;
callback.set_v(value_update);
EXPECT_EQ(OB_SUCCESS, hm.set_or_update(key, value, callback));
EXPECT_EQ(OB_SUCCESS, hm.get_refactored(key, value_tmp));
EXPECT_EQ(value_update, value_tmp);
}
TEST(TestObHashMap, erase_if)
{
ObHashMap<HashKey, HashValue> hm;
uint64_t key = 1;
uint64_t value = 100;
Predicate pred;
HashValue value_tmp;
bool is_erased = true;
// 没有create
EXPECT_EQ(OB_NOT_INIT, hm.erase_if(key, pred, is_erased));
hm.create(cal_next_prime(gHashItemNum), ObModIds::OB_HASH_BUCKET);
pred.set_min_value(value + 1);
EXPECT_EQ(OB_HASH_NOT_EXIST, hm.get_refactored(key, value_tmp));
EXPECT_EQ(OB_SUCCESS, hm.set_refactored(key, value));
EXPECT_EQ(OB_SUCCESS, hm.erase_if(key, pred, is_erased, &value_tmp));
EXPECT_EQ(false, is_erased);
EXPECT_EQ(OB_SUCCESS, hm.get_refactored(key, value_tmp));
EXPECT_EQ(value, value_tmp);
pred.set_min_value(value);
value_tmp = 0;
EXPECT_EQ(OB_SUCCESS, hm.erase_if(key, pred, is_erased, &value_tmp));
EXPECT_EQ(true, is_erased);
EXPECT_EQ(value, value_tmp);
EXPECT_EQ(OB_HASH_NOT_EXIST, hm.get_refactored(key, value_tmp));
}
struct GAllocator
{
void *alloc(const int64_t sz)