diff --git a/source/libs/tdb/test/tdbPageFlushTest.cpp b/source/libs/tdb/test/tdbPageFlushTest.cpp index 6aa69b4b1d..170a28af76 100644 --- a/source/libs/tdb/test/tdbPageFlushTest.cpp +++ b/source/libs/tdb/test/tdbPageFlushTest.cpp @@ -357,182 +357,14 @@ TEST(TdbPageFlushTest, TbRestoreTest2) { // Close Env tdbClose(pEnv); - - // exit in the middle of page flushing -} - -TEST(TdbPageFlushTest, DISABLED_TbRestoreTest3) { - // TEST(TdbPageFlushTest, TbRestoreTest3) { - // open db - - // complete the inserting after journal restoring - - // tranversing the completed db - - // close db - - // reopen for tranvering again - // open Env - int const pageSize = 4096; - int const pageNum = 64; - TDB *pEnv = openEnv("tdb", pageSize, pageNum); - GTEST_ASSERT_NE(pEnv, nullptr); - - // open db - TTB *pDb = NULL; - tdb_cmpr_fn_t compFunc = tKeyCmpr; - // int ret = tdbTbOpen("ofp_insert.db", -1, -1, compFunc, pEnv, &pDb, 0); - int ret = tdbTbOpen("ofp_insert.db", 12, -1, compFunc, pEnv, &pDb, 0); - GTEST_ASSERT_EQ(ret, 0); - - // generate value payload - // char val[((4083 - 4 - 3 - 2) + 1) * 100]; // pSize(4096) - amSize(1) - pageHdr(8) - footerSize(4) - char val[32605]; - int valLen = sizeof(val) / sizeof(val[0]); - generateBigVal(val, valLen); - - { // Query the data - void *pVal = NULL; - int vLen; - - // char const *key = "key1"; - char const *key = "key123456789"; - ret = tdbTbGet(pDb, key, strlen(key), &pVal, &vLen); - ASSERT(ret == 0); - GTEST_ASSERT_EQ(ret, 0); - - GTEST_ASSERT_EQ(vLen, valLen); - GTEST_ASSERT_EQ(memcmp(val, pVal, vLen), 0); - - tdbFree(pVal); - } - - // Close a database - tdbTbClose(pDb); - - // Close Env - tdbClose(pEnv); } // TEST(TdbPageFlushTest, DISABLED_TbRestoreTest3) { TEST(TdbPageFlushTest, TbRestoreTest3) { - // delete db with page flushing - - // exit in the middle of page flushing -} - -TEST(TdbPageFlushTest, DISABLED_TbRestoreTest4) { - // TEST(TdbPageFlushTest, TbRestoreTest4) { - // open db - - // complete the deleting after journal restoring - - // tranversing the deleted db - - // close db - - // reopen for tranvering again - // open Env - int const pageSize = 4096; - int const pageNum = 64; - TDB *pEnv = openEnv("tdb", pageSize, pageNum); - GTEST_ASSERT_NE(pEnv, nullptr); - - // open db - TTB *pDb = NULL; - tdb_cmpr_fn_t compFunc = tKeyCmpr; - // int ret = tdbTbOpen("ofp_insert.db", -1, -1, compFunc, pEnv, &pDb, 0); - int ret = tdbTbOpen("ofp_insert.db", 12, -1, compFunc, pEnv, &pDb, 0); - GTEST_ASSERT_EQ(ret, 0); - - // generate value payload - // char val[((4083 - 4 - 3 - 2) + 1) * 100]; // pSize(4096) - amSize(1) - pageHdr(8) - footerSize(4) - char val[32605]; - int valLen = sizeof(val) / sizeof(val[0]); - generateBigVal(val, valLen); - - { // Query the data - void *pVal = NULL; - int vLen; - - // char const *key = "key1"; - char const *key = "key123456789"; - ret = tdbTbGet(pDb, key, strlen(key), &pVal, &vLen); - ASSERT(ret == 0); - GTEST_ASSERT_EQ(ret, 0); - - GTEST_ASSERT_EQ(vLen, valLen); - GTEST_ASSERT_EQ(memcmp(val, pVal, vLen), 0); - - tdbFree(pVal); - } - - // commit current transaction - // tdbCommit(pEnv, txn); - // tdbPostCommit(pEnv, txn); - - // Close a database - tdbTbClose(pDb); - - // Close Env - tdbClose(pEnv); - clearDb("tdb"); -} -TEST(TdbPageFlushTest, DISABLED_TbInsertTest) { - // TEST(TdbPageFlushTest, TbInsertTest) { - clearDb("tdb"); - insertOfp(); -} - -TEST(TdbPageFlushTest, DISABLED_TbGetTest) { - // TEST(TdbPageFlushTest, TbGetTest) { - clearDb("tdb"); - insertOfp(); - - // open Env - int const pageSize = 4096; - int const pageNum = 64; - TDB *pEnv = openEnv("tdb", pageSize, pageNum); - GTEST_ASSERT_NE(pEnv, nullptr); - - // open db - TTB *pDb = NULL; - tdb_cmpr_fn_t compFunc = tKeyCmpr; - // int ret = tdbTbOpen("ofp_insert.db", -1, -1, compFunc, pEnv, &pDb, 0); - int ret = tdbTbOpen("ofp_insert.db", 12, -1, compFunc, pEnv, &pDb, 0); - GTEST_ASSERT_EQ(ret, 0); - - // generate value payload - // char val[((4083 - 4 - 3 - 2) + 1) * 100]; // pSize(4096) - amSize(1) - pageHdr(8) - footerSize(4) - char val[32605]; - int valLen = sizeof(val) / sizeof(val[0]); - generateBigVal(val, valLen); - - { // Query the data - void *pVal = NULL; - int vLen; - - // char const *key = "key1"; - char const *key = "key123456789"; - ret = tdbTbGet(pDb, key, strlen(key), &pVal, &vLen); - ASSERT(ret == 0); - GTEST_ASSERT_EQ(ret, 0); - - GTEST_ASSERT_EQ(vLen, valLen); - GTEST_ASSERT_EQ(memcmp(val, pVal, vLen), 0); - - tdbFree(pVal); - } -} - -TEST(TdbPageFlushTest, DISABLED_TbDeleteTest) { - // TEST(TdbPageFlushTest, TbDeleteTest) { int ret = 0; - taosRemoveDir("tdb"); - // open Env int const pageSize = 4096; int const pageNum = 64; @@ -542,6 +374,7 @@ TEST(TdbPageFlushTest, DISABLED_TbDeleteTest) { // open db TTB *pDb = NULL; tdb_cmpr_fn_t compFunc = tKeyCmpr; + // ret = tdbTbOpen("ofp_insert.db", -1, -1, compFunc, pEnv, &pDb, 0); ret = tdbTbOpen("ofp_insert.db", -1, -1, compFunc, pEnv, &pDb, 0); GTEST_ASSERT_EQ(ret, 0); @@ -549,209 +382,42 @@ TEST(TdbPageFlushTest, DISABLED_TbDeleteTest) { SPoolMem *pPool = openPool(); // start a transaction - TXN *txn; + TXN *txn = NULL; - tdbBegin(pEnv, &txn, poolMalloc, poolFree, pPool, TDB_TXN_WRITE | TDB_TXN_READ_UNCOMMITTED); + tdbBegin(pEnv, &txn, poolMallocRestricted, poolFree, pPool, TDB_TXN_WRITE | TDB_TXN_READ_UNCOMMITTED); // generate value payload // char val[((4083 - 4 - 3 - 2) + 1) * 100]; // pSize(4096) - amSize(1) - pageHdr(8) - footerSize(4) - char val[((4083 - 4 - 3 - 2) + 1) * 2]; // pSize(4096) - amSize(1) - pageHdr(8) - footerSize(4) + char val[32605]; int valLen = sizeof(val) / sizeof(val[0]); generateBigVal(val, valLen); - { // insert the generated big data - ret = tdbTbInsert(pDb, "key1", strlen("key1"), val, valLen, txn); + // insert the generated big data + // char const *key = "key1"; + for (int i = 0; i < 1024 * 4; ++i) { + // char const *key = "key123456789"; + char key[32] = {0}; + sprintf(key, "key-%d", i); + ret = tdbTbInsert(pDb, key, strlen(key) + 1, val, valLen, txn); GTEST_ASSERT_EQ(ret, 0); } - { // query the data - void *pVal = NULL; - int vLen; - - ret = tdbTbGet(pDb, "key1", strlen("key1"), &pVal, &vLen); - ASSERT(ret == 0); - GTEST_ASSERT_EQ(ret, 0); - - GTEST_ASSERT_EQ(vLen, valLen); - GTEST_ASSERT_EQ(memcmp(val, pVal, vLen), 0); - - tdbFree(pVal); - } - /* open to debug committed file -tdbCommit(pEnv, &txn); -tdbTxnClose(&txn); - -++txnid; -tdbTxnOpen(&txn, txnid, poolMalloc, poolFree, pPool, TDB_TXN_WRITE | TDB_TXN_READ_UNCOMMITTED); -tdbBegin(pEnv, &txn); - */ - { // upsert the data - ret = tdbTbUpsert(pDb, "key1", strlen("key1"), "value1", strlen("value1"), txn); - GTEST_ASSERT_EQ(ret, 0); - } - - { // query the upserted data - void *pVal = NULL; - int vLen; - - ret = tdbTbGet(pDb, "key1", strlen("key1"), &pVal, &vLen); - ASSERT(ret == 0); - GTEST_ASSERT_EQ(ret, 0); - - GTEST_ASSERT_EQ(vLen, strlen("value1")); - GTEST_ASSERT_EQ(memcmp("value1", pVal, vLen), 0); - - tdbFree(pVal); - } - - { // delete the data - ret = tdbTbDelete(pDb, "key1", strlen("key1"), txn); - GTEST_ASSERT_EQ(ret, 0); - } - - { // query the deleted data - void *pVal = NULL; - int vLen = -1; - - ret = tdbTbGet(pDb, "key1", strlen("key1"), &pVal, &vLen); - ASSERT(ret == -1); - GTEST_ASSERT_EQ(ret, -1); - - GTEST_ASSERT_EQ(vLen, -1); - GTEST_ASSERT_EQ(pVal, nullptr); - - tdbFree(pVal); - } - // commit current transaction + tdbAbort(pEnv, txn); + + tdbBegin(pEnv, &txn, poolMallocRestricted, poolFree, pPool, TDB_TXN_WRITE | TDB_TXN_READ_UNCOMMITTED); + + for (int i = 1024 * 4; i < 1024 * 8; ++i) { + char key[32] = {0}; + sprintf(key, "key-%d", i); + ret = tdbTbInsert(pDb, key, strlen(key) + 1, val, valLen, txn); + GTEST_ASSERT_EQ(ret, 0); + } + tdbCommit(pEnv, txn); tdbPostCommit(pEnv, txn); -} -TEST(TdbPageFlushTest, DISABLED_simple_insert1) { - // TEST(TdbPageFlushTest, simple_insert1) { - int ret; - TDB *pEnv; - TTB *pDb; - tdb_cmpr_fn_t compFunc; - int nData = 1; - TXN *txn; - int const pageSize = 4096; - - taosRemoveDir("tdb"); - - // Open Env - ret = tdbOpen("tdb", pageSize, 64, &pEnv, 0, 0, NULL); - GTEST_ASSERT_EQ(ret, 0); - - // Create a database - compFunc = tKeyCmpr; - ret = tdbTbOpen("db.db", -1, -1, compFunc, pEnv, &pDb, 0); - GTEST_ASSERT_EQ(ret, 0); - - { - char key[64]; - // char val[(4083 - 4 - 3 - 2)]; // pSize(4096) - amSize(1) - pageHdr(8) - footerSize(4) - char val[(4083 - 4 - 3 - 2) + 1]; // pSize(4096) - amSize(1) - pageHdr(8) - footerSize(4) - int64_t poolLimit = 4096; // 1M pool limit - SPoolMem *pPool; - - // open the pool - pPool = openPool(); - - // start a transaction - tdbBegin(pEnv, &txn, poolMalloc, poolFree, pPool, TDB_TXN_WRITE | TDB_TXN_READ_UNCOMMITTED); - - for (int iData = 1; iData <= nData; iData++) { - sprintf(key, "key0"); - sprintf(val, "value%d", iData); - - // ret = tdbTbInsert(pDb, key, strlen(key), val, strlen(val), &txn); - // GTEST_ASSERT_EQ(ret, 0); - - // generate value payload - int valLen = sizeof(val) / sizeof(val[0]); - for (int i = 6; i < valLen; ++i) { - char c = char(i & 0xff); - if (c == 0) { - c = 1; - } - val[i] = c; - } - - ret = tdbTbInsert(pDb, "key1", strlen("key1"), val, valLen, txn); - GTEST_ASSERT_EQ(ret, 0); - - // if pool is full, commit the transaction and start a new one - if (pPool->size >= poolLimit) { - // commit current transaction - tdbCommit(pEnv, txn); - tdbPostCommit(pEnv, txn); - - // start a new transaction - clearPool(pPool); - - tdbBegin(pEnv, &txn, poolMalloc, poolFree, pPool, TDB_TXN_WRITE | TDB_TXN_READ_UNCOMMITTED); - } - } - - // commit the transaction - tdbCommit(pEnv, txn); - tdbPostCommit(pEnv, txn); - - { // Query the data - void *pVal = NULL; - int vLen; - - for (int i = 1; i <= nData; i++) { - sprintf(key, "key%d", i); - // sprintf(val, "value%d", i); - - ret = tdbTbGet(pDb, key, strlen(key), &pVal, &vLen); - ASSERT(ret == 0); - GTEST_ASSERT_EQ(ret, 0); - - GTEST_ASSERT_EQ(vLen, sizeof(val) / sizeof(val[0])); - GTEST_ASSERT_EQ(memcmp(val, pVal, vLen), 0); - } - - tdbFree(pVal); - } - - { // Iterate to query the DB data - TBC *pDBC; - void *pKey = NULL; - void *pVal = NULL; - int vLen, kLen; - int count = 0; - - ret = tdbTbcOpen(pDb, &pDBC, NULL); - GTEST_ASSERT_EQ(ret, 0); - - tdbTbcMoveToFirst(pDBC); - - for (;;) { - ret = tdbTbcNext(pDBC, &pKey, &kLen, &pVal, &vLen); - if (ret < 0) break; - - // std::cout.write((char *)pKey, kLen) /* << " " << kLen */ << " "; - // std::cout.write((char *)pVal, vLen) /* << " " << vLen */; - // std::cout << std::endl; - - count++; - } - - GTEST_ASSERT_EQ(count, nData); - - tdbTbcClose(pDBC); - - tdbFree(pKey); - tdbFree(pVal); - } - } - - ret = tdbTbDrop(pDb); - GTEST_ASSERT_EQ(ret, 0); + closePool(pPool); // Close a database tdbTbClose(pDb); @@ -760,166 +426,13 @@ TEST(TdbPageFlushTest, DISABLED_simple_insert1) { tdbClose(pEnv); } -static void insertDb(int nData) { - int ret = 0; - TDB *pEnv = NULL; - TTB *pDb = NULL; - tdb_cmpr_fn_t compFunc; - TXN *txn = NULL; - int const pageSize = 4 * 1024; - - // Open Env - ret = tdbOpen("tdb", pageSize, 64, &pEnv, 0, 0, NULL); - GTEST_ASSERT_EQ(ret, 0); - - // Create a database - compFunc = tKeyCmpr; - ret = tdbTbOpen("db.db", -1, -1, compFunc, pEnv, &pDb, 0); - GTEST_ASSERT_EQ(ret, 0); - - // 1, insert nData kv - { - char key[64]; - char val[(4083 - 4 - 3 - 2) + 1]; // pSize(4096) - amSize(1) - pageHdr(8) - footerSize(4) - int64_t poolLimit = 4096; // 1M pool limit - SPoolMem *pPool; - - // open the pool - pPool = openPool(); - - // start a transaction - tdbBegin(pEnv, &txn, poolMalloc, poolFree, pPool, TDB_TXN_WRITE | TDB_TXN_READ_UNCOMMITTED); - - for (int iData = 0; iData < nData; ++iData) { - sprintf(key, "key%03d", iData); - sprintf(val, "value%03d", iData); - - ret = tdbTbInsert(pDb, key, strlen(key), val, strlen(val), txn); - GTEST_ASSERT_EQ(ret, 0); - // if pool is full, commit the transaction and start a new one - if (pPool->size >= poolLimit) { - // commit current transaction - tdbCommit(pEnv, txn); - tdbPostCommit(pEnv, txn); - - // start a new transaction - clearPool(pPool); - - tdbBegin(pEnv, &txn, poolMalloc, poolFree, pPool, TDB_TXN_WRITE | TDB_TXN_READ_UNCOMMITTED); - } - } - - // commit the transaction - tdbCommit(pEnv, txn); - tdbPostCommit(pEnv, txn); - - // 2, delete nData/2 records - - closePool(pPool); - } - - // Close a database - tdbTbClose(pDb); - - // Close Env - tdbClose(pEnv); - - system("ls -l ./tdb"); -} - -static void deleteDb(int nData) { - int ret = 0; - TDB *pEnv = NULL; - TTB *pDb = NULL; - tdb_cmpr_fn_t compFunc; - TXN *txn = NULL; - int const pageSize = 4 * 1024; - - // Open Env - ret = tdbOpen("tdb", pageSize, 64, &pEnv, 0, 0, NULL); - GTEST_ASSERT_EQ(ret, 0); - - // Create a database - compFunc = tKeyCmpr; - ret = tdbTbOpen("db.db", -1, -1, compFunc, pEnv, &pDb, 0); - GTEST_ASSERT_EQ(ret, 0); - - // 2, delete nData/2 records - { - char key[64]; - char val[(4083 - 4 - 3 - 2) + 1]; // pSize(4096) - amSize(1) - pageHdr(8) - footerSize(4) - int64_t poolLimit = 4096; // 1M pool limit - SPoolMem *pPool; - - // open the pool - pPool = openPool(); - - // start a transaction - tdbBegin(pEnv, &txn, poolMalloc, poolFree, pPool, TDB_TXN_WRITE | TDB_TXN_READ_UNCOMMITTED); - - for (int iData = 0; iData < nData; iData++) { - // if (iData % 2 == 0) continue; - - sprintf(key, "key%03d", iData); - sprintf(val, "value%03d", iData); - - { // delete the data - ret = tdbTbDelete(pDb, key, strlen(key), txn); - GTEST_ASSERT_EQ(ret, 0); - } - // if pool is full, commit the transaction and start a new one - if (pPool->size >= poolLimit) { - // commit current transaction - tdbCommit(pEnv, txn); - tdbPostCommit(pEnv, txn); - - // start a new transaction - clearPool(pPool); - - tdbBegin(pEnv, &txn, poolMalloc, poolFree, pPool, TDB_TXN_WRITE | TDB_TXN_READ_UNCOMMITTED); - } - } - - // commit the transaction - tdbCommit(pEnv, txn); - tdbPostCommit(pEnv, txn); - - closePool(pPool); - } - - // Close a database - tdbTbClose(pDb); - - // Close Env - tdbClose(pEnv); - - system("ls -l ./tdb"); -} - -static const int nDataConst = 256 * 19; - -// TEST(TdbPageFlushTest, DISABLED_seq_insert) { -TEST(TdbPageFlushTest, seq_insert) { +// TEST(TdbPageFlushTest, DISABLED_TbRestoreTest4) { +TEST(TdbPageFlushTest, TbRestoreTest4) { clearDb("tdb"); - insertDb(nDataConst); -} -// TEST(TdbPageFlushTest, DISABLED_seq_delete) { -TEST(TdbPageFlushTest, seq_delete) { deleteDb(nDataConst); } + int ret = 0; -// TEST(TdbPageFlushTest, DISABLED_recycly_insert) { -TEST(TdbPageFlushTest, recycly_insert) { insertDb(nDataConst); } - -// TEST(TdbPageFlushTest, DISABLED_recycly_seq_insert_ofp) { -TEST(TdbPageFlushTest, recycly_seq_insert_ofp) { - clearDb("tdb"); - insertOfp(); - system("ls -l ./tdb"); -} - -static void deleteOfp(void) { // open Env - int ret = 0; int const pageSize = 4096; int const pageNum = 64; TDB *pEnv = openEnv("tdb", pageSize, pageNum); @@ -928,6 +441,7 @@ static void deleteOfp(void) { // open db TTB *pDb = NULL; tdb_cmpr_fn_t compFunc = tKeyCmpr; + // ret = tdbTbOpen("ofp_insert.db", -1, -1, compFunc, pEnv, &pDb, 0); ret = tdbTbOpen("ofp_insert.db", -1, -1, compFunc, pEnv, &pDb, 0); GTEST_ASSERT_EQ(ret, 0); @@ -935,25 +449,53 @@ static void deleteOfp(void) { SPoolMem *pPool = openPool(); // start a transaction - TXN *txn; + TXN *txn = NULL; - tdbBegin(pEnv, &txn, poolMalloc, poolFree, pPool, TDB_TXN_WRITE | TDB_TXN_READ_UNCOMMITTED); + tdbBegin(pEnv, &txn, poolMallocRestricted, poolFree, pPool, TDB_TXN_WRITE | TDB_TXN_READ_UNCOMMITTED); - { // delete the data - char const *key = "key123456789"; - ret = tdbTbDelete(pDb, key, strlen(key) + 1, txn); + // generate value payload + // char val[((4083 - 4 - 3 - 2) + 1) * 100]; // pSize(4096) - amSize(1) - pageHdr(8) - footerSize(4) + char val[32605]; + int valLen = sizeof(val) / sizeof(val[0]); + generateBigVal(val, valLen); + + // insert the generated big data + // char const *key = "key1"; + for (int i = 0; i < 1024 * 4; ++i) { + // char const *key = "key123456789"; + char key[32] = {0}; + sprintf(key, "key-%d", i); + ret = tdbTbInsert(pDb, key, strlen(key) + 1, val, valLen, txn); GTEST_ASSERT_EQ(ret, 0); } // commit current transaction + tdbAbort(pEnv, txn); + closePool(pPool); + tdbTbClose(pDb); + tdbClose(pEnv); + + pEnv = openEnv("tdb", pageSize, pageNum); + GTEST_ASSERT_NE(pEnv, nullptr); + + ret = tdbTbOpen("ofp_insert.db", -1, -1, compFunc, pEnv, &pDb, 0); + GTEST_ASSERT_EQ(ret, 0); + + pPool = openPool(); + tdbBegin(pEnv, &txn, poolMallocRestricted, poolFree, pPool, TDB_TXN_WRITE | TDB_TXN_READ_UNCOMMITTED); + + for (int i = 1024 * 4; i < 1024 * 8; ++i) { + char key[32] = {0}; + sprintf(key, "key-%d", i); + ret = tdbTbInsert(pDb, key, strlen(key) + 1, val, valLen, txn); + GTEST_ASSERT_EQ(ret, 0); + } + tdbCommit(pEnv, txn); tdbPostCommit(pEnv, txn); closePool(pPool); - ret = tdbTbDrop(pDb); - GTEST_ASSERT_EQ(ret, 0); - // Close a database tdbTbClose(pDb); @@ -961,26 +503,13 @@ static void deleteOfp(void) { tdbClose(pEnv); } -// TEST(TdbPageFlushTest, DISABLED_seq_delete_ofp) { -TEST(TdbPageFlushTest, seq_delete_ofp) { - deleteOfp(); - system("ls -l ./tdb"); -} - -// TEST(TdbPageFlushTest, DISABLED_recycly_seq_insert_ofp_again) { -TEST(TdbPageFlushTest, recycly_seq_insert_ofp_again) { - insertOfp(); - system("ls -l ./tdb"); -} - -// TEST(TdbPageFlushTest, DISABLED_recycly_seq_insert_ofp_nocommit) { -TEST(TdbPageFlushTest, recycly_seq_insert_ofp_nocommit) { +// TEST(TdbPageFlushTest, DISABLED_TbRestoreTest5) { +TEST(TdbPageFlushTest, TbRestoreTest5) { clearDb("tdb"); - insertOfp(); - system("ls -l ./tdb"); + + int ret = 0; // open Env - int ret = 0; int const pageSize = 4096; int const pageNum = 64; TDB *pEnv = openEnv("tdb", pageSize, pageNum); @@ -989,6 +518,7 @@ TEST(TdbPageFlushTest, recycly_seq_insert_ofp_nocommit) { // open db TTB *pDb = NULL; tdb_cmpr_fn_t compFunc = tKeyCmpr; + // ret = tdbTbOpen("ofp_insert.db", -1, -1, compFunc, pEnv, &pDb, 0); ret = tdbTbOpen("ofp_insert.db", -1, -1, compFunc, pEnv, &pDb, 0); GTEST_ASSERT_EQ(ret, 0); @@ -996,110 +526,49 @@ TEST(TdbPageFlushTest, recycly_seq_insert_ofp_nocommit) { SPoolMem *pPool = openPool(); // start a transaction - TXN *txn; + TXN *txn = NULL; - tdbBegin(pEnv, &txn, poolMalloc, poolFree, pPool, TDB_TXN_WRITE | TDB_TXN_READ_UNCOMMITTED); + tdbBegin(pEnv, &txn, poolMallocRestricted, poolFree, pPool, TDB_TXN_WRITE | TDB_TXN_READ_UNCOMMITTED); - { // delete the data - char const *key = "key123456789"; - ret = tdbTbDelete(pDb, key, strlen(key) + 1, txn); + // generate value payload + // char val[((4083 - 4 - 3 - 2) + 1) * 100]; // pSize(4096) - amSize(1) - pageHdr(8) - footerSize(4) + char val[32605]; + int valLen = sizeof(val) / sizeof(val[0]); + generateBigVal(val, valLen); + + // insert the generated big data + // char const *key = "key1"; + for (int i = 0; i < 1024 * 4; ++i) { + // char const *key = "key123456789"; + char key[32] = {0}; + sprintf(key, "key-%d", i); + ret = tdbTbInsert(pDb, key, strlen(key) + 1, val, valLen, txn); GTEST_ASSERT_EQ(ret, 0); } - // 1, insert nData kv - { - int nData = nDataConst; - char key[64]; - char val[(4083 - 4 - 3 - 2) + 1]; // pSize(4096) - amSize(1) - pageHdr(8) - footerSize(4) - int64_t poolLimit = 4096; // 1M pool limit - - for (int iData = 0; iData < nData; ++iData) { - sprintf(key, "key%03d", iData); - sprintf(val, "value%03d", iData); - - ret = tdbTbInsert(pDb, key, strlen(key), val, strlen(val), txn); - GTEST_ASSERT_EQ(ret, 0); - // if pool is full, commit the transaction and start a new one - if (pPool->size >= poolLimit) { - // commit current transaction - tdbCommit(pEnv, txn); - tdbPostCommit(pEnv, txn); - - // start a new transaction - clearPool(pPool); - - tdbBegin(pEnv, &txn, poolMalloc, poolFree, pPool, TDB_TXN_WRITE | TDB_TXN_READ_UNCOMMITTED); - } - } - } - // commit current transaction tdbCommit(pEnv, txn); tdbPostCommit(pEnv, txn); - closePool(pPool); - - // Close a database tdbTbClose(pDb); - - // Close Env tdbClose(pEnv); - system("ls -l ./tdb"); -} - -// TEST(TdbPageFlushTest, DISABLED_recycly_delete_interior_ofp_nocommit) { -TEST(TdbPageFlushTest, recycly_delete_interior_ofp_nocommit) { - clearDb("tdb"); - - // open Env - int ret = 0; - int const pageSize = 4096; - int const pageNum = 64; - TDB *pEnv = openEnv("tdb", pageSize, pageNum); + pEnv = openEnv("tdb", pageSize, pageNum); GTEST_ASSERT_NE(pEnv, nullptr); - // open db - TTB *pDb = NULL; - tdb_cmpr_fn_t compFunc = NULL; // tKeyCmpr; ret = tdbTbOpen("ofp_insert.db", -1, -1, compFunc, pEnv, &pDb, 0); GTEST_ASSERT_EQ(ret, 0); - // open the pool - SPoolMem *pPool = openPool(); + pPool = openPool(); + tdbBegin(pEnv, &txn, poolMallocRestricted, poolFree, pPool, TDB_TXN_WRITE | TDB_TXN_READ_UNCOMMITTED); - // start a transaction - TXN *txn; - - tdbBegin(pEnv, &txn, poolMalloc, poolFree, pPool, TDB_TXN_WRITE | TDB_TXN_READ_UNCOMMITTED); - - char key[1024] = {0}; - int count = sizeof(key) / sizeof(key[0]); - for (int i = 0; i < count - 1; ++i) { - key[i] = 'a'; - } - - // insert n ofp keys to form 2-layer btree - { - for (int i = 0; i < 7; ++i) { - // sprintf(&key[count - 2], "%c", i); - key[count - 2] = '0' + i; - - ret = tdbTbInsert(pDb, key, count, NULL, 0, txn); - GTEST_ASSERT_EQ(ret, 0); - } - } - /* - // delete one interior key - { - sprintf(&key[count - 2], "%c", 2); - key[count - 2] = '0' + 2; - - ret = tdbTbDelete(pDb, key, strlen(key) + 1, txn); + for (int i = 1024 * 4; i < 1024 * 8; ++i) { + char key[32] = {0}; + sprintf(key, "key-%d", i); + ret = tdbTbInsert(pDb, key, strlen(key) + 1, val, valLen, txn); GTEST_ASSERT_EQ(ret, 0); } - */ - // commit current transaction + tdbCommit(pEnv, txn); tdbPostCommit(pEnv, txn); @@ -1110,6 +579,4 @@ TEST(TdbPageFlushTest, recycly_delete_interior_ofp_nocommit) { // Close Env tdbClose(pEnv); - - system("ls -l ./tdb"); }