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]

Reply via email to