This is an automated email from the ASF dual-hosted git repository.
w41ter pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new 2b760381a2d [feat](cloud) document_put/get split TabletSchemaCloudPB
(#54735)
2b760381a2d is described below
commit 2b760381a2d294dd6ead2bb0a55f90d4e2bcdfe2
Author: walter <[email protected]>
AuthorDate: Mon Aug 18 11:53:51 2025 +0800
[feat](cloud) document_put/get split TabletSchemaCloudPB (#54735)
---
be/src/cloud/pb_convert.cpp | 16 ++
cloud/src/common/config.h | 2 +
cloud/src/meta-store/document_message.cpp | 9 +
cloud/src/meta-store/document_message.h | 6 +-
cloud/test/document_message_test.cpp | 284 ++++++++++++++++++++++++++++++
gensrc/proto/olap_file.proto | 4 +
6 files changed, 319 insertions(+), 2 deletions(-)
diff --git a/be/src/cloud/pb_convert.cpp b/be/src/cloud/pb_convert.cpp
index 6a181d59f7d..c220820c6dc 100644
--- a/be/src/cloud/pb_convert.cpp
+++ b/be/src/cloud/pb_convert.cpp
@@ -340,6 +340,10 @@ void doris_tablet_schema_to_cloud(TabletSchemaCloudPB*
out, const TabletSchemaPB
out->set_storage_dict_page_size(in.storage_dict_page_size());
out->set_is_in_memory(in.is_in_memory());
out->set_row_store_page_size(in.row_store_page_size());
+
+ if (in.has___split_schema()) {
+ out->mutable___split_schema()->CopyFrom(in.__split_schema());
+ }
}
void doris_tablet_schema_to_cloud(TabletSchemaCloudPB* out, TabletSchemaPB&&
in) {
@@ -372,6 +376,10 @@ void doris_tablet_schema_to_cloud(TabletSchemaCloudPB*
out, TabletSchemaPB&& in)
out->set_storage_dict_page_size(in.storage_dict_page_size());
out->set_is_in_memory(in.is_in_memory());
out->set_row_store_page_size(in.row_store_page_size());
+
+ if (in.has___split_schema()) {
+ out->mutable___split_schema()->CopyFrom(in.__split_schema());
+ }
}
TabletSchemaPB cloud_tablet_schema_to_doris(const TabletSchemaCloudPB& in) {
@@ -417,6 +425,10 @@ void cloud_tablet_schema_to_doris(TabletSchemaPB* out,
const TabletSchemaCloudPB
out->set_storage_dict_page_size(in.storage_dict_page_size());
out->set_is_in_memory(in.is_in_memory());
out->set_row_store_page_size(in.row_store_page_size());
+
+ if (in.has___split_schema()) {
+ out->mutable___split_schema()->CopyFrom(in.__split_schema());
+ }
}
void cloud_tablet_schema_to_doris(TabletSchemaPB* out, TabletSchemaCloudPB&&
in) {
@@ -450,6 +462,10 @@ void cloud_tablet_schema_to_doris(TabletSchemaPB* out,
TabletSchemaCloudPB&& in)
out->set_storage_dict_page_size(in.storage_dict_page_size());
out->set_is_in_memory(in.is_in_memory());
out->set_row_store_page_size(in.row_store_page_size());
+
+ if (in.has___split_schema()) {
+ out->mutable___split_schema()->CopyFrom(in.__split_schema());
+ }
}
TabletMetaCloudPB doris_tablet_meta_to_cloud(const TabletMetaPB& in) {
diff --git a/cloud/src/common/config.h b/cloud/src/common/config.h
index 10c52369333..26c5c2d8615 100644
--- a/cloud/src/common/config.h
+++ b/cloud/src/common/config.h
@@ -346,6 +346,8 @@ CONF_mString(ca_cert_file_paths,
CONF_Bool(enable_split_rowset_meta_pb, "false");
CONF_Int32(split_rowset_meta_pb_size, "10000"); // split rowset meta pb size,
default is 10K
+CONF_Bool(enable_split_tablet_schema_pb, "false");
+CONF_Int32(split_tablet_schema_pb_size, "10000"); // split tablet schema pb
size, default is 10K
CONF_Bool(enable_check_fe_drop_in_safe_time, "true");
} // namespace doris::cloud::config
diff --git a/cloud/src/meta-store/document_message.cpp
b/cloud/src/meta-store/document_message.cpp
index 3ecb111eb81..3c16d760811 100644
--- a/cloud/src/meta-store/document_message.cpp
+++ b/cloud/src/meta-store/document_message.cpp
@@ -103,6 +103,9 @@ struct MessageSplitDescriptor {
config::split_rowset_meta_pb_size < msg.ByteSizeLong();
} else if constexpr (std::is_same_v<Message, SplitSingleMessagePB>) {
return true;
+ } else if constexpr (std::is_same_v<Message, TabletSchemaCloudPB>) {
+ return config::enable_split_tablet_schema_pb &&
+ config::split_tablet_schema_pb_size < msg.ByteSizeLong();
}
return false;
}
@@ -112,6 +115,8 @@ struct MessageSplitDescriptor {
return {RowsetMetaCloudPB::kSegmentsKeyBoundsFieldNumber};
} else if constexpr (std::is_same_v<Message, SplitSingleMessagePB>) {
return {SplitSingleMessagePB::kSegmentKeyBoundsFieldNumber};
+ } else if constexpr (std::is_same_v<Message, TabletSchemaCloudPB>) {
+ return {TabletSchemaCloudPB::kColumnFieldNumber};
}
return {};
}
@@ -256,6 +261,7 @@ bool document_put(Transaction* txn, std::string_view key,
google::protobuf::Mess
const SplitMethodDescriptor split_messages[] = {
{RowsetMetaCloudPB::descriptor(),
&document_put_split_fields<RowsetMetaCloudPB>},
+ {TabletSchemaCloudPB::descriptor(),
&document_put_split_fields<TabletSchemaCloudPB>},
// Add more split messages here as needed ...
{SplitSingleMessagePB::descriptor(),
&document_put_split_fields<SplitSingleMessagePB>},
};
@@ -423,6 +429,7 @@ static TxnErrorCode document_get_split_fields_if_exists(T*
t, std::string_view k
const SplitMessageDescriptor split_messages[] = {
{RowsetMetaCloudPB::descriptor(), &document_get_split_fields<T,
RowsetMetaCloudPB>},
+ {TabletSchemaCloudPB::descriptor(), &document_get_split_fields<T,
TabletSchemaCloudPB>},
// Add more split messages here as needed ...
{SplitSingleMessagePB::descriptor(),
&document_get_split_fields<T, SplitSingleMessagePB>}};
@@ -601,6 +608,8 @@ static bool document_put_with_encoded_key(Transaction* txn,
std::string_view key
const SplitMethodDescriptor split_messages[] = {
{RowsetMetaCloudPB::descriptor(),
&versioned_document_put_split_fields<RowsetMetaCloudPB>},
+ {TabletSchemaCloudPB::descriptor(),
+ &versioned_document_put_split_fields<TabletSchemaCloudPB>},
// Add more split messages here as needed ...
{SplitSingleMessagePB::descriptor(),
&versioned_document_put_split_fields<SplitSingleMessagePB>},
diff --git a/cloud/src/meta-store/document_message.h
b/cloud/src/meta-store/document_message.h
index 8e16848f066..958226066ca 100644
--- a/cloud/src/meta-store/document_message.h
+++ b/cloud/src/meta-store/document_message.h
@@ -69,7 +69,8 @@ template <typename Message>
requires IsProtobufMessage<Message>
void document_remove(Transaction* txn, std::string_view key) {
if constexpr (std::is_same_v<Message, RowsetMetaCloudPB> ||
- std::is_same_v<Message, SplitSingleMessagePB>) {
+ std::is_same_v<Message, SplitSingleMessagePB> ||
+ std::is_same_v<Message, TabletSchemaCloudPB>) {
details::document_delete_range(txn, key);
} else {
details::document_delete_single(txn, key);
@@ -118,7 +119,8 @@ template <typename Message>
requires IsProtobufMessage<Message>
void document_remove(Transaction* txn, std::string_view key_prefix,
Versionstamp v) {
if constexpr (std::is_same_v<Message, RowsetMetaCloudPB> ||
- std::is_same_v<Message, SplitSingleMessagePB>) {
+ std::is_same_v<Message, SplitSingleMessagePB> ||
+ std::is_same_v<Message, TabletSchemaCloudPB>) {
details::versioned_document_delete_range(txn, key_prefix, v);
} else {
details::versioned_document_delete_single(txn, key_prefix, v);
diff --git a/cloud/test/document_message_test.cpp
b/cloud/test/document_message_test.cpp
index f0b17534f16..d78309179cc 100644
--- a/cloud/test/document_message_test.cpp
+++ b/cloud/test/document_message_test.cpp
@@ -348,6 +348,163 @@ TEST(DocumentMessageTest,
DocumentPutRowsetMetaWithoutSplit) {
ASSERT_TRUE(is_empty_range(txn_kv.get())) << dump_range(txn_kv.get());
}
+TEST(DocumentMessageTest, DocumentPutTabletSchemaCloudPB) {
+ std::unique_lock lock(config_mutex);
+ config::enable_split_tablet_schema_pb = true;
+ config::split_tablet_schema_pb_size = 0; // Always split the tablet schema
pb.
+
+ auto txn_kv = std::make_shared<MemTxnKv>();
+ doris::TabletSchemaCloudPB schema;
+ schema.set_keys_type(doris::DUP_KEYS);
+ schema.set_num_short_key_columns(2);
+ schema.set_num_rows_per_row_block(1024);
+ schema.set_compress_kind(doris::COMPRESS_LZ4);
+ schema.set_next_column_unique_id(10);
+ schema.set_schema_version(1);
+
+ // Add multiple columns to test splitting
+ for (int i = 0; i < 3; ++i) {
+ doris::ColumnPB* column = schema.add_column();
+ column->set_name(fmt::format("col_{}", i));
+ column->set_unique_id(i + 1);
+ column->set_type("INT");
+ column->set_is_key(i < 2); // First 2 columns are key columns
+ column->set_is_nullable(false);
+ }
+
+ std::string schema_key = "tablet_schema_key_test";
+ {
+ // create a txn and put tablet schema
+ doris::TabletSchemaCloudPB schema_copy(schema);
+ std::unique_ptr<Transaction> txn;
+ ASSERT_EQ(txn_kv->create_txn(&txn), TxnErrorCode::TXN_OK);
+ ASSERT_TRUE(document_put(txn.get(), schema_key,
std::move(schema_copy)));
+ ASSERT_EQ(txn->commit(), TxnErrorCode::TXN_OK);
+ }
+
+ {
+ // create a txn and get tablet schema
+ std::unique_ptr<Transaction> txn;
+ ASSERT_EQ(txn_kv->create_txn(&txn), TxnErrorCode::TXN_OK);
+ doris::TabletSchemaCloudPB saved_schema;
+ ASSERT_EQ(document_get(txn.get(), schema_key, &saved_schema),
TxnErrorCode::TXN_OK);
+ ASSERT_EQ(saved_schema.keys_type(), schema.keys_type());
+ ASSERT_EQ(saved_schema.num_short_key_columns(),
schema.num_short_key_columns());
+ ASSERT_EQ(saved_schema.num_rows_per_row_block(),
schema.num_rows_per_row_block());
+ ASSERT_EQ(saved_schema.compress_kind(), schema.compress_kind());
+ ASSERT_EQ(saved_schema.next_column_unique_id(),
schema.next_column_unique_id());
+ ASSERT_EQ(saved_schema.schema_version(), schema.schema_version());
+ ASSERT_EQ(saved_schema.column_size(), 3);
+ for (int i = 0; i < 3; ++i) {
+ ASSERT_EQ(saved_schema.column(i).name(), fmt::format("col_{}", i));
+ ASSERT_EQ(saved_schema.column(i).unique_id(), i + 1);
+ ASSERT_EQ(saved_schema.column(i).type(), "INT");
+ ASSERT_EQ(saved_schema.column(i).is_key(), i < 2);
+ ASSERT_EQ(saved_schema.column(i).is_nullable(), false);
+ }
+ }
+
+ ASSERT_GE(txn_kv->total_kvs(), 2) << dump_range(txn_kv.get());
+
+ {
+ // create a txn and remove tablet schema
+ std::unique_ptr<Transaction> txn;
+ ASSERT_EQ(txn_kv->create_txn(&txn), TxnErrorCode::TXN_OK);
+ document_remove<doris::TabletSchemaCloudPB>(txn.get(), schema_key);
+ ASSERT_EQ(txn->commit(), TxnErrorCode::TXN_OK);
+ }
+
+ ASSERT_TRUE(is_empty_range(txn_kv.get())) << dump_range(txn_kv.get());
+}
+
+TEST(DocumentMessageTest, DocumentPutTabletSchemaCloudPBWithoutSplit) {
+ std::unique_lock lock(config_mutex);
+ config::enable_split_tablet_schema_pb = false;
+
+ auto txn_kv = std::make_shared<MemTxnKv>();
+ doris::TabletSchemaCloudPB schema;
+ schema.set_keys_type(doris::DUP_KEYS);
+ schema.set_num_short_key_columns(1);
+ schema.set_num_rows_per_row_block(1024);
+ schema.set_compress_kind(doris::COMPRESS_LZ4);
+ schema.set_next_column_unique_id(5);
+ schema.set_schema_version(1);
+
+ // Add one column
+ doris::ColumnPB* column = schema.add_column();
+ column->set_name("test_col");
+ column->set_unique_id(1);
+ column->set_type("VARCHAR");
+ column->set_is_key(true);
+ column->set_is_nullable(false);
+
+ std::string schema_key = "tablet_schema_key_no_split";
+ {
+ // create a txn and put tablet schema
+ doris::TabletSchemaCloudPB schema_copy(schema);
+ std::unique_ptr<Transaction> txn;
+ ASSERT_EQ(txn_kv->create_txn(&txn), TxnErrorCode::TXN_OK);
+ ASSERT_TRUE(document_put(txn.get(), schema_key,
std::move(schema_copy)));
+ ASSERT_EQ(txn->commit(), TxnErrorCode::TXN_OK);
+ }
+
+ {
+ // create a txn and get tablet schema
+ std::unique_ptr<Transaction> txn;
+ ASSERT_EQ(txn_kv->create_txn(&txn), TxnErrorCode::TXN_OK);
+ doris::TabletSchemaCloudPB saved_schema;
+ ASSERT_EQ(document_get(txn.get(), schema_key, &saved_schema),
TxnErrorCode::TXN_OK);
+ ASSERT_EQ(saved_schema.keys_type(), schema.keys_type());
+ ASSERT_EQ(saved_schema.num_short_key_columns(),
schema.num_short_key_columns());
+ ASSERT_EQ(saved_schema.column_size(), 1);
+ ASSERT_EQ(saved_schema.column(0).name(), "test_col");
+ ASSERT_EQ(saved_schema.column(0).unique_id(), 1);
+ ASSERT_EQ(saved_schema.column(0).type(), "VARCHAR");
+ }
+
+ ASSERT_EQ(txn_kv->total_kvs(), 1) << dump_range(txn_kv.get());
+
+ {
+ // create a txn and remove tablet schema
+ std::unique_ptr<Transaction> txn;
+ ASSERT_EQ(txn_kv->create_txn(&txn), TxnErrorCode::TXN_OK);
+ document_remove<doris::TabletSchemaCloudPB>(txn.get(), schema_key);
+ ASSERT_EQ(txn->commit(), TxnErrorCode::TXN_OK);
+ }
+
+ ASSERT_TRUE(is_empty_range(txn_kv.get())) << dump_range(txn_kv.get());
+
+ {
+ // Allow split but nothing to split, because the split fields is empty.
+ config::enable_split_tablet_schema_pb = true;
+ config::split_tablet_schema_pb_size = 0; // Always split
+ std::unique_ptr<Transaction> txn;
+ ASSERT_EQ(txn_kv->create_txn(&txn), TxnErrorCode::TXN_OK);
+ doris::TabletSchemaCloudPB schema_copy(schema);
+ schema_copy.clear_column(); // Clear the columns to make it empty.
+ ASSERT_TRUE(document_put(txn.get(), schema_key,
std::move(schema_copy)));
+ ASSERT_EQ(txn->commit(), TxnErrorCode::TXN_OK);
+
+ // If you meet a failure here, it means the tablet schema pb is split
into multiple keys,
+ // you should clear the split fields you added.
+ ASSERT_EQ(txn_kv->total_kvs(), 1) << dump_range(txn_kv.get());
+
+ // Read the message back.
+ std::unique_ptr<Transaction> read_txn;
+ ASSERT_EQ(txn_kv->create_txn(&read_txn), TxnErrorCode::TXN_OK);
+ doris::TabletSchemaCloudPB read_schema;
+ ASSERT_EQ(document_get(read_txn.get(), schema_key, &read_schema),
TxnErrorCode::TXN_OK);
+ ASSERT_EQ(read_schema.keys_type(), schema.keys_type());
+ ASSERT_EQ(read_schema.num_short_key_columns(),
schema.num_short_key_columns());
+ ASSERT_EQ(read_schema.column_size(), 0); // No columns
+ // Remove the message.
+ document_remove<doris::TabletSchemaCloudPB>(read_txn.get(),
schema_key);
+ ASSERT_EQ(read_txn->commit(), TxnErrorCode::TXN_OK);
+ }
+
+ ASSERT_TRUE(is_empty_range(txn_kv.get())) << dump_range(txn_kv.get());
+}
+
TEST(DocumentMessageTest, DocumentPutVersionPB) {
auto txn_kv = std::make_shared<MemTxnKv>();
VersionPB version_pb;
@@ -442,6 +599,69 @@ TEST(DocumentMessageTest, DocumentGetAllRowsetMeta) {
}
}
+TEST(DocumentMessageTest, DocumentGetAllTabletSchemaCloudPB) {
+ std::unique_lock lock(config_mutex);
+ config::enable_split_tablet_schema_pb = true;
+ config::split_tablet_schema_pb_size = 0; // Always split the tablet schema
pb.
+
+ auto txn_kv = std::make_shared<MemTxnKv>();
+ doris::TabletSchemaCloudPB schema;
+ schema.set_keys_type(doris::DUP_KEYS);
+ schema.set_num_short_key_columns(1);
+ schema.set_num_rows_per_row_block(1024);
+ schema.set_compress_kind(doris::COMPRESS_LZ4);
+ schema.set_next_column_unique_id(5);
+ schema.set_schema_version(1);
+
+ doris::ColumnPB* column = schema.add_column();
+ column->set_name("test_col");
+ column->set_unique_id(1);
+ column->set_type("VARCHAR");
+ column->set_is_key(true);
+ column->set_is_nullable(false);
+
+ std::string schema_key_prefix = "tablet_schema_key_";
+ for (int i = 0; i < 10; ++i) {
+ // create a txn and put tablet schema
+ doris::TabletSchemaCloudPB schema_copy(schema);
+ schema_copy.set_schema_version(i + 1);
+ std::unique_ptr<Transaction> txn;
+ ASSERT_EQ(txn_kv->create_txn(&txn), TxnErrorCode::TXN_OK);
+ ASSERT_TRUE(document_put(txn.get(), schema_key_prefix +
std::to_string(i),
+ std::move(schema_copy)));
+ ASSERT_EQ(txn->commit(), TxnErrorCode::TXN_OK);
+ }
+
+ {
+ // scan all tablet schema keys
+ std::unique_ptr<Transaction> txn;
+ ASSERT_EQ(txn_kv->create_txn(&txn), TxnErrorCode::TXN_OK);
+ FullRangeGetOptions opts;
+ opts.txn = txn.get();
+ opts.batch_limit = 2;
+ auto iter = txn_kv->full_range_get(schema_key_prefix,
schema_key_prefix + '\xFF',
+ std::move(opts));
+ int count = 0;
+ while (true) {
+ doris::TabletSchemaCloudPB saved_schema;
+ TxnErrorCode code = document_get(iter.get(), &saved_schema);
+ if (code == TxnErrorCode::TXN_KEY_NOT_FOUND) {
+ break;
+ }
+ ASSERT_EQ(code, TxnErrorCode::TXN_OK);
+ ASSERT_EQ(saved_schema.keys_type(), schema.keys_type());
+ ASSERT_EQ(saved_schema.num_short_key_columns(),
schema.num_short_key_columns());
+ ASSERT_EQ(saved_schema.column_size(), 1);
+ ASSERT_EQ(saved_schema.column(0).name(), "test_col");
+ ASSERT_EQ(saved_schema.column(0).unique_id(), 1);
+ ASSERT_EQ(saved_schema.column(0).type(), "VARCHAR");
+ ASSERT_EQ(saved_schema.schema_version(), count + 1);
+ count += 1;
+ }
+ ASSERT_EQ(count, 10) << dump_range(txn_kv.get());
+ }
+}
+
TEST(DocumentMessageTest, VersionedDocumentPut) {
std::unique_lock lock(config_mutex);
config::enable_split_rowset_meta_pb = true;
@@ -732,6 +952,70 @@ TEST(DocumentMessageTest,
VersionedDocumentPutAndGetWithVersionstamp) {
}
}
+TEST(DocumentMessageTest, VersionedDocumentPutTabletSchemaCloudPB) {
+ std::unique_lock lock(config_mutex);
+ config::enable_split_tablet_schema_pb = true;
+ config::split_tablet_schema_pb_size = 0; // Always split the tablet schema
pb.
+
+ auto txn_kv = std::make_shared<MemTxnKv>();
+ doris::TabletSchemaCloudPB schema;
+ schema.set_keys_type(doris::DUP_KEYS);
+ schema.set_num_short_key_columns(2);
+ schema.set_num_rows_per_row_block(1024);
+ schema.set_compress_kind(doris::COMPRESS_LZ4);
+ schema.set_next_column_unique_id(10);
+ schema.set_schema_version(1);
+
+ // Add multiple columns to test splitting
+ for (int i = 0; i < 3; ++i) {
+ doris::ColumnPB* column = schema.add_column();
+ column->set_name(fmt::format("col_{}", i));
+ column->set_unique_id(i + 1);
+ column->set_type("INT");
+ column->set_is_key(i < 2); // First 2 columns are key columns
+ column->set_is_nullable(false);
+ }
+
+ std::string key_prefix = "versioned_tablet_schema_key_";
+ {
+ // Create a txn and put versioned tablet schema with initial version
+ doris::TabletSchemaCloudPB schema_copy(schema);
+ std::unique_ptr<Transaction> txn;
+ ASSERT_EQ(txn_kv->create_txn(&txn), TxnErrorCode::TXN_OK);
+ ASSERT_TRUE(versioned::document_put(txn.get(), key_prefix,
std::move(schema_copy)));
+ ASSERT_EQ(txn->commit(), TxnErrorCode::TXN_OK);
+ }
+
+ Versionstamp version;
+ {
+ // Get the tablet schema with version
+ std::unique_ptr<Transaction> txn;
+ ASSERT_EQ(txn_kv->create_txn(&txn), TxnErrorCode::TXN_OK);
+ doris::TabletSchemaCloudPB read_schema;
+ ASSERT_EQ(versioned::document_get(txn.get(), key_prefix, &read_schema,
&version),
+ TxnErrorCode::TXN_OK);
+ ASSERT_EQ(read_schema.keys_type(), schema.keys_type());
+ ASSERT_EQ(read_schema.num_short_key_columns(),
schema.num_short_key_columns());
+ ASSERT_EQ(read_schema.column_size(), 3);
+ for (int i = 0; i < 3; ++i) {
+ ASSERT_EQ(read_schema.column(i).name(), fmt::format("col_{}", i));
+ ASSERT_EQ(read_schema.column(i).unique_id(), i + 1);
+ ASSERT_EQ(read_schema.column(i).type(), "INT");
+ }
+ }
+
+ // Remove the range
+ {
+ // Create a txn and remove the versioned tablet schema
+ std::unique_ptr<Transaction> txn;
+ ASSERT_EQ(txn_kv->create_txn(&txn), TxnErrorCode::TXN_OK);
+ versioned::document_remove<doris::TabletSchemaCloudPB>(txn.get(),
key_prefix, version);
+ ASSERT_EQ(txn->commit(), TxnErrorCode::TXN_OK);
+ }
+
+ ASSERT_TRUE(is_empty_range(txn_kv.get())) << dump_range(txn_kv.get());
+}
+
TEST(DocumentMessageTest, VersionedDocumentPutVersionPB) {
auto txn_kv = std::make_shared<MemTxnKv>();
VersionPB version_pb;
diff --git a/gensrc/proto/olap_file.proto b/gensrc/proto/olap_file.proto
index 2c375818799..165ab898a22 100644
--- a/gensrc/proto/olap_file.proto
+++ b/gensrc/proto/olap_file.proto
@@ -436,6 +436,8 @@ message TabletSchemaPB {
optional int32 skip_bitmap_col_idx = 29 [default = -1];
optional int64 storage_page_size = 30 [default=65536];
optional int64 storage_dict_page_size = 31 [default=262144];
+
+ optional SplitSchemaPB __split_schema = 1000; // A special field, DO NOT
change it.
}
message TabletSchemaCloudPB {
@@ -475,6 +477,8 @@ message TabletSchemaCloudPB {
// FIXME(gavin): deprecate and remove in the future
optional bool is_in_memory = 200 [default=false]; // unused, just keep
align to TabletSchemaPB
+
+ optional SplitSchemaPB __split_schema = 1000; // A special field, DO NOT
change it.
}
enum TabletStatePB {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]