You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kudu.apache.org by al...@apache.org on 2018/05/21 05:07:30 UTC

[2/2] kudu git commit: [webui] Add rudimentary balance info to /table

[webui] Add rudimentary balance info to /table

See what it looks like at:

https://github.com/wdberkeley/kudu/blob/rbweb/www/tablebalancesection.png

Clicking the (?) pops out a quick explanation of what skew is, the same
way as the (?)'s work on /config.

Change-Id: Ieb6e29c10e7d5a3a48ea11438c54576664703bb9
Reviewed-on: http://gerrit.cloudera.org:8080/10461
Tested-by: Kudu Jenkins
Reviewed-by: Alexey Serbin <as...@cloudera.com>


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

Branch: refs/heads/master
Commit: 9de558c2ff0c53f9abb8940b7d9ce0e2befde051
Parents: b73dec1
Author: Will Berkeley <wd...@apache.org>
Authored: Fri May 18 23:31:33 2018 -0700
Committer: Alexey Serbin <as...@cloudera.com>
Committed: Sat May 19 19:50:40 2018 +0000

----------------------------------------------------------------------
 src/kudu/master/master_path_handlers.cc | 19 +++++++++++++++++++
 www/table.mustache                      | 28 ++++++++++++++++++++++++++++
 2 files changed, 47 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kudu/blob/9de558c2/src/kudu/master/master_path_handlers.cc
----------------------------------------------------------------------
diff --git a/src/kudu/master/master_path_handlers.cc b/src/kudu/master/master_path_handlers.cc
index ae9de5c..eda548b 100644
--- a/src/kudu/master/master_path_handlers.cc
+++ b/src/kudu/master/master_path_handlers.cc
@@ -21,6 +21,7 @@
 #include <array>
 #include <cstdint>
 #include <iosfwd>
+#include <limits>
 #include <map>
 #include <memory>
 #include <sstream>
@@ -291,6 +292,7 @@ void MasterPathHandlers::HandleTablePage(const Webserver::WebRequest& req,
   // up the partition schema, tablet summary, and tablet detail tables.
   std::vector<string> range_partitions;
   map<string, int> summary_states;
+  map<string, int> replica_counts;
   (*output)["detail_partition_schema_header"] = partition_schema.PartitionTableHeader(schema);
   EasyJson tablets_detail_json = output->Set("tablets_detail", EasyJson::kArray);
   for (const scoped_refptr<TabletInfo>& tablet : tablets) {
@@ -304,6 +306,7 @@ void MasterPathHandlers::HandleTablePage(const Webserver::WebRequest& req,
     if (l.data().pb.has_consensus_state()) {
       const ConsensusStatePB& cstate = l.data().pb.consensus_state();
       for (const auto& peer : cstate.committed_config().peers()) {
+        replica_counts[peer.permanent_uuid()]++;
         TabletDetailPeerInfo peer_info;
         shared_ptr<TSDescriptor> ts_desc;
         if (master_->ts_manager()->LookupTSByUUID(peer.permanent_uuid(), &ts_desc)) {
@@ -368,6 +371,22 @@ void MasterPathHandlers::HandleTablePage(const Webserver::WebRequest& req,
     state_json["percentage"] = tablets.empty() ? "0.0" : StringPrintf("%.2f", percentage);
   }
 
+  // Set up the report on replica distribution.
+  EasyJson replica_dist_json = output->Set("replica_distribution", EasyJson::kObject);
+  EasyJson counts_json = replica_dist_json.Set("counts", EasyJson::kArray);
+  int min_count = replica_counts.empty() ? 0 : std::numeric_limits<int>::max();
+  int max_count = 0;
+  for (const auto& entry : replica_counts) {
+    EasyJson count_json = counts_json.PushBack(EasyJson::kObject);
+    count_json["ts_uuid"] = entry.first;
+    count_json["count"] = entry.second;
+    min_count = std::min(min_count, entry.second);
+    max_count = std::max(max_count, entry.second);
+  }
+  replica_dist_json["max_count"] = max_count;
+  replica_dist_json["min_count"] = min_count;
+  replica_dist_json["skew"] = max_count - min_count;
+
   // Used to make the Impala CREATE TABLE statement.
   (*output)["master_addresses"] = MasterAddrsToCsv();
 

http://git-wip-us.apache.org/repos/asf/kudu/blob/9de558c2/www/table.mustache
----------------------------------------------------------------------
diff --git a/www/table.mustache b/www/table.mustache
index 734f084..8de206b 100644
--- a/www/table.mustache
+++ b/www/table.mustache
@@ -121,6 +121,34 @@ under the License.
     </table>
   </div>
 
+  {{#replica_distribution}}
+  <h3>Tablet Replica Distribution</h3>
+  <table class='table table-striped table-hover'>
+    <tbody>
+      <tr><td>Min Count</td><td>{{min_count}}</td></tr>
+      <tr><td>Max Count</td><td>{{max_count}}</td></tr>
+      <tr>
+        <td>
+          <p>Skew <small>(<a href="#skew-help" data-toggle="collapse">?</a>)</small></p>
+          <div id="skew-help" class="collapse text-muted"><p>
+            Skew is the difference between the max and min replica counts.
+            It measures how imbalanced the table is.
+          </p></div>
+        </td>
+        <td>{{skew}}</td>
+      </tr>
+    </tbody>
+  </table>
+  <table class='table table-striped table-hover'>
+    <thead><tr><th>Tablet Server</th><th>Replica Count</th></thead>
+    <tbody>
+      {{#counts}}
+        <tr><td>{{ts_uuid}}</td><td>{{count}}</td></tr>
+      {{/counts}}
+    </tbody>
+  </table>
+  {{/replica_distribution}}
+
   <h3>Impala CREATE TABLE statement</h3>
   {{! Unusual formatting below because <pre> preserves whitespace in the output. }}
   <pre><code>CREATE EXTERNAL TABLE `{{name}}` STORED AS KUDU