TDengine/source/dnode/vnode/test/tqMetaTest.cpp

280 lines
7 KiB
C++
Raw Normal View History

2021-11-03 10:48:30 +00:00
#include <gtest/gtest.h>
#include <cstring>
#include <iostream>
#include <queue>
#include "tqMetaStore.h"
struct Foo {
int32_t a;
};
2021-12-16 07:04:13 +00:00
int FooSerializer(const void* pObj, STqSerializedHead** ppHead) {
2021-12-17 09:44:36 +00:00
Foo* foo = (Foo*)pObj;
if ((*ppHead) == NULL || (*ppHead)->ssize < sizeof(STqSerializedHead) + sizeof(int32_t)) {
2022-03-25 16:29:53 +00:00
*ppHead = (STqSerializedHead*)taosMemoryRealloc(*ppHead, sizeof(STqSerializedHead) + sizeof(int32_t));
2021-12-16 07:04:13 +00:00
(*ppHead)->ssize = sizeof(STqSerializedHead) + sizeof(int32_t);
2021-11-05 07:42:28 +00:00
}
*(int32_t*)(*ppHead)->content = foo->a;
return (*ppHead)->ssize;
2021-11-03 10:48:30 +00:00
}
2021-12-16 07:04:13 +00:00
const void* FooDeserializer(const STqSerializedHead* pHead, void** ppObj) {
2021-12-17 09:44:36 +00:00
if (*ppObj == NULL) {
2022-03-25 16:29:53 +00:00
*ppObj = taosMemoryRealloc(*ppObj, sizeof(int32_t));
2021-11-03 10:48:30 +00:00
}
Foo* pFoo = *(Foo**)ppObj;
2021-12-17 09:44:36 +00:00
pFoo->a = *(int32_t*)pHead->content;
2021-11-03 10:48:30 +00:00
return NULL;
}
2022-03-25 16:29:53 +00:00
void FooDeleter(void* pObj) { taosMemoryFree(pObj); }
2021-11-03 10:48:30 +00:00
2021-11-10 08:11:47 +00:00
class TqMetaUpdateAppendTest : public ::testing::Test {
2021-12-17 09:44:36 +00:00
protected:
void SetUp() override {
taosRemoveDir(pathName);
pMeta = tqStoreOpen(pathName, FooSerializer, FooDeserializer, FooDeleter, TQ_UPDATE_APPEND);
ASSERT(pMeta);
}
void TearDown() override { tqStoreClose(pMeta); }
STqMetaStore* pMeta;
const char* pathName = "/tmp/tq_test";
2021-11-03 10:48:30 +00:00
};
2021-11-10 08:11:47 +00:00
TEST_F(TqMetaUpdateAppendTest, copyPutTest) {
2021-11-04 02:16:59 +00:00
Foo foo;
foo.a = 3;
tqHandleCopyPut(pMeta, 1, &foo, sizeof(Foo));
2021-12-17 09:44:36 +00:00
Foo* pFoo = (Foo*)tqHandleGet(pMeta, 1);
2021-11-04 02:16:59 +00:00
EXPECT_EQ(pFoo == NULL, true);
2021-11-05 09:48:58 +00:00
tqHandleCommit(pMeta, 1);
2021-12-17 09:44:36 +00:00
pFoo = (Foo*)tqHandleGet(pMeta, 1);
2021-11-05 09:48:58 +00:00
EXPECT_EQ(pFoo->a, 3);
2021-11-04 02:16:59 +00:00
}
2021-11-10 08:11:47 +00:00
TEST_F(TqMetaUpdateAppendTest, persistTest) {
2022-03-25 16:29:53 +00:00
Foo* pFoo = (Foo*)taosMemoryMalloc(sizeof(Foo));
2021-11-03 10:48:30 +00:00
pFoo->a = 2;
2021-11-04 02:16:59 +00:00
tqHandleMovePut(pMeta, 1, pFoo);
2021-11-03 10:48:30 +00:00
Foo* pBar = (Foo*)tqHandleGet(pMeta, 1);
EXPECT_EQ(pBar == NULL, true);
tqHandleCommit(pMeta, 1);
pBar = (Foo*)tqHandleGet(pMeta, 1);
EXPECT_EQ(pBar->a, pFoo->a);
pBar = (Foo*)tqHandleGet(pMeta, 2);
EXPECT_EQ(pBar == NULL, true);
tqStoreClose(pMeta);
2021-12-17 09:44:36 +00:00
pMeta = tqStoreOpen(pathName, FooSerializer, FooDeserializer, FooDeleter, TQ_UPDATE_APPEND);
2021-11-03 10:48:30 +00:00
ASSERT(pMeta);
pBar = (Foo*)tqHandleGet(pMeta, 1);
ASSERT_EQ(pBar != NULL, true);
EXPECT_EQ(pBar->a, 2);
pBar = (Foo*)tqHandleGet(pMeta, 2);
EXPECT_EQ(pBar == NULL, true);
}
2021-11-10 08:11:47 +00:00
TEST_F(TqMetaUpdateAppendTest, uncommittedTest) {
2022-03-25 16:29:53 +00:00
Foo* pFoo = (Foo*)taosMemoryMalloc(sizeof(Foo));
2021-11-03 10:48:30 +00:00
pFoo->a = 3;
2021-11-04 02:16:59 +00:00
tqHandleMovePut(pMeta, 1, pFoo);
2021-11-03 10:48:30 +00:00
2021-12-17 09:44:36 +00:00
pFoo = (Foo*)tqHandleGet(pMeta, 1);
2021-11-03 10:48:30 +00:00
EXPECT_EQ(pFoo == NULL, true);
}
2021-11-10 08:11:47 +00:00
TEST_F(TqMetaUpdateAppendTest, abortTest) {
2022-03-25 16:29:53 +00:00
Foo* pFoo = (Foo*)taosMemoryMalloc(sizeof(Foo));
2021-11-03 10:48:30 +00:00
pFoo->a = 3;
2021-11-04 02:16:59 +00:00
tqHandleMovePut(pMeta, 1, pFoo);
2021-11-03 10:48:30 +00:00
2021-12-17 09:44:36 +00:00
pFoo = (Foo*)tqHandleGet(pMeta, 1);
2021-11-03 10:48:30 +00:00
EXPECT_EQ(pFoo == NULL, true);
tqHandleAbort(pMeta, 1);
2021-12-17 09:44:36 +00:00
pFoo = (Foo*)tqHandleGet(pMeta, 1);
2021-11-03 10:48:30 +00:00
EXPECT_EQ(pFoo == NULL, true);
}
2021-11-05 07:42:28 +00:00
2021-11-10 08:11:47 +00:00
TEST_F(TqMetaUpdateAppendTest, deleteTest) {
2022-03-25 16:29:53 +00:00
Foo* pFoo = (Foo*)taosMemoryMalloc(sizeof(Foo));
2021-11-05 07:42:28 +00:00
pFoo->a = 3;
tqHandleMovePut(pMeta, 1, pFoo);
2021-12-17 09:44:36 +00:00
pFoo = (Foo*)tqHandleGet(pMeta, 1);
2021-11-05 07:42:28 +00:00
EXPECT_EQ(pFoo == NULL, true);
tqHandleCommit(pMeta, 1);
2021-12-17 09:44:36 +00:00
pFoo = (Foo*)tqHandleGet(pMeta, 1);
2021-11-05 07:42:28 +00:00
ASSERT_EQ(pFoo != NULL, true);
EXPECT_EQ(pFoo->a, 3);
tqHandleDel(pMeta, 1);
2021-12-17 09:44:36 +00:00
pFoo = (Foo*)tqHandleGet(pMeta, 1);
2021-11-05 07:42:28 +00:00
ASSERT_EQ(pFoo != NULL, true);
EXPECT_EQ(pFoo->a, 3);
tqHandleCommit(pMeta, 1);
2021-12-17 09:44:36 +00:00
pFoo = (Foo*)tqHandleGet(pMeta, 1);
2021-11-05 07:42:28 +00:00
EXPECT_EQ(pFoo == NULL, true);
2021-11-05 09:17:21 +00:00
tqStoreClose(pMeta);
2021-12-17 09:44:36 +00:00
pMeta = tqStoreOpen(pathName, FooSerializer, FooDeserializer, FooDeleter, TQ_UPDATE_APPEND);
2021-11-05 09:17:21 +00:00
ASSERT(pMeta);
2021-11-05 09:48:58 +00:00
2021-12-17 09:44:36 +00:00
pFoo = (Foo*)tqHandleGet(pMeta, 1);
2021-11-05 09:17:21 +00:00
EXPECT_EQ(pFoo == NULL, true);
2021-11-05 07:42:28 +00:00
}
2021-11-05 09:48:58 +00:00
2021-11-10 08:11:47 +00:00
TEST_F(TqMetaUpdateAppendTest, intxnPersist) {
2022-03-25 16:29:53 +00:00
Foo* pFoo = (Foo*)taosMemoryMalloc(sizeof(Foo));
2021-11-05 09:48:58 +00:00
pFoo->a = 3;
tqHandleMovePut(pMeta, 1, pFoo);
tqHandleCommit(pMeta, 1);
2022-03-25 16:29:53 +00:00
Foo* pBar = (Foo*)taosMemoryMalloc(sizeof(Foo));
2021-11-05 09:48:58 +00:00
pBar->a = 4;
tqHandleMovePut(pMeta, 1, pBar);
Foo* pFoo1 = (Foo*)tqHandleGet(pMeta, 1);
EXPECT_EQ(pFoo1->a, 3);
tqStoreClose(pMeta);
2021-12-17 09:44:36 +00:00
pMeta = tqStoreOpen(pathName, FooSerializer, FooDeserializer, FooDeleter, TQ_UPDATE_APPEND);
2021-11-05 09:48:58 +00:00
ASSERT(pMeta);
pFoo1 = (Foo*)tqHandleGet(pMeta, 1);
EXPECT_EQ(pFoo1->a, 3);
tqHandleCommit(pMeta, 1);
pFoo1 = (Foo*)tqHandleGet(pMeta, 1);
EXPECT_EQ(pFoo1->a, 4);
tqStoreClose(pMeta);
2021-12-17 09:44:36 +00:00
pMeta = tqStoreOpen(pathName, FooSerializer, FooDeserializer, FooDeleter, TQ_UPDATE_APPEND);
2021-11-05 09:48:58 +00:00
ASSERT(pMeta);
pFoo1 = (Foo*)tqHandleGet(pMeta, 1);
EXPECT_EQ(pFoo1->a, 4);
}
2021-11-09 07:16:10 +00:00
2021-11-10 08:11:47 +00:00
TEST_F(TqMetaUpdateAppendTest, multiplePage) {
2022-03-09 16:36:30 +00:00
taosSeedRand(0);
2021-11-09 07:16:10 +00:00
std::vector<int> v;
2021-12-17 09:44:36 +00:00
for (int i = 0; i < 1000; i++) {
2022-03-09 16:36:30 +00:00
v.push_back(taosRand());
2021-11-09 07:16:10 +00:00
Foo foo;
foo.a = v[i];
tqHandleCopyPut(pMeta, i, &foo, sizeof(Foo));
}
2021-12-17 09:44:36 +00:00
for (int i = 0; i < 500; i++) {
2021-11-09 07:16:10 +00:00
tqHandleCommit(pMeta, i);
Foo* pFoo = (Foo*)tqHandleGet(pMeta, i);
ASSERT_EQ(pFoo != NULL, true) << " at idx " << i << "\n";
EXPECT_EQ(pFoo->a, v[i]);
}
tqStoreClose(pMeta);
2021-12-17 09:44:36 +00:00
pMeta = tqStoreOpen(pathName, FooSerializer, FooDeserializer, FooDeleter, TQ_UPDATE_APPEND);
2021-11-09 07:16:10 +00:00
ASSERT(pMeta);
2021-12-17 09:44:36 +00:00
for (int i = 500; i < 1000; i++) {
2021-11-09 07:16:10 +00:00
tqHandleCommit(pMeta, i);
Foo* pFoo = (Foo*)tqHandleGet(pMeta, i);
ASSERT_EQ(pFoo != NULL, true) << " at idx " << i << "\n";
EXPECT_EQ(pFoo->a, v[i]);
}
2021-12-17 09:44:36 +00:00
for (int i = 0; i < 1000; i++) {
2021-11-09 07:16:10 +00:00
Foo* pFoo = (Foo*)tqHandleGet(pMeta, i);
ASSERT_EQ(pFoo != NULL, true) << " at idx " << i << "\n";
EXPECT_EQ(pFoo->a, v[i]);
}
}
2021-11-10 08:11:47 +00:00
TEST_F(TqMetaUpdateAppendTest, multipleRewrite) {
2022-03-09 16:36:30 +00:00
taosSeedRand(0);
2021-11-09 07:16:10 +00:00
std::vector<int> v;
2021-12-17 09:44:36 +00:00
for (int i = 0; i < 1000; i++) {
2022-03-09 16:36:30 +00:00
v.push_back(taosRand());
2021-11-09 07:16:10 +00:00
Foo foo;
foo.a = v[i];
tqHandleCopyPut(pMeta, i, &foo, sizeof(Foo));
}
2021-12-17 09:44:36 +00:00
for (int i = 0; i < 500; i++) {
2021-11-09 07:16:10 +00:00
tqHandleCommit(pMeta, i);
2022-03-09 16:36:30 +00:00
v[i] = taosRand();
2021-11-09 07:16:10 +00:00
Foo foo;
foo.a = v[i];
tqHandleCopyPut(pMeta, i, &foo, sizeof(Foo));
}
2021-12-17 09:44:36 +00:00
for (int i = 500; i < 1000; i++) {
2022-03-09 16:36:30 +00:00
v[i] = taosRand();
2021-11-09 07:16:10 +00:00
Foo foo;
foo.a = v[i];
tqHandleCopyPut(pMeta, i, &foo, sizeof(Foo));
}
2021-12-17 09:44:36 +00:00
for (int i = 0; i < 1000; i++) {
2021-11-09 07:16:10 +00:00
tqHandleCommit(pMeta, i);
}
tqStoreClose(pMeta);
2021-12-17 09:44:36 +00:00
pMeta = tqStoreOpen(pathName, FooSerializer, FooDeserializer, FooDeleter, TQ_UPDATE_APPEND);
2021-11-09 07:16:10 +00:00
ASSERT(pMeta);
2021-12-17 09:44:36 +00:00
for (int i = 500; i < 1000; i++) {
2022-03-09 16:36:30 +00:00
v[i] = taosRand();
2021-11-09 07:16:10 +00:00
Foo foo;
foo.a = v[i];
tqHandleCopyPut(pMeta, i, &foo, sizeof(Foo));
tqHandleCommit(pMeta, i);
}
2021-12-17 09:44:36 +00:00
for (int i = 0; i < 1000; i++) {
2021-11-09 07:16:10 +00:00
Foo* pFoo = (Foo*)tqHandleGet(pMeta, i);
ASSERT_EQ(pFoo != NULL, true) << " at idx " << i << "\n";
EXPECT_EQ(pFoo->a, v[i]);
}
}
2021-11-10 08:11:47 +00:00
TEST_F(TqMetaUpdateAppendTest, dupCommit) {
2022-03-09 16:36:30 +00:00
taosSeedRand(0);
2021-11-09 07:16:10 +00:00
std::vector<int> v;
2021-12-17 09:44:36 +00:00
for (int i = 0; i < 1000; i++) {
2022-03-09 16:36:30 +00:00
v.push_back(taosRand());
2021-11-09 07:16:10 +00:00
Foo foo;
foo.a = v[i];
tqHandleCopyPut(pMeta, i, &foo, sizeof(Foo));
}
2021-12-17 09:44:36 +00:00
for (int i = 0; i < 1000; i++) {
2021-11-09 07:16:10 +00:00
int ret = tqHandleCommit(pMeta, i);
EXPECT_EQ(ret, 0);
ret = tqHandleCommit(pMeta, i);
EXPECT_EQ(ret, -1);
}
2021-12-17 09:44:36 +00:00
for (int i = 0; i < 1000; i++) {
2021-11-09 07:16:10 +00:00
int ret = tqHandleCommit(pMeta, i);
EXPECT_EQ(ret, -1);
}
2021-12-17 09:44:36 +00:00
for (int i = 0; i < 1000; i++) {
2021-11-09 07:16:10 +00:00
Foo* pFoo = (Foo*)tqHandleGet(pMeta, i);
ASSERT_EQ(pFoo != NULL, true) << " at idx " << i << "\n";
EXPECT_EQ(pFoo->a, v[i]);
}
}