You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by ya...@apache.org on 2021/03/12 05:45:14 UTC

[incubator-doris] branch master updated: [UT] fix memory tracker ut (#5501)

This is an automated email from the ASF dual-hosted git repository.

yangzhg pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-doris.git


The following commit(s) were added to refs/heads/master by this push:
     new c9a25aa  [UT] fix memory tracker ut (#5501)
c9a25aa is described below

commit c9a25aa29e5bebb5d5a20d7bc3e9f086841f3417
Author: stdpain <34...@users.noreply.github.com>
AuthorDate: Fri Mar 12 13:45:04 2021 +0800

    [UT] fix memory tracker ut (#5501)
    
    * [UT] fix memory tracker ut
    
    * Update mem_limit_test.cpp
---
 be/test/runtime/CMakeLists.txt     |   2 +-
 be/test/runtime/mem_limit_test.cpp | 182 +++++++------------------------------
 2 files changed, 35 insertions(+), 149 deletions(-)

diff --git a/be/test/runtime/CMakeLists.txt b/be/test/runtime/CMakeLists.txt
index 0d0e33c..6c7e5ac 100644
--- a/be/test/runtime/CMakeLists.txt
+++ b/be/test/runtime/CMakeLists.txt
@@ -43,7 +43,7 @@ ADD_BE_TEST(fragment_mgr_test)
 
 #ADD_BE_TEST(tmp_file_mgr_test)
 #ADD_BE_TEST(disk_io_mgr_test)
-#ADD_BE_TEST(mem_limit_test)
+ADD_BE_TEST(mem_limit_test)
 #ADD_BE_TEST(buffered_block_mgr2_test)
 #ADD_BE_TEST(buffered_tuple_stream2_test)
 ADD_BE_TEST(stream_load_pipe_test)
diff --git a/be/test/runtime/mem_limit_test.cpp b/be/test/runtime/mem_limit_test.cpp
index 487a54b..2e27970 100644
--- a/be/test/runtime/mem_limit_test.cpp
+++ b/be/test/runtime/mem_limit_test.cpp
@@ -23,89 +23,38 @@
 
 namespace doris {
 
-TEST(MemTestTest, SingleTrackerNoLimit) {
-    MemTracker t(-1);
-    EXPECT_FALSE(t.has_limit());
-    t.Consume(10);
-    EXPECT_EQ(t.consumption(), 10);
-    t.Consume(10);
-    EXPECT_EQ(t.consumption(), 20);
-    t.Release(15);
-    EXPECT_EQ(t.consumption(), 5);
-    EXPECT_FALSE(t.LimitExceeded(MemLimit::HARD));
+TEST(MemTrackerTest, SingleTrackerNoLimit) {
+    auto t = MemTracker::CreateTracker();
+    EXPECT_FALSE(t->has_limit());
+    t->Consume(10);
+    EXPECT_EQ(t->consumption(), 10);
+    t->Consume(10);
+    EXPECT_EQ(t->consumption(), 20);
+    t->Release(15);
+    EXPECT_EQ(t->consumption(), 5);
+    EXPECT_FALSE(t->LimitExceeded(MemLimit::HARD));
+    t->Release(5);
 }
 
 TEST(MemTestTest, SingleTrackerWithLimit) {
-    MemTracker t(11);
-    EXPECT_TRUE(t.has_limit());
-    t.Consume(10);
-    EXPECT_EQ(t.consumption(), 10);
-    EXPECT_FALSE(t.LimitExceeded(MemLimit::HARD));
-    t.Consume(10);
-    EXPECT_EQ(t.consumption(), 20);
-    EXPECT_TRUE(t.LimitExceeded(MemLimit::HARD));
-    t.Release(15);
-    EXPECT_EQ(t.consumption(), 5);
-    EXPECT_FALSE(t.LimitExceeded(MemLimit::HARD));
+    auto t = MemTracker::CreateTracker(11, "limit tracker");
+    EXPECT_TRUE(t->has_limit());
+    t->Consume(10);
+    EXPECT_EQ(t->consumption(), 10);
+    EXPECT_FALSE(t->LimitExceeded(MemLimit::HARD));
+    t->Consume(10);
+    EXPECT_EQ(t->consumption(), 20);
+    EXPECT_TRUE(t->LimitExceeded(MemLimit::HARD));
+    t->Release(15);
+    EXPECT_EQ(t->consumption(), 5);
+    EXPECT_FALSE(t->LimitExceeded(MemLimit::HARD));
+    t->Release(5);
 }
 
-#if 0
-TEST(MemTestTest, ConsumptionMetric) {
-    TMetricDef md;
-    md.__set_key("test");
-    md.__set_units(TUnit::BYTES);
-    md.__set_kind(TMetricKind::GAUGE);
-    UIntGauge metric(md, 0);
-    EXPECT_EQ(metric.value(), 0);
-
-    MemTracker t(&metric, 100, -1, "");
-    EXPECT_TRUE(t.has_limit());
-    EXPECT_EQ(t.consumption(), 0);
-
-    // Consume()/Release() arguments have no effect
-    t.Consume(150);
-    EXPECT_EQ(t.consumption(), 0);
-    EXPECT_EQ(t.peak_consumption(), 0);
-    EXPECT_FALSE(t.LimitExceeded(MemLimit::HARD));
-    t.Release(5);
-    EXPECT_EQ(t.consumption(), 0);
-    EXPECT_EQ(t.peak_consumption(), 0);
-    EXPECT_FALSE(t.LimitExceeded(MemLimit::HARD));
-
-    metric.Increment(10);
-    // _consumption is only updated with _consumption_metric after calls to
-    // Consume()/Release() with a non-zero value
-    t.Consume(1);
-    EXPECT_EQ(t.consumption(), 10);
-    EXPECT_EQ(t.peak_consumption(), 10);
-    metric.Increment(-5);
-    t.Consume(-1);
-    EXPECT_EQ(t.consumption(), 5);
-    EXPECT_EQ(t.peak_consumption(), 10);
-    EXPECT_FALSE(t.LimitExceeded(MemLimit::HARD));
-    metric.Increment(150);
-    t.Consume(1);
-    EXPECT_EQ(t.consumption(), 155);
-    EXPECT_EQ(t.peak_consumption(), 155);
-    EXPECT_TRUE(t.LimitExceeded(MemLimit::HARD));
-    metric.Increment(-150);
-    t.Consume(-1);
-    EXPECT_EQ(t.consumption(), 5);
-    EXPECT_EQ(t.peak_consumption(), 155);
-    EXPECT_FALSE(t.LimitExceeded(MemLimit::HARD));
-    // _consumption is not updated when Consume()/Release() is called with a zero value
-    metric.Increment(10);
-    t.Consume(0);
-    EXPECT_EQ(t.consumption(), 5);
-    EXPECT_EQ(t.peak_consumption(), 155);
-    EXPECT_FALSE(t.LimitExceeded(MemLimit::HARD));
-}
-#endif // #end #if 0
-
 TEST(MemTestTest, TrackerHierarchy) {
-    auto p = std::make_shared<MemTracker>(100);
-    auto c1 = std::make_shared<MemTracker>(80, "", p);
-    auto c2 = std::make_shared<MemTracker>(50, "", p);
+    auto p = MemTracker::CreateTracker(100);
+    auto c1 = MemTracker::CreateTracker(80, "c1", p);
+    auto c2 = MemTracker::CreateTracker(50, "c2", p);
 
     // everything below limits
     c1->Consume(60);
@@ -141,12 +90,14 @@ TEST(MemTestTest, TrackerHierarchy) {
     EXPECT_TRUE(c2->AnyLimitExceeded(MemLimit::HARD));
     EXPECT_EQ(p->consumption(), 100);
     EXPECT_FALSE(p->LimitExceeded(MemLimit::HARD));
+    c1->Release(40);
+    c2->Release(60);
 }
 
 TEST(MemTestTest, TrackerHierarchyTryConsume) {
-    auto p = std::make_shared<MemTracker>(100);
-    auto c1 = std::make_shared<MemTracker>(80, "", p);
-    auto c2 = std::make_shared<MemTracker>(50, "", p);
+    auto p = MemTracker::CreateTracker(100);
+    auto c1 = MemTracker::CreateTracker(80, "c1", p);
+    auto c2 = MemTracker::CreateTracker(50, "c2", p);
 
     // everything below limits
     bool consumption = c1->TryConsume(60);
@@ -163,7 +114,7 @@ TEST(MemTestTest, TrackerHierarchyTryConsume) {
 
     // p goes over limit
     consumption = c2->TryConsume(50);
-    EXPECT_EQ(consumption, true);
+    EXPECT_EQ(consumption, false);
     EXPECT_EQ(c1->consumption(), 60);
     EXPECT_FALSE(c1->LimitExceeded(MemLimit::HARD));
     EXPECT_FALSE(c1->AnyLimitExceeded(MemLimit::HARD));
@@ -185,81 +136,16 @@ TEST(MemTestTest, TrackerHierarchyTryConsume) {
     EXPECT_FALSE(c2->AnyLimitExceeded(MemLimit::HARD));
     EXPECT_EQ(p->consumption(), 50);
     EXPECT_FALSE(p->LimitExceeded(MemLimit::HARD));
-}
-
-#if 0
-class GcFunctionHelper {
-    public:
-        static const int NUM_RELEASE_BYTES = 1;
-
-        GcFunctionHelper(MemTracker* tracker) : _tracker(tracker) { }
-
-        ~GcFunctionHelper() {}
 
-        void gc_func() { _tracker->Release(NUM_RELEASE_BYTES); }
 
-    private:
-        MemTracker* _tracker;
-};
-
-TEST(MemTestTest, GcFunctions) {
-    MemTracker t(10);
-    ASSERT_TRUE(t.has_limit());
-
-    t.Consume(9);
-    EXPECT_FALSE(t.LimitExceeded(MemLimit::HARD));
-
-    // Test TryConsume()
-    EXPECT_FALSE(t.TryConsume(2));
-    EXPECT_EQ(t.consumption(), 9);
-    EXPECT_FALSE(t.LimitExceeded(MemLimit::HARD));
-
-    // Attach GcFunction that releases 1 byte
-    GcFunctionHelper gc_func_helper(&t);
-    t.AddGcFunction(boost::bind(&GcFunctionHelper::gc_func, &gc_func_helper));
-    EXPECT_TRUE(t.TryConsume(2));
-    EXPECT_EQ(t.consumption(), 10);
-    EXPECT_FALSE(t.LimitExceeded(MemLimit::HARD));
-
-    // GcFunction will be called even though TryConsume() fails
-    EXPECT_FALSE(t.TryConsume(2));
-    EXPECT_EQ(t.consumption(), 9);
-    EXPECT_FALSE(t.LimitExceeded(MemLimit::HARD));
-
-    // GcFunction won't be called
-    EXPECT_TRUE(t.TryConsume(1));
-    EXPECT_EQ(t.consumption(), 10);
-    EXPECT_FALSE(t.LimitExceeded(MemLimit::HARD));
-
-    // Test LimitExceeded(MemLimit::HARD)
-    t.Consume(1);
-    EXPECT_EQ(t.consumption(), 11);
-    EXPECT_FALSE(t.LimitExceeded(MemLimit::HARD));
-    EXPECT_EQ(t.consumption(), 10);
-
-    // Add more GcFunctions, test that we only call them until the limit is no longer
-    // exceeded
-    GcFunctionHelper gc_func_helper2(&t);
-    t.AddGcFunction(boost::bind(&GcFunctionHelper::gc_func, &gc_func_helper2));
-    GcFunctionHelper gc_func_helper3(&t);
-    t.AddGcFunction(boost::bind(&GcFunctionHelper::gc_func, &gc_func_helper3));
-    t.Consume(1);
-    EXPECT_EQ(t.consumption(), 11);
-    EXPECT_FALSE(t.LimitExceeded(MemLimit::HARD));
-    EXPECT_EQ(t.consumption(), 10);
+    c1->Release(40);
+    c2->Release(10);
 }
-#endif // enf #if 0
 
 } // end namespace doris
 
 int main(int argc, char** argv) {
-    // std::string conffile = std::string(getenv("DORIS_HOME")) + "/conf/be.conf";
-    // if (!doris::config::init(conffile.c_str(), false)) {
-    //     fprintf(stderr, "error read config file. \n");
-    //     return -1;
-    // }
     doris::init_glog("be-test");
     ::testing::InitGoogleTest(&argc, argv);
-
     return RUN_ALL_TESTS();
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org