summaryrefslogtreecommitdiff
path: root/db/write_batch_test.cc
diff options
context:
space:
mode:
authorJay Huh <jewoongh@meta.com>2023-11-06 16:52:51 -0800
committerFacebook GitHub Bot <facebook-github-bot@users.noreply.github.com>2023-11-06 16:52:51 -0800
commit2adef5367a68ce099bde51e7d710889d86a1b3d0 (patch)
tree62973887b99a87c8a1abfe4120d62d142afe9063 /db/write_batch_test.cc
parent92dc5f3e67d9a84715f763218f962bc9282274da (diff)
AttributeGroups - PutEntity Implementation (#11977)
Summary: Write Path for AttributeGroup Support. The new `PutEntity()` API uses `WriteBatch` and atomically writes WideColumns entities in multiple Column Families. Combined the release note from PR https://github.com/facebook/rocksdb/issues/11925 Pull Request resolved: https://github.com/facebook/rocksdb/pull/11977 Test Plan: - `DBWideBasicTest::MultiCFMultiGetEntityAsPinnableAttributeGroups` updated - `WriteBatchTest::AttributeGroupTest` added - `WriteBatchTest::AttributeGroupSavePointTest` added Reviewed By: ltamasi Differential Revision: D50457122 Pulled By: jaykorean fbshipit-source-id: 4997b265e415588ce077933082dcd1ac3eeae2cd
Diffstat (limited to 'db/write_batch_test.cc')
-rw-r--r--db/write_batch_test.cc93
1 files changed, 93 insertions, 0 deletions
diff --git a/db/write_batch_test.cc b/db/write_batch_test.cc
index 174052644..e8fc1aa35 100644
--- a/db/write_batch_test.cc
+++ b/db/write_batch_test.cc
@@ -12,7 +12,9 @@
#include "db/column_family.h"
#include "db/db_test_util.h"
#include "db/memtable.h"
+#include "db/wide/wide_columns_helper.h"
#include "db/write_batch_internal.h"
+#include "dbformat.h"
#include "rocksdb/comparator.h"
#include "rocksdb/db.h"
#include "rocksdb/env.h"
@@ -276,6 +278,21 @@ struct TestHandler : public WriteBatch::Handler {
}
return Status::OK();
}
+ Status PutEntityCF(uint32_t column_family_id, const Slice& key,
+ const Slice& entity) override {
+ std::ostringstream oss;
+ Status s = WideColumnsHelper::DumpSliceAsWideColumns(entity, oss, false);
+ if (!s.ok()) {
+ return s;
+ }
+ if (column_family_id == 0) {
+ seen += "PutEntity(" + key.ToString() + ", " + oss.str() + ")";
+ } else {
+ seen += "PutEntityCF(" + std::to_string(column_family_id) + ", " +
+ key.ToString() + ", " + oss.str() + ")";
+ }
+ return Status::OK();
+ }
Status DeleteCF(uint32_t column_family_id, const Slice& key) override {
if (column_family_id == 0) {
seen += "Delete(" + key.ToString() + ")";
@@ -665,6 +682,82 @@ class ColumnFamilyHandleImplDummy : public ColumnFamilyHandleImpl {
};
} // anonymous namespace
+TEST_F(WriteBatchTest, AttributeGroupTest) {
+ WriteBatch batch;
+ ColumnFamilyHandleImplDummy zero(0), two(2);
+ AttributeGroups foo_ags;
+ WideColumn zero_col_1{"0_c_1_n", "0_c_1_v"};
+ WideColumn zero_col_2{"0_c_2_n", "0_c_2_v"};
+ WideColumns zero_col_1_col_2{zero_col_1, zero_col_2};
+
+ WideColumn two_col_1{"2_c_1_n", "2_c_1_v"};
+ WideColumn two_col_2{"2_c_2_n", "2_c_2_v"};
+ WideColumns two_col_1_col_2{two_col_1, two_col_2};
+
+ foo_ags.emplace_back(&zero, zero_col_1_col_2);
+ foo_ags.emplace_back(&two, two_col_1_col_2);
+
+ ASSERT_OK(batch.PutEntity("foo", foo_ags));
+
+ TestHandler handler;
+ ASSERT_OK(batch.Iterate(&handler));
+ ASSERT_EQ(
+ "PutEntity(foo, 0_c_1_n:0_c_1_v "
+ "0_c_2_n:0_c_2_v)"
+ "PutEntityCF(2, foo, 2_c_1_n:2_c_1_v "
+ "2_c_2_n:2_c_2_v)",
+ handler.seen);
+}
+
+TEST_F(WriteBatchTest, AttributeGroupSavePointTest) {
+ WriteBatch batch;
+ batch.SetSavePoint();
+
+ ColumnFamilyHandleImplDummy zero(0), two(2), three(3);
+ AttributeGroups foo_ags;
+ WideColumn zero_col_1{"0_c_1_n", "0_c_1_v"};
+ WideColumn zero_col_2{"0_c_2_n", "0_c_2_v"};
+ WideColumns zero_col_1_col_2{zero_col_1, zero_col_2};
+
+ WideColumn two_col_1{"2_c_1_n", "2_c_1_v"};
+ WideColumn two_col_2{"2_c_2_n", "2_c_2_v"};
+ WideColumns two_col_1_col_2{two_col_1, two_col_2};
+
+ foo_ags.emplace_back(&zero, zero_col_1_col_2);
+ foo_ags.emplace_back(&two, two_col_1_col_2);
+
+ AttributeGroups bar_ags;
+ WideColumn three_col_1{"3_c_1_n", "3_c_1_v"};
+ WideColumn three_col_2{"3_c_2_n", "3_c_2_v"};
+ WideColumns three_col_1_col_2{three_col_1, three_col_2};
+
+ bar_ags.emplace_back(&zero, zero_col_1_col_2);
+ bar_ags.emplace_back(&three, three_col_1_col_2);
+
+ ASSERT_OK(batch.PutEntity("foo", foo_ags));
+ batch.SetSavePoint();
+
+ ASSERT_OK(batch.PutEntity("bar", bar_ags));
+
+ TestHandler handler;
+ ASSERT_OK(batch.Iterate(&handler));
+ ASSERT_EQ(
+ "PutEntity(foo, 0_c_1_n:0_c_1_v 0_c_2_n:0_c_2_v)"
+ "PutEntityCF(2, foo, 2_c_1_n:2_c_1_v 2_c_2_n:2_c_2_v)"
+ "PutEntity(bar, 0_c_1_n:0_c_1_v 0_c_2_n:0_c_2_v)"
+ "PutEntityCF(3, bar, 3_c_1_n:3_c_1_v 3_c_2_n:3_c_2_v)",
+ handler.seen);
+
+ ASSERT_OK(batch.RollbackToSavePoint());
+
+ handler.seen.clear();
+ ASSERT_OK(batch.Iterate(&handler));
+ ASSERT_EQ(
+ "PutEntity(foo, 0_c_1_n:0_c_1_v 0_c_2_n:0_c_2_v)"
+ "PutEntityCF(2, foo, 2_c_1_n:2_c_1_v 2_c_2_n:2_c_2_v)",
+ handler.seen);
+}
+
TEST_F(WriteBatchTest, ColumnFamiliesBatchTest) {
WriteBatch batch;
ColumnFamilyHandleImplDummy zero(0), two(2), three(3), eight(8);