From 5dc107e9851e7a7bbf9477802325433d99b247ab Mon Sep 17 00:00:00 2001 From: Jonathan Hsieh Date: Wed, 13 Feb 2013 18:19:12 +0000 Subject: [PATCH] HBASE-7311 Add snapshot information to hbase master webui (Matteo Bertozzi) git-svn-id: https://svn.apache.org/repos/asf/hbase/branches/hbase-7290@1445794 13f79535-47bb-0310-9956-ffa450edef68 --- .../hbase/tmpl/master/MasterStatusTmpl.jamon | 34 ++- .../hbase-webapps/master/snapshot.jsp | 221 ++++++++++++++++++ 2 files changed, 254 insertions(+), 1 deletion(-) create mode 100644 hbase-server/src/main/resources/hbase-webapps/master/snapshot.jsp diff --git a/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.jamon b/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.jamon index 9587af80958..01af3fb999b 100644 --- a/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.jamon +++ b/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.jamon @@ -43,6 +43,7 @@ org.apache.hadoop.hbase.client.HBaseAdmin; org.apache.hadoop.hbase.client.HConnectionManager; org.apache.hadoop.hbase.HTableDescriptor; org.apache.hadoop.hbase.HBaseConfiguration; +org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription; <%if format.equals("json") %> <& ../common/TaskMonitorTmpl; filter = filter; format = "json" &> @@ -146,6 +147,9 @@ org.apache.hadoop.hbase.HBaseConfiguration;
  • Catalog Tables
  • +
  • + Snapshots +
  • @@ -158,6 +162,9 @@ org.apache.hadoop.hbase.HBaseConfiguration; <& catalogTables &>
    +
    + <& userSnapshots &> +
    @@ -277,7 +284,6 @@ org.apache.hadoop.hbase.HBaseConfiguration; <%def userTables> <%java> HTableDescriptor[] tables = admin.listTables(); - HConnectionManager.deleteConnection(admin.getConfiguration(), false); <%if (tables != null && tables.length > 0)%> @@ -302,6 +308,28 @@ org.apache.hadoop.hbase.HBaseConfiguration; +<%def userSnapshots> +<%java> + List snapshots = admin.listSnapshots(); + +<%if (snapshots != null && snapshots.size() > 0)%> +
    + + + + + + <%for SnapshotDescription snapshotDesc : snapshots%> + + + + + + +

    <% snapshots.size() %> snapshot(s) in set.

    +
    Snapshot NameTableCreation Time
    <% snapshotDesc.getName() %> <% snapshotDesc.getTable() %><% new Date(snapshotDesc.getCreationTime()) %>
    + + <%def deadRegionServers> @@ -332,3 +360,7 @@ org.apache.hadoop.hbase.HBaseConfiguration; + +<%java> + HConnectionManager.deleteConnection(admin.getConfiguration(), false); + \ No newline at end of file diff --git a/hbase-server/src/main/resources/hbase-webapps/master/snapshot.jsp b/hbase-server/src/main/resources/hbase-webapps/master/snapshot.jsp new file mode 100644 index 00000000000..25f1f66c54e --- /dev/null +++ b/hbase-server/src/main/resources/hbase-webapps/master/snapshot.jsp @@ -0,0 +1,221 @@ +<%-- +/** + * 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. + */ +--%> +<%@ page contentType="text/html;charset=UTF-8" + import="java.util.Date" + import="java.util.HashMap" + import="org.apache.hadoop.conf.Configuration" + import="org.apache.hadoop.hbase.client.HBaseAdmin" + import="org.apache.hadoop.hbase.client.HConnectionManager" + import="org.apache.hadoop.hbase.HRegionInfo" + import="org.apache.hadoop.hbase.ServerName" + import="org.apache.hadoop.hbase.ServerLoad" + import="org.apache.hadoop.hbase.RegionLoad" + import="org.apache.hadoop.hbase.master.HMaster" + import="org.apache.hadoop.hbase.util.Bytes" + import="org.apache.hadoop.hbase.util.FSUtils" + import="org.apache.hadoop.hbase.protobuf.ProtobufUtil" + import="org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription" + import="java.util.List" + import="java.util.Map" + import="org.apache.hadoop.hbase.HConstants"%><% + HMaster master = (HMaster)getServletContext().getAttribute(HMaster.MASTER); + Configuration conf = master.getConfiguration(); + HBaseAdmin hbadmin = new HBaseAdmin(conf); + boolean readOnly = conf.getBoolean("hbase.master.ui.readonly", false); + String snapshotName = request.getParameter("name"); + SnapshotDescription snapshot = null; + for (SnapshotDescription snapshotDesc: hbadmin.listSnapshots()) { + if (snapshotName.equals(snapshotDesc.getName())) { + snapshot = snapshotDesc; + break; + } + } + + String action = request.getParameter("action"); + String cloneName = request.getParameter("cloneName"); + boolean isActionResultPage = (!readOnly && action != null); +%> + + + + + + + <% if (isActionResultPage) { %> + HBase Master: <%= master.getServerName() %> + <% } else { %> + Snapshot: <%= snapshotName %> + <% } %> + + + + + + + + + <% if (isActionResultPage) { %> + + <% } %> + + + +<% if (isActionResultPage) { %> +
    +
    +
    +

    Snapshot action request...

    +
    + +
    +


    +<% + if (action.equals("restore")) { + hbadmin.restoreSnapshot(snapshotName); + %> Restore Snapshot request accepted. <% + } else if (action.equals("clone")) { + if (cloneName != null && cloneName.length() > 0) { + hbadmin.cloneSnapshot(snapshotName, cloneName); + %> Clone from Snapshot request accepted. <% + } else { + %> Clone from Snapshot request failed, No table name specified. <% + } + } +%> +

    Go Back, or wait for the redirect. +

    +<% } else if (snapshot == null) { %> +
    +
    +
    +

    Snapshot "<%= snapshotName %>" does not exists

    +
    + +
    +

    Go Back, or wait for the redirect. +<% } else { %> +

    +
    +
    +

    Snapshot: <%= snapshotName %>

    +
    +
    + HBase logo +
    +
    +

    Snapshot Attributes

    + + + + + + + + + + + + + +
    TableCreation TimeTypeFormat Version
    <%= snapshot.getTable() %><%= new Date(snapshot.getCreationTime()) %><%= snapshot.getType() %><%= snapshot.getVersion() %>
    +<% + } // end else + +HConnectionManager.deleteConnection(hbadmin.getConfiguration(), false); +%> + + +<% if (!readOnly && action == null && snapshot != null) { %> +


    +Actions: +

    +

    + + + + + + + + + + + + + + + + + + + + + + +
    +  New Table Name (clone): + This action will create a new table by cloning the snapshot content. + There are no copies of data involved. + And writing on the newly created table will not influence the snapshot data. +
     
    +   Restore a specified snapshot. + The restore will replace the content of the original table, + bringing back the content to the snapshot state. + The table must be disabled.
    +
    +

    +

    +<% } %> + + + + +