You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by mb...@apache.org on 2013/04/04 12:51:48 UTC

svn commit: r1464429 - in /hbase/branches/0.95/hbase-server/src: main/java/org/apache/hadoop/hbase/master/handler/ main/java/org/apache/hadoop/hbase/master/snapshot/ main/java/org/apache/hadoop/hbase/snapshot/ test/java/org/apache/hadoop/hbase/snapshot/

Author: mbertozzi
Date: Thu Apr  4 10:51:48 2013
New Revision: 1464429

URL: http://svn.apache.org/r1464429
Log:
HBASE-7415 Add task information to snapshot operation (Jesse Yates)

Modified:
    hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/TableEventHandler.java
    hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/CloneSnapshotHandler.java
    hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/DisabledTableSnapshotHandler.java
    hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/RestoreSnapshotHandler.java
    hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.java
    hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.java
    hbase/branches/0.95/hbase-server/src/test/java/org/apache/hadoop/hbase/snapshot/TestRestoreSnapshotHelper.java

Modified: hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/TableEventHandler.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/TableEventHandler.java?rev=1464429&r1=1464428&r2=1464429&view=diff
==============================================================================
--- hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/TableEventHandler.java (original)
+++ hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/TableEventHandler.java Thu Apr  4 10:51:48 2013
@@ -131,10 +131,13 @@ public abstract class TableEventHandler 
           LOG.warn("Error on reopening the regions");
         }
       }
+      completed(null);
     } catch (IOException e) {
       LOG.error("Error manipulating table " + Bytes.toString(tableName), e);
+      completed(e);
     } catch (KeeperException e) {
       LOG.error("Error manipulating table " + Bytes.toString(tableName), e);
+      completed(e);
     } finally {
       releaseTableLock();
     }
@@ -150,6 +153,13 @@ public abstract class TableEventHandler 
     }
   }
 
+  /**
+   * Called after that process() is completed.
+   * @param exception null if process() is successful or not null if something has failed.
+   */
+  protected void completed(final Throwable exception) {
+  }
+
   public boolean reOpenAllRegions(List<HRegionInfo> regions) throws IOException {
     boolean done = false;
     LOG.info("Bucketing regions by region server...");

Modified: hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/CloneSnapshotHandler.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/CloneSnapshotHandler.java?rev=1464429&r1=1464428&r2=1464429&view=diff
==============================================================================
--- hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/CloneSnapshotHandler.java (original)
+++ hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/CloneSnapshotHandler.java Thu Apr  4 10:51:48 2013
@@ -38,6 +38,8 @@ import org.apache.hadoop.hbase.exception
 import org.apache.hadoop.hbase.master.MasterServices;
 import org.apache.hadoop.hbase.master.SnapshotSentinel;
 import org.apache.hadoop.hbase.master.handler.CreateTableHandler;
+import org.apache.hadoop.hbase.monitoring.MonitoredTask;
+import org.apache.hadoop.hbase.monitoring.TaskMonitor;
 import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription;
 import org.apache.hadoop.hbase.snapshot.ClientSnapshotDescriptionUtils;
 import org.apache.hadoop.hbase.snapshot.RestoreSnapshotHelper;
@@ -60,6 +62,7 @@ public class CloneSnapshotHandler extend
   private final SnapshotDescription snapshot;
 
   private final ForeignExceptionDispatcher monitor;
+  private final MonitoredTask status;
 
   private volatile boolean stopped = false;
 
@@ -74,6 +77,8 @@ public class CloneSnapshotHandler extend
 
     // Monitor
     this.monitor = new ForeignExceptionDispatcher();
+    this.status = TaskMonitor.get().createStatus("Cloning  snapshot '" + snapshot.getName() +
+      "' to table " + hTableDescriptor.getNameAsString());
   }
 
   @Override
@@ -88,8 +93,9 @@ public class CloneSnapshotHandler extend
    * will be responsible to add the regions returned by this method to META and do the assignment.
    */
   @Override
-  protected List<HRegionInfo> handleCreateHdfsRegions(final Path tableRootDir, final String tableName)
-      throws IOException {
+  protected List<HRegionInfo> handleCreateHdfsRegions(final Path tableRootDir,
+      final String tableName) throws IOException {
+    status.setStatus("Creating regions for table: " + tableName);
     FileSystem fs = fileSystemManager.getFileSystem();
     Path rootDir = fileSystemManager.getRootDir();
     Path tableDir = new Path(tableRootDir, tableName);
@@ -98,7 +104,7 @@ public class CloneSnapshotHandler extend
       // 1. Execute the on-disk Clone
       Path snapshotDir = SnapshotDescriptionUtils.getCompletedSnapshotDir(snapshot, rootDir);
       RestoreSnapshotHelper restoreHelper = new RestoreSnapshotHelper(conf, fs,
-          snapshot, snapshotDir, hTableDescriptor, tableDir, monitor);
+          snapshot, snapshotDir, hTableDescriptor, tableDir, monitor, status);
       RestoreSnapshotHelper.RestoreMetaChanges metaChanges = restoreHelper.restoreHdfsRegions();
 
       // Clone operation should not have stuff to restore or remove
@@ -108,12 +114,15 @@ public class CloneSnapshotHandler extend
           "A clone should not have regions to remove");
 
       // At this point the clone is complete. Next step is enabling the table.
-      LOG.info("Clone snapshot=" + snapshot.getName() + " on table=" + tableName + " completed!");
+      String msg = "Clone snapshot="+ snapshot.getName() +" on table=" + tableName + " completed!";
+      LOG.info(msg);
+      status.setStatus(msg + " Waiting for table to be enabled...");
 
       // 2. let the CreateTableHandler add the regions to meta
       return metaChanges.getRegionsToAdd();
     } catch (Exception e) {
-      String msg = "clone snapshot=" + ClientSnapshotDescriptionUtils.toString(snapshot) + " failed";
+      String msg = "clone snapshot=" + ClientSnapshotDescriptionUtils.toString(snapshot) +
+        " failed because " + e.getMessage();
       LOG.error(msg, e);
       IOException rse = new RestoreSnapshotException(msg, e, snapshot);
 
@@ -126,6 +135,12 @@ public class CloneSnapshotHandler extend
   @Override
   protected void completed(final Throwable exception) {
     this.stopped = true;
+    if (exception != null) {
+      status.abort("Snapshot '" + snapshot.getName() + "' clone failed because " +
+          exception.getMessage());
+    } else {
+      status.markComplete("Snapshot '"+ snapshot.getName() +"' clone completed and table enabled!");
+    }
     super.completed(exception);
   }
 
@@ -143,7 +158,9 @@ public class CloneSnapshotHandler extend
   public void cancel(String why) {
     if (this.stopped) return;
     this.stopped = true;
-    LOG.info("Stopping clone snapshot=" + snapshot + " because: " + why);
+    String msg = "Stopping clone snapshot=" + snapshot + " because: " + why;
+    LOG.info(msg);
+    status.abort(msg);
     this.monitor.receive(new ForeignException(NAME, new CancellationException(why)));
   }
 

Modified: hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/DisabledTableSnapshotHandler.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/DisabledTableSnapshotHandler.java?rev=1464429&r1=1464428&r2=1464429&view=diff
==============================================================================
--- hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/DisabledTableSnapshotHandler.java (original)
+++ hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/DisabledTableSnapshotHandler.java Thu Apr  4 10:51:48 2013
@@ -32,6 +32,8 @@ import org.apache.hadoop.hbase.ServerNam
 import org.apache.hadoop.hbase.errorhandling.ForeignException;
 import org.apache.hadoop.hbase.errorhandling.TimeoutExceptionInjector;
 import org.apache.hadoop.hbase.master.MasterServices;
+import org.apache.hadoop.hbase.monitoring.MonitoredTask;
+import org.apache.hadoop.hbase.monitoring.TaskMonitor;
 import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription;
 import org.apache.hadoop.hbase.regionserver.HRegion;
 import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;
@@ -77,8 +79,8 @@ public class DisabledTableSnapshotHandle
   // TODO consider parallelizing these operations since they are independent. Right now its just
   // easier to keep them serial though
   @Override
-  public void snapshotRegions(List<Pair<HRegionInfo, ServerName>> regionsAndLocations) throws IOException,
-  KeeperException {
+  public void snapshotRegions(List<Pair<HRegionInfo, ServerName>> regionsAndLocations)
+      throws IOException, KeeperException {
     try {
       timeoutInjector.start();
 
@@ -95,8 +97,10 @@ public class DisabledTableSnapshotHandle
       }
 
       // 2. for each region, write all the info to disk
-      LOG.info("Starting to write region info and WALs for regions for offline snapshot:"
-          + ClientSnapshotDescriptionUtils.toString(snapshot));
+      String msg = "Starting to write region info and WALs for regions for offline snapshot:"
+          + ClientSnapshotDescriptionUtils.toString(snapshot);
+      LOG.info(msg);
+      status.setStatus(msg);
       for (HRegionInfo regionInfo : regions) {
         // 2.1 copy the regionInfo files to the snapshot
         HRegionFileSystem regionFs = HRegionFileSystem.createRegionOnFileSystem(conf, fs,
@@ -110,10 +114,14 @@ public class DisabledTableSnapshotHandle
         Path snapshotRegionDir = regionFs.getRegionDir();
         new CopyRecoveredEditsTask(snapshot, monitor, fs, regionDir, snapshotRegionDir).call();
         monitor.rethrowException();
+        status.setStatus("Completed copying recovered edits for offline snapshot of table: "
+            + snapshot.getTable());
 
         // 2.3 reference all the files in the region
         new ReferenceRegionHFilesTask(snapshot, monitor, regionDir, fs, snapshotRegionDir).call();
         monitor.rethrowException();
+        status.setStatus("Completed referencing HFiles for offline snapshot of table: " +
+          snapshot.getTable());
       }
 
       // 3. write the table info to disk
@@ -123,12 +131,14 @@ public class DisabledTableSnapshotHandle
           FSUtils.getRootDir(conf));
       tableInfoCopyTask.call();
       monitor.rethrowException();
+      status.setStatus("Finished copying tableinfo for snapshot of table: " + snapshot.getTable());
     } catch (Exception e) {
       // make sure we capture the exception to propagate back to the client later
       String reason = "Failed snapshot " + ClientSnapshotDescriptionUtils.toString(snapshot)
           + " due to exception:" + e.getMessage();
       ForeignException ee = new ForeignException(reason, e);
       monitor.receive(ee);
+      status.abort("Snapshot of table: "+ snapshot.getTable() +" failed because " + e.getMessage());
     } finally {
       LOG.debug("Marking snapshot" + ClientSnapshotDescriptionUtils.toString(snapshot)
           + " as finished.");
@@ -138,4 +148,4 @@ public class DisabledTableSnapshotHandle
       timeoutInjector.complete();
     }
   }
-}
\ No newline at end of file
+}

Modified: hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/RestoreSnapshotHandler.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/RestoreSnapshotHandler.java?rev=1464429&r1=1464428&r2=1464429&view=diff
==============================================================================
--- hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/RestoreSnapshotHandler.java (original)
+++ hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/RestoreSnapshotHandler.java Thu Apr  4 10:51:48 2013
@@ -39,6 +39,8 @@ import org.apache.hadoop.hbase.master.Ma
 import org.apache.hadoop.hbase.master.MasterServices;
 import org.apache.hadoop.hbase.master.SnapshotSentinel;
 import org.apache.hadoop.hbase.master.handler.TableEventHandler;
+import org.apache.hadoop.hbase.monitoring.MonitoredTask;
+import org.apache.hadoop.hbase.monitoring.TaskMonitor;
 import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription;
 import org.apache.hadoop.hbase.snapshot.ClientSnapshotDescriptionUtils;
 import org.apache.hadoop.hbase.exceptions.RestoreSnapshotException;
@@ -60,6 +62,8 @@ public class RestoreSnapshotHandler exte
   private final SnapshotDescription snapshot;
 
   private final ForeignExceptionDispatcher monitor;
+  private final MonitoredTask status;
+
   private volatile boolean stopped = false;
 
   public RestoreSnapshotHandler(final MasterServices masterServices,
@@ -78,6 +82,10 @@ public class RestoreSnapshotHandler exte
 
     // This is the new schema we are going to write out as this modification.
     this.hTableDescriptor = htd;
+
+    this.status = TaskMonitor.get().createStatus(
+      "Restoring  snapshot '" + snapshot.getName() + "' to table "
+          + hTableDescriptor.getNameAsString());
   }
 
   /**
@@ -106,27 +114,37 @@ public class RestoreSnapshotHandler exte
       Path snapshotDir = SnapshotDescriptionUtils.getCompletedSnapshotDir(snapshot, rootDir);
       RestoreSnapshotHelper restoreHelper = new RestoreSnapshotHelper(
           masterServices.getConfiguration(), fs,
-          snapshot, snapshotDir, hTableDescriptor, tableDir, monitor);
+          snapshot, snapshotDir, hTableDescriptor, tableDir, monitor, status);
       RestoreSnapshotHelper.RestoreMetaChanges metaChanges = restoreHelper.restoreHdfsRegions();
 
       // 3. Applies changes to .META.
       hris.clear();
+      status.setStatus("Preparing to restore each region");
       if (metaChanges.hasRegionsToAdd()) hris.addAll(metaChanges.getRegionsToAdd());
       if (metaChanges.hasRegionsToRestore()) hris.addAll(metaChanges.getRegionsToRestore());
       List<HRegionInfo> hrisToRemove = metaChanges.getRegionsToRemove();
       MetaEditor.mutateRegions(catalogTracker, hrisToRemove, hris);
 
       // At this point the restore is complete. Next step is enabling the table.
-      LOG.info("Restore snapshot=" + ClientSnapshotDescriptionUtils.toString(snapshot) + " on table=" +
-        Bytes.toString(tableName) + " completed!");
+      LOG.info("Restore snapshot=" + ClientSnapshotDescriptionUtils.toString(snapshot) +
+        " on table=" + Bytes.toString(tableName) + " completed!");
     } catch (IOException e) {
       String msg = "restore snapshot=" + ClientSnapshotDescriptionUtils.toString(snapshot)
           + " failed. Try re-running the restore command.";
       LOG.error(msg, e);
       monitor.receive(new ForeignException(masterServices.getServerName().toString(), e));
       throw new RestoreSnapshotException(msg, e);
-    } finally {
-      this.stopped = true;
+    }
+  }
+
+  @Override
+  protected void completed(final Throwable exception) {
+    this.stopped = true;
+    if (exception != null) {
+      status.abort("Restore snapshot '" + snapshot.getName() + "' failed because " +
+          exception.getMessage());
+    } else {
+      status.markComplete("Restore snapshot '"+ snapshot.getName() +"'!");
     }
   }
 

Modified: hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.java?rev=1464429&r1=1464428&r2=1464429&view=diff
==============================================================================
--- hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.java (original)
+++ hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.java Thu Apr  4 10:51:48 2013
@@ -42,6 +42,8 @@ import org.apache.hadoop.hbase.executor.
 import org.apache.hadoop.hbase.executor.EventType;
 import org.apache.hadoop.hbase.master.MasterServices;
 import org.apache.hadoop.hbase.master.SnapshotSentinel;
+import org.apache.hadoop.hbase.monitoring.MonitoredTask;
+import org.apache.hadoop.hbase.monitoring.TaskMonitor;
 import org.apache.hadoop.hbase.master.TableLockManager;
 import org.apache.hadoop.hbase.master.TableLockManager.TableLock;
 import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription;
@@ -78,6 +80,7 @@ public abstract class TakeSnapshotHandle
   protected final ForeignExceptionDispatcher monitor;
   protected final TableLockManager tableLockManager;
   protected final TableLock tableLock;
+  protected final MonitoredTask status;
 
   /**
    * @param snapshot descriptor of the snapshot to take
@@ -105,6 +108,9 @@ public abstract class TakeSnapshotHandle
 
     // prepare the verify
     this.verifier = new MasterSnapshotVerifier(masterServices, snapshot, rootDir);
+    // update the running tasks
+    this.status = TaskMonitor.get().createStatus(
+      "Taking " + snapshot.getType() + " snapshot on table: " + snapshot.getTable());
   }
 
   private HTableDescriptor loadTableDescriptor()
@@ -133,7 +139,10 @@ public abstract class TakeSnapshotHandle
    */
   @Override
   public void process() {
-    LOG.info("Running table snapshot operation " + eventType + " on table " + snapshot.getTable());
+    String msg = "Running " + snapshot.getType() + " table snapshot " + snapshot.getName() + " "
+        + eventType + " on table " + snapshot.getTable();
+    LOG.info(msg);
+    status.setStatus(msg);
     try {
       // If regions move after this meta scan, the region specific snapshot should fail, triggering
       // an external exception that gets captured here.
@@ -157,11 +166,16 @@ public abstract class TakeSnapshotHandle
       }
 
       // verify the snapshot is valid
+      status.setStatus("Verifying snapshot: " + snapshot.getName());
       verifier.verifySnapshot(this.workingDir, serverNames);
 
       // complete the snapshot, atomically moving from tmp to .snapshot dir.
       completeSnapshot(this.snapshotDir, this.workingDir, this.fs);
+      status.markComplete("Snapshot " + snapshot.getName() + " of table " + snapshot.getTable()
+          + " completed");
     } catch (Exception e) {
+      status.abort("Failed to complete snapshot " + snapshot.getName() + " on table " +
+          snapshot.getTable() + " because " + e.getMessage());
       String reason = "Failed taking snapshot " + ClientSnapshotDescriptionUtils.toString(snapshot)
           + " due to exception:" + e.getMessage();
       LOG.error(reason, e);
@@ -226,8 +240,8 @@ public abstract class TakeSnapshotHandle
     if (finished) return;
 
     this.finished = true;
-    LOG.info("Stop taking snapshot=" + ClientSnapshotDescriptionUtils.toString(snapshot) + " because: "
-        + why);
+    LOG.info("Stop taking snapshot=" + ClientSnapshotDescriptionUtils.toString(snapshot) +
+        " because: " + why);
     CancellationException ce = new CancellationException(why);
     monitor.receive(new ForeignException(master.getServerName().toString(), ce));
   }

Modified: hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.java?rev=1464429&r1=1464428&r2=1464429&view=diff
==============================================================================
--- hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.java (original)
+++ hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.java Thu Apr  4 10:51:48 2013
@@ -41,6 +41,7 @@ import org.apache.hadoop.hbase.HColumnDe
 import org.apache.hadoop.hbase.HRegionInfo;
 import org.apache.hadoop.hbase.HTableDescriptor;
 import org.apache.hadoop.hbase.backup.HFileArchiver;
+import org.apache.hadoop.hbase.monitoring.MonitoredTask;
 import org.apache.hadoop.hbase.errorhandling.ForeignExceptionDispatcher;
 import org.apache.hadoop.hbase.io.HFileLink;
 import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription;
@@ -102,6 +103,7 @@ public class RestoreSnapshotHelper {
         new TreeMap<byte[], byte[]>(Bytes.BYTES_COMPARATOR);
 
   private final ForeignExceptionDispatcher monitor;
+  private final MonitoredTask status;
 
   private final SnapshotDescription snapshotDesc;
   private final Path snapshotDir;
@@ -115,7 +117,7 @@ public class RestoreSnapshotHelper {
   public RestoreSnapshotHelper(final Configuration conf, final FileSystem fs,
       final SnapshotDescription snapshotDescription, final Path snapshotDir,
       final HTableDescriptor tableDescriptor, final Path tableDir,
-      final ForeignExceptionDispatcher monitor)
+      final ForeignExceptionDispatcher monitor, final MonitoredTask status)
   {
     this.fs = fs;
     this.conf = conf;
@@ -124,6 +126,7 @@ public class RestoreSnapshotHelper {
     this.tableDesc = tableDescriptor;
     this.tableDir = tableDir;
     this.monitor = monitor;
+    this.status = status;
   }
 
   /**
@@ -159,11 +162,15 @@ public class RestoreSnapshotHelper {
 
       // Restore regions using the snapshot data
       monitor.rethrowException();
+      status.setStatus("Restoring table regions...");
       restoreHdfsRegions(metaChanges.getRegionsToRestore());
+      status.setStatus("Finished restoring all table regions.");
 
       // Remove regions from the current table
       monitor.rethrowException();
+      status.setStatus("Starting to delete excess regions from table");
       removeHdfsRegions(metaChanges.getRegionsToRemove());
+      status.setStatus("Finished deleting excess regions from table.");
     }
 
     // Regions to Add: present in the snapshot but not in the current table
@@ -179,13 +186,17 @@ public class RestoreSnapshotHelper {
 
       // Create new regions cloning from the snapshot
       monitor.rethrowException();
+      status.setStatus("Cloning regions...");
       HRegionInfo[] clonedRegions = cloneHdfsRegions(regionsToAdd);
       metaChanges.setNewRegions(clonedRegions);
+      status.setStatus("Finished cloning regions.");
     }
 
     // Restore WALs
     monitor.rethrowException();
+    status.setStatus("Restoring WALs to table...");
     restoreWALs();
+    status.setStatus("Finished restoring WALs to table.");
 
     return metaChanges;
   }

Modified: hbase/branches/0.95/hbase-server/src/test/java/org/apache/hadoop/hbase/snapshot/TestRestoreSnapshotHelper.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.95/hbase-server/src/test/java/org/apache/hadoop/hbase/snapshot/TestRestoreSnapshotHelper.java?rev=1464429&r1=1464428&r2=1464429&view=diff
==============================================================================
--- hbase/branches/0.95/hbase-server/src/test/java/org/apache/hadoop/hbase/snapshot/TestRestoreSnapshotHelper.java (original)
+++ hbase/branches/0.95/hbase-server/src/test/java/org/apache/hadoop/hbase/snapshot/TestRestoreSnapshotHelper.java Thu Apr  4 10:51:48 2013
@@ -45,6 +45,7 @@ import org.apache.hadoop.hbase.client.HC
 import org.apache.hadoop.hbase.client.HConnectionTestingUtility;
 import org.apache.hadoop.hbase.errorhandling.ForeignExceptionDispatcher;
 import org.apache.hadoop.hbase.io.HFileLink;
+import org.apache.hadoop.hbase.monitoring.MonitoredTask;
 import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.SnapshotDescription;
 import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;
 import org.apache.hadoop.hbase.regionserver.StoreFileInfo;
@@ -145,12 +146,13 @@ public class TestRestoreSnapshotHelper {
     CatalogTracker catalogTracker = Mockito.mock(CatalogTracker.class);
     HTableDescriptor tableDescriptor = Mockito.mock(HTableDescriptor.class);
     ForeignExceptionDispatcher monitor = Mockito.mock(ForeignExceptionDispatcher.class);
+    MonitoredTask status = Mockito.mock(MonitoredTask.class);
 
     SnapshotDescription sd = SnapshotDescription.newBuilder()
       .setName("snapshot").setTable(sourceTableName).build();
 
     return new RestoreSnapshotHelper(conf, fs, sd, snapshotDir,
-      htdClone, HTableDescriptor.getTableDir(rootDir, htdClone.getName()), monitor);
+      htdClone, HTableDescriptor.getTableDir(rootDir, htdClone.getName()), monitor, status);
   }
 
   private void createSnapshot(final Path rootDir, final Path snapshotDir, final HTableDescriptor htd)
@@ -199,4 +201,4 @@ public class TestRestoreSnapshotHelper {
     Collections.sort(files);
     return files.toArray(new String[files.size()]);
   }
-}
\ No newline at end of file
+}