You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@quickstep.apache.org by hb...@apache.org on 2016/06/29 21:06:38 UTC

[09/19] incubator-quickstep git commit: Get number of active queries (total and by priority level)

Get number of active queries (total and by priority level)

- Unit tests to check the feature.


Project: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/commit/2e94297c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/tree/2e94297c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/diff/2e94297c

Branch: refs/heads/scheduler++
Commit: 2e94297c3bbdc93795b71d4b6b27e62a74df3ddd
Parents: 9b3f4ce
Author: Harshad Deshmukh <hb...@apache.org>
Authored: Fri Jun 24 10:42:56 2016 -0500
Committer: Harshad Deshmukh <hb...@apache.org>
Committed: Wed Jun 29 16:06:07 2016 -0500

----------------------------------------------------------------------
 query_execution/Learner.hpp                | 16 +++++++-
 query_execution/tests/Learner_unittest.cpp | 54 ++++++++++++++++++++-----
 2 files changed, 58 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/2e94297c/query_execution/Learner.hpp
----------------------------------------------------------------------
diff --git a/query_execution/Learner.hpp b/query_execution/Learner.hpp
index 9d51877..fb0e4cb 100644
--- a/query_execution/Learner.hpp
+++ b/query_execution/Learner.hpp
@@ -102,10 +102,24 @@ class Learner {
   // at this point.
   void updateProbabilitiesOfAllPriorityLevels(const std::size_t priority_level);
 
-  inline const std::size_t hasActiveQueries() const {
+  inline const bool hasActiveQueries() const {
     return !query_id_to_priority_lookup_.empty();
   }
 
+  inline const std::size_t getNumActiveQueriesInPriorityLevel(
+      const std::size_t priority_level) const {
+    const auto it = execution_stats_.find(priority_level);
+    if (it != execution_stats_.end()) {
+      return it->second.size();
+    } else {
+      return 0;
+    }
+  }
+
+  inline const std::size_t getTotalNumActiveQueries() const {
+    return query_id_to_priority_lookup_.size();
+  }
+
  private:
   /**
    * @brief Initialize the default probabilities for the queries.

http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/2e94297c/query_execution/tests/Learner_unittest.cpp
----------------------------------------------------------------------
diff --git a/query_execution/tests/Learner_unittest.cpp b/query_execution/tests/Learner_unittest.cpp
index cab241a..74353f0 100644
--- a/query_execution/tests/Learner_unittest.cpp
+++ b/query_execution/tests/Learner_unittest.cpp
@@ -24,32 +24,64 @@
 
 namespace quickstep {
 
-TEST(LearnerTest, AddQueryTest) {
+TEST(LearnerTest, AddAndRemoveQueryTest) {
   Learner learner;
   std::unique_ptr<QueryHandle> handle;
-  handle.reset(new QueryHandle(1, 1));
+  const std::size_t kPriorityLevel1 = 1;
+  handle.reset(new QueryHandle(1, kPriorityLevel1));
 
   EXPECT_FALSE(learner.hasActiveQueries());
   learner.addQuery(*handle);
+  EXPECT_EQ(1u, learner.getTotalNumActiveQueries());
+  EXPECT_EQ(1u, learner.getNumActiveQueriesInPriorityLevel(kPriorityLevel1));
   EXPECT_TRUE(learner.hasActiveQueries());
+  learner.removeQuery(handle->query_id());
+  EXPECT_EQ(0u, learner.getTotalNumActiveQueries());
+  EXPECT_EQ(0u, learner.getNumActiveQueriesInPriorityLevel(kPriorityLevel1));
+  EXPECT_FALSE(learner.hasActiveQueries());
+
+  const std::size_t kPriorityLevel2 = 1;
+  handle.reset(new QueryHandle(1, kPriorityLevel2));
+  learner.addQuery(*handle);
+  EXPECT_EQ(1u, learner.getTotalNumActiveQueries());
+  EXPECT_EQ(1u, learner.getNumActiveQueriesInPriorityLevel(kPriorityLevel2));
+  EXPECT_TRUE(learner.hasActiveQueries());
+  learner.removeQuery(handle->query_id());
+  EXPECT_EQ(0u, learner.getTotalNumActiveQueries());
+  EXPECT_EQ(0u, learner.getNumActiveQueriesInPriorityLevel(kPriorityLevel2));
+  EXPECT_FALSE(learner.hasActiveQueries());
 }
 
-TEST(LearnerTest, RemoveQueryTest) {
+TEST(LearnerTest, MultipleQueriesSamePriorityAddRemoveTest) {
   Learner learner;
-  std::unique_ptr<QueryHandle> handle;
-  handle.reset(new QueryHandle(1, 1));
+  std::unique_ptr<QueryHandle> handle1, handle2;
+  const std::size_t kPriorityLevel = 1;
+  handle1.reset(new QueryHandle(1, kPriorityLevel));
+  handle2.reset(new QueryHandle(2, kPriorityLevel));
 
   EXPECT_FALSE(learner.hasActiveQueries());
-  learner.addQuery(*handle);
+  EXPECT_EQ(0u, learner.getTotalNumActiveQueries());
+  EXPECT_EQ(0u, learner.getNumActiveQueriesInPriorityLevel(kPriorityLevel));
+
+  learner.addQuery(*handle1);
   EXPECT_TRUE(learner.hasActiveQueries());
-  learner.removeQuery(handle->query_id());
-  EXPECT_FALSE(learner.hasActiveQueries());
+  EXPECT_EQ(1u, learner.getTotalNumActiveQueries());
+  EXPECT_EQ(1u, learner.getNumActiveQueriesInPriorityLevel(kPriorityLevel));
+  learner.addQuery(*handle2);
+  EXPECT_TRUE(learner.hasActiveQueries());
+  EXPECT_EQ(2u, learner.getTotalNumActiveQueries());
+  EXPECT_EQ(2u, learner.getNumActiveQueriesInPriorityLevel(kPriorityLevel));
 
-  handle.reset(new QueryHandle(2, 1));
-  learner.addQuery(*handle);
+  learner.removeQuery(handle1->query_id());
   EXPECT_TRUE(learner.hasActiveQueries());
-  learner.removeQuery(handle->query_id());
+  EXPECT_EQ(1u, learner.getTotalNumActiveQueries());
+  EXPECT_EQ(1u, learner.getNumActiveQueriesInPriorityLevel(kPriorityLevel));
+
+  learner.removeQuery(handle2->query_id());
+
   EXPECT_FALSE(learner.hasActiveQueries());
+  EXPECT_EQ(0u, learner.getTotalNumActiveQueries());
+  EXPECT_EQ(0u, learner.getNumActiveQueriesInPriorityLevel(kPriorityLevel));
 }
 
 }  // namespace quickstep