// Licensed to the Apache Software Foundation (ASF) under one // or more contributor license agreements. See the NOTICE file // distributed with this work for additional information // regarding copyright ownership. The ASF licenses this file // to you under the Apache License, Version 2.0 (the // "License"); you may not use this file except in compliance // with the License. You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, // software distributed under the License is distributed on an // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. #include #include #include "olap/olap_define.h" #include "olap/tablet_meta.h" #include "olap/tablet.h" using namespace std; namespace doris { using RowsetMetaSharedContainerPtr = std::shared_ptr>; class TestTablet : public testing::Test { public: virtual ~TestTablet() { } virtual void SetUp() { _tablet_meta = static_cast( new TabletMeta(1, 2, 15673, 4, 5, TTabletSchema(), 6, {{7, 8}}, UniqueId(9, 10), TTabletType::TABLET_TYPE_DISK)); _json_rowset_meta = R"({ "rowset_id": 540081, "tablet_id": 15673, "txn_id": 4042, "tablet_schema_hash": 567997577, "rowset_type": "BETA_ROWSET", "rowset_state": "VISIBLE", "start_version": 2, "end_version": 2, "version_hash": 8391828013814912580, "num_rows": 3929, "total_disk_size": 84699, "data_disk_size": 84464, "index_disk_size": 235, "empty": false, "load_id": { "hi": -5350970832824939812, "lo": -6717994719194512122 }, "creation_time": 1553765670, "alpha_rowset_extra_meta_pb": { "segment_groups": [ { "segment_group_id": 0, "num_segments": 2, "index_size": 132, "data_size": 576, "num_rows": 5, "zone_maps": [ { "min": "MQ==", "max": "NQ==", "null_flag": false }, { "min": "MQ==", "max": "Mw==", "null_flag": false }, { "min": "J2J1c2gn", "max": "J3RvbSc=", "null_flag": false } ], "empty": false }] } })"; } virtual void TearDown() { } void init_rs_meta(RowsetMetaSharedPtr &pb1, int64_t start, int64_t end) { pb1->init_from_json(_json_rowset_meta); pb1->set_start_version(start); pb1->set_end_version(end); pb1->set_creation_time(10000); } void init_all_rs_meta(std::vector* rs_metas) { RowsetMetaSharedPtr ptr1(new RowsetMeta()); init_rs_meta(ptr1, 0, 0); rs_metas->push_back(ptr1); RowsetMetaSharedPtr ptr2(new RowsetMeta()); init_rs_meta(ptr2, 1, 1); rs_metas->push_back(ptr2); RowsetMetaSharedPtr ptr3(new RowsetMeta()); init_rs_meta(ptr3, 2, 5); rs_metas->push_back(ptr3); RowsetMetaSharedPtr ptr4(new RowsetMeta()); init_rs_meta(ptr4, 6, 9); rs_metas->push_back(ptr4); RowsetMetaSharedPtr ptr5(new RowsetMeta()); init_rs_meta(ptr5, 10, 11); rs_metas->push_back(ptr5); } void fetch_expried_row_rs_meta(std::vector* rs_metas) { RowsetMetaSharedContainerPtr v2(new std::vector()); RowsetMetaSharedPtr ptr1(new RowsetMeta()); init_rs_meta(ptr1, 2, 3); v2->push_back(ptr1); RowsetMetaSharedPtr ptr2(new RowsetMeta()); init_rs_meta(ptr2, 4, 5); v2->push_back(ptr2); RowsetMetaSharedContainerPtr v3(new std::vector()); RowsetMetaSharedPtr ptr3(new RowsetMeta()); init_rs_meta(ptr3, 6, 6); v3->push_back(ptr3); RowsetMetaSharedPtr ptr4(new RowsetMeta()); init_rs_meta(ptr4, 7, 8); v3->push_back(ptr4); RowsetMetaSharedContainerPtr v4(new std::vector()); RowsetMetaSharedPtr ptr5(new RowsetMeta()); init_rs_meta(ptr5, 6, 8); v4->push_back(ptr5); RowsetMetaSharedPtr ptr6(new RowsetMeta()); init_rs_meta(ptr6, 9, 9); v4->push_back(ptr6); RowsetMetaSharedContainerPtr v5(new std::vector()); RowsetMetaSharedPtr ptr7(new RowsetMeta()); init_rs_meta(ptr7, 10, 10); v5->push_back(ptr7); RowsetMetaSharedPtr ptr8(new RowsetMeta()); init_rs_meta(ptr8, 11, 11); v5->push_back(ptr8); rs_metas->push_back(v2); rs_metas->push_back(v3); rs_metas->push_back(v4); rs_metas->push_back(v5); } protected: std::string _json_rowset_meta; TabletMetaSharedPtr _tablet_meta; }; TEST_F(TestTablet, delete_expired_stale_rowset) { std::vector rs_metas; std::vector expried_rs_metas; init_all_rs_meta(&rs_metas); fetch_expried_row_rs_meta(&expried_rs_metas); for (auto &rowset : rs_metas) { _tablet_meta->add_rs_meta(rowset); } TabletSharedPtr _tablet(new Tablet(_tablet_meta, nullptr)); _tablet->init(); for(auto ptr: expried_rs_metas) { for (auto rs : *ptr) { _tablet->_timestamped_version_tracker.add_version(rs->version()); } _tablet->_timestamped_version_tracker.add_stale_path_version(*ptr); } _tablet->delete_expired_stale_rowset(); ASSERT_EQ(0, _tablet->_timestamped_version_tracker._stale_version_path_map.size()); _tablet.reset(); } } int main(int argc, char** argv) { testing::InitGoogleTest(&argc, argv); auto ret = RUN_ALL_TESTS(); return ret; }