@@ -40,6 +40,15 @@ static std::string next_rowset_id() {
40
40
return std::to_string (++cnt);
41
41
}
42
42
43
+ static void fill_schema (doris::TabletSchemaCloudPB* schema, int32_t schema_version) {
44
+ schema->set_schema_version (schema_version);
45
+ for (int i = 0 ; i < 10 ; ++i) {
46
+ auto column = schema->add_column ();
47
+ column->set_unique_id (20000 + i);
48
+ column->set_type (" INT" );
49
+ }
50
+ }
51
+
43
52
static void add_tablet (CreateTabletsRequest& req, int64_t table_id, int64_t index_id,
44
53
int64_t partition_id, int64_t tablet_id, const std::string& rowset_id,
45
54
int32_t schema_version) {
@@ -49,7 +58,7 @@ static void add_tablet(CreateTabletsRequest& req, int64_t table_id, int64_t inde
49
58
tablet->set_partition_id (partition_id);
50
59
tablet->set_tablet_id (tablet_id);
51
60
auto schema = tablet->mutable_schema ();
52
- schema-> set_schema_version ( schema_version);
61
+ fill_schema (schema, schema_version);
53
62
auto first_rowset = tablet->add_rs_metas ();
54
63
first_rowset->set_rowset_id (0 ); // required
55
64
first_rowset->set_rowset_id_v2 (rowset_id);
@@ -148,6 +157,9 @@ TEST(DetachSchemaKVTest, TabletTest) {
148
157
saved_tablet.set_partition_id (partition_id);
149
158
saved_tablet.set_tablet_id (tablet_id);
150
159
saved_tablet.mutable_schema ()->set_schema_version (1 );
160
+ auto column = saved_tablet.mutable_schema ()->add_column ();
161
+ column->set_unique_id (30001 );
162
+ column->set_type (" INT" );
151
163
std::string tablet_key, tablet_val;
152
164
meta_tablet_key ({instance_id, table_id, index_id, partition_id, tablet_id}, &tablet_key);
153
165
ASSERT_TRUE (saved_tablet.SerializeToString (&tablet_val));
@@ -672,4 +684,121 @@ TEST(SchemaKVTest, InsertExistedRowsetTest) {
672
684
check_get_tablet (meta_service.get (), 10005 , 2 );
673
685
}
674
686
687
+ static void check_schema (MetaServiceProxy* meta_service, int64_t tablet_id,
688
+ int32_t schema_version) {
689
+ brpc::Controller cntl;
690
+ GetTabletRequest req;
691
+ GetTabletResponse res;
692
+ req.set_tablet_id (tablet_id);
693
+ meta_service->get_tablet (&cntl, &req, &res, nullptr );
694
+ ASSERT_EQ (res.status ().code (), MetaServiceCode::OK) << tablet_id;
695
+ ASSERT_TRUE (res.has_tablet_meta ()) << tablet_id;
696
+ EXPECT_TRUE (res.tablet_meta ().has_schema ()) << tablet_id;
697
+ EXPECT_EQ (res.tablet_meta ().schema_version (), schema_version) << tablet_id;
698
+ EXPECT_EQ (res.tablet_meta ().schema ().column_size (), 10 ) << tablet_id;
699
+ };
700
+
701
+ static void update_tablet (MetaServiceProxy* meta_service, int64_t tablet_id) {
702
+ brpc::Controller cntl;
703
+ UpdateTabletRequest req;
704
+ UpdateTabletResponse res;
705
+
706
+ auto meta_info = req.add_tablet_meta_infos ();
707
+ meta_info->set_disable_auto_compaction (true );
708
+ meta_info->set_tablet_id (tablet_id);
709
+
710
+ meta_service->update_tablet (&cntl, &req, &res, nullptr );
711
+ ASSERT_EQ (res.status ().code (), MetaServiceCode::OK) << tablet_id;
712
+ }
713
+
714
+ TEST (AlterSchemaKVTest, AlterDisableAutoCompactionTest) {
715
+ // case 1 config::write_schema_kv = true;
716
+ {
717
+ auto meta_service = get_meta_service ();
718
+ config::write_schema_kv = true ;
719
+ // config::meta_schema_value_version = 0;
720
+ ASSERT_NO_FATAL_FAILURE (
721
+ create_tablet (meta_service.get (), 10001 , 10002 , 10003 , 10004 , next_rowset_id (), 0 ));
722
+ check_get_tablet (meta_service.get (), 10004 , 0 );
723
+ check_schema (meta_service.get (), 10004 , 0 );
724
+
725
+ // config::meta_schema_value_version = 1;
726
+ ASSERT_NO_FATAL_FAILURE (
727
+ create_tablet (meta_service.get (), 10001 , 10002 , 10003 , 10005 , next_rowset_id (), 2 ));
728
+ check_get_tablet (meta_service.get (), 10005 , 2 );
729
+
730
+ update_tablet (meta_service.get (), 10005 );
731
+ check_schema (meta_service.get (), 10005 , 2 );
732
+ }
733
+
734
+ // case 2 config::write_schema_kv = false;
735
+ {
736
+ auto meta_service = get_meta_service ();
737
+ config::write_schema_kv = false ;
738
+ auto defer1 =
739
+ std::make_unique<std::function<void ()>>([]() { config::write_schema_kv = true ; });
740
+
741
+ // config::meta_schema_value_version = 0;
742
+ ASSERT_NO_FATAL_FAILURE (
743
+ create_tablet (meta_service.get (), 10001 , 10002 , 10003 , 10004 , next_rowset_id (), 0 ));
744
+ check_get_tablet (meta_service.get (), 10004 , 0 );
745
+ check_schema (meta_service.get (), 10004 , 0 );
746
+
747
+ // config::meta_schema_value_version = 1;
748
+ ASSERT_NO_FATAL_FAILURE (
749
+ create_tablet (meta_service.get (), 10001 , 10002 , 10003 , 10005 , next_rowset_id (), 2 ));
750
+ check_get_tablet (meta_service.get (), 10005 , 2 );
751
+
752
+ update_tablet (meta_service.get (), 10005 );
753
+ check_schema (meta_service.get (), 10005 , 2 );
754
+ }
755
+
756
+ // case 3 config::write_schema_kv = false, create tablet, config::write_schema_kv = true;
757
+ {
758
+ auto meta_service = get_meta_service ();
759
+ config::write_schema_kv = false ;
760
+ auto defer1 =
761
+ std::make_unique<std::function<void ()>>([]() { config::write_schema_kv = true ; });
762
+
763
+ // config::meta_schema_value_version = 0;
764
+ ASSERT_NO_FATAL_FAILURE (
765
+ create_tablet (meta_service.get (), 10001 , 10002 , 10003 , 10004 , next_rowset_id (), 0 ));
766
+ check_get_tablet (meta_service.get (), 10004 , 0 );
767
+ check_schema (meta_service.get (), 10004 , 0 );
768
+
769
+ // config::meta_schema_value_version = 1;
770
+ ASSERT_NO_FATAL_FAILURE (
771
+ create_tablet (meta_service.get (), 10001 , 10002 , 10003 , 10005 , next_rowset_id (), 2 ));
772
+ check_get_tablet (meta_service.get (), 10005 , 2 );
773
+ config::write_schema_kv = true ;
774
+ update_tablet (meta_service.get (), 10005 );
775
+ check_schema (meta_service.get (), 10005 , 2 );
776
+ }
777
+
778
+ // case 4 config::write_schema_kv = false, create tablet, config::write_schema_kv = true;
779
+ // meta_schema_value_version = 0, meta_schema_value_version = 1
780
+ {
781
+ auto meta_service = get_meta_service ();
782
+ config::write_schema_kv = false ;
783
+ auto defer1 = std::make_unique<std::function<void ()>>([]() {
784
+ config::write_schema_kv = true ;
785
+ config::meta_schema_value_version = 1 ;
786
+ });
787
+
788
+ config::meta_schema_value_version = 0 ;
789
+ ASSERT_NO_FATAL_FAILURE (
790
+ create_tablet (meta_service.get (), 10001 , 10002 , 10003 , 10004 , next_rowset_id (), 0 ));
791
+ check_get_tablet (meta_service.get (), 10004 , 0 );
792
+ check_schema (meta_service.get (), 10004 , 0 );
793
+
794
+ config::meta_schema_value_version = 1 ;
795
+ ASSERT_NO_FATAL_FAILURE (
796
+ create_tablet (meta_service.get (), 10001 , 10002 , 10003 , 10005 , next_rowset_id (), 2 ));
797
+ check_get_tablet (meta_service.get (), 10005 , 2 );
798
+ config::write_schema_kv = true ;
799
+ update_tablet (meta_service.get (), 10005 );
800
+ check_schema (meta_service.get (), 10005 , 2 );
801
+ }
802
+ }
803
+
675
804
} // namespace doris::cloud
0 commit comments