<%-- /** * 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.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="org.apache.hadoop.hbase.snapshot.SnapshotInfo" import="org.apache.hadoop.util.StringUtils" 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; SnapshotInfo.SnapshotStats stats = null; for (SnapshotDescription snapshotDesc: hbadmin.listSnapshots()) { if (snapshotName.equals(snapshotDesc.getName())) { snapshot = snapshotDesc; stats = SnapshotInfo.getSnapshotStats(conf, snapshot); 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) { %>

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 %>


Snapshot Attributes

<% if (stats.isSnapshotCorrupted()) { %> <% } else { %> <% } %>
Table Creation Time Type Format Version State
<%= snapshot.getTable() %> <%= new Date(snapshot.getCreationTime()) %> <%= snapshot.getType() %> <%= snapshot.getVersion() %>CORRUPTEDok

<%= stats.getStoreFilesCount() %> HFiles (<%= stats.getArchivedStoreFilesCount() %> in archive), total size <%= StringUtils.humanReadableInt(stats.getStoreFilesSize()) %> (<%= stats.getSharedStoreFilePercentage() %>% <%= StringUtils.humanReadableInt(stats.getSharedStoreFilesSize()) %> shared with the source table)

<%= stats.getLogsCount() %> Logs, total size <%= StringUtils.humanReadableInt(stats.getLogsSize()) %>

<% if (stats.isSnapshotCorrupted()) { %>

CORRUPTED Snapshot

<%= stats.getMissingStoreFilesCount() %> hfile(s) and <%= stats.getMissingLogsCount() %> log(s) missing.

<% } %> <% } // end else HConnectionManager.deleteConnection(hbadmin.getConfiguration()); %> <% 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.

<% } %>