KUDU-1557. maintenance_manager: return most recently completed ops first

This changes the order of maintenance manager operations in the
maintenance manager status dump so that the most recently completed
operation is first in the list.

Change-Id: I7783bc8cee1beb0f7accaedbd46fb1e3a49168cc
Reviewed-on: http://gerrit.cloudera.org:8080/4296
Reviewed-by: Adar Dembo <[email protected]>
Tested-by: Kudu Jenkins


Project: http://git-wip-us.apache.org/repos/asf/kudu/repo
Commit: http://git-wip-us.apache.org/repos/asf/kudu/commit/22d68a0c
Tree: http://git-wip-us.apache.org/repos/asf/kudu/tree/22d68a0c
Diff: http://git-wip-us.apache.org/repos/asf/kudu/diff/22d68a0c

Branch: refs/heads/master
Commit: 22d68a0c30a72e29b3fe83e31bd80a417a2f1101
Parents: 531e7d9
Author: Todd Lipcon <[email protected]>
Authored: Thu Sep 1 17:21:36 2016 -0700
Committer: Todd Lipcon <[email protected]>
Committed: Fri Sep 2 01:56:15 2016 +0000

----------------------------------------------------------------------
 src/kudu/util/maintenance_manager-test.cc | 5 +++--
 src/kudu/util/maintenance_manager.cc      | 6 +++++-
 2 files changed, 8 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kudu/blob/22d68a0c/src/kudu/util/maintenance_manager-test.cc
----------------------------------------------------------------------
diff --git a/src/kudu/util/maintenance_manager-test.cc 
b/src/kudu/util/maintenance_manager-test.cc
index 73e11a6..2448766 100644
--- a/src/kudu/util/maintenance_manager-test.cc
+++ b/src/kudu/util/maintenance_manager-test.cc
@@ -293,8 +293,9 @@ TEST_F(MaintenanceManagerTest, TestCompletedOpsHistory) {
     manager_->GetMaintenanceManagerStatusDump(&status_pb);
     // The size should be at most the history_size.
     ASSERT_GE(kHistorySize, status_pb.completed_operations_size());
-    // See that we have the right name, even if we wrap around.
-    ASSERT_EQ(name, status_pb.completed_operations(i % 4).name());
+    // The most recently completed op should always be first, even if we wrap
+    // around.
+    ASSERT_EQ(name, status_pb.completed_operations(0).name());
   }
 }
 

http://git-wip-us.apache.org/repos/asf/kudu/blob/22d68a0c/src/kudu/util/maintenance_manager.cc
----------------------------------------------------------------------
diff --git a/src/kudu/util/maintenance_manager.cc 
b/src/kudu/util/maintenance_manager.cc
index 7628fbb..11fa614 100644
--- a/src/kudu/util/maintenance_manager.cc
+++ b/src/kudu/util/maintenance_manager.cc
@@ -411,7 +411,11 @@ void 
MaintenanceManager::GetMaintenanceManagerStatusDump(MaintenanceManagerStatu
     }
   }
 
-  for (const CompletedOp& completed_op : completed_ops_) {
+  for (int n = 1; n <= completed_ops_.size(); n++) {
+    int i = completed_ops_count_ - n;
+    if (i < 0) break;
+    const auto& completed_op = completed_ops_[i % completed_ops_.size()];
+
     if (!completed_op.name.empty()) {
       MaintenanceManagerStatusPB_CompletedOpPB* completed_pb = 
out_pb->add_completed_operations();
       completed_pb->set_name(completed_op.name);

Reply via email to