You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by te...@apache.org on 2013/02/20 00:40:36 UTC
svn commit: r1447967 - in /hbase/branches/hbase-7290v2:
hbase-common/src/main/java/org/apache/hadoop/hbase/
hbase-protocol/src/main/protobuf/
hbase-server/src/main/java/org/apache/hadoop/hbase/catalog/
hbase-server/src/main/java/org/apache/hadoop/hbase...
Author: tedyu
Date: Tue Feb 19 23:40:35 2013
New Revision: 1447967
URL: http://svn.apache.org/r1447967
Log:
HBASE-7858 cleanup before merging snapshots branch to trunk (Ted Yu)
Removed:
hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/UnexpectedSnapshotException.java
Modified:
hbase/branches/hbase-7290v2/hbase-common/src/main/java/org/apache/hadoop/hbase/HConstants.java
hbase/branches/hbase-7290v2/hbase-protocol/src/main/protobuf/ErrorHandling.proto
hbase/branches/hbase-7290v2/hbase-protocol/src/main/protobuf/MasterAdmin.proto
hbase/branches/hbase-7290v2/hbase-protocol/src/main/protobuf/hbase.proto
hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/catalog/MetaEditor.java
hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java
hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/errorhandling/ForeignException.java
hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/errorhandling/ForeignExceptionDispatcher.java
hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/errorhandling/TimeoutException.java
hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/io/HFileLink.java
hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/CreateTableHandler.java
hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/DeleteTableHandler.java
hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/DisabledTableSnapshotHandler.java
hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/EnabledTableSnapshotHandler.java
hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/MasterSnapshotVerifier.java
hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/RestoreSnapshotHandler.java
hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.java
hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.java
hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/SnapshotLogCleaner.java
hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.java
hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.java
hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/Procedure.java
hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/ProcedureCoordinator.java
hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/ProcedureMember.java
hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/Subprocedure.java
hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/ZKProcedureCoordinatorRpcs.java
hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/ZKProcedureMemberRpcs.java
hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/ZKProcedureUtil.java
hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.java
hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/snapshot/RegionServerSnapshotManager.java
hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/ExportSnapshot.java
hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.java
hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/SnapshotTask.java
hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/TablePartiallyOpenException.java
hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/util/FSUtils.java
hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/util/FSVisitor.java
hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/util/ModifyRegionUtils.java
hbase/branches/hbase-7290v2/hbase-server/src/main/resources/hbase-default.xml
hbase/branches/hbase-7290v2/hbase-server/src/main/ruby/shell/commands/clone_snapshot.rb
Modified: hbase/branches/hbase-7290v2/hbase-common/src/main/java/org/apache/hadoop/hbase/HConstants.java
URL: http://svn.apache.org/viewvc/hbase/branches/hbase-7290v2/hbase-common/src/main/java/org/apache/hadoop/hbase/HConstants.java?rev=1447967&r1=1447966&r2=1447967&view=diff
==============================================================================
--- hbase/branches/hbase-7290v2/hbase-common/src/main/java/org/apache/hadoop/hbase/HConstants.java (original)
+++ hbase/branches/hbase-7290v2/hbase-common/src/main/java/org/apache/hadoop/hbase/HConstants.java Tue Feb 19 23:40:35 2013
@@ -749,7 +749,7 @@ public final class HConstants {
public static final String HFILE_ARCHIVE_DIRECTORY = ".archive";
/**
- * Name of the directory to store snapshots all snapshots. See SnapshotDescriptionUtils for
+ * Name of the directory to store all snapshots. See SnapshotDescriptionUtils for
* remaining snapshot constants; this is here to keep HConstants dependencies at a minimum and
* uni-directional.
*/
Modified: hbase/branches/hbase-7290v2/hbase-protocol/src/main/protobuf/ErrorHandling.proto
URL: http://svn.apache.org/viewvc/hbase/branches/hbase-7290v2/hbase-protocol/src/main/protobuf/ErrorHandling.proto?rev=1447967&r1=1447966&r2=1447967&view=diff
==============================================================================
--- hbase/branches/hbase-7290v2/hbase-protocol/src/main/protobuf/ErrorHandling.proto (original)
+++ hbase/branches/hbase-7290v2/hbase-protocol/src/main/protobuf/ErrorHandling.proto Tue Feb 19 23:40:35 2013
@@ -16,7 +16,7 @@
* limitations under the License.
*/
-// This file contains protocol buffers that used to error handling
+// This file contains protocol buffers that are used for error handling
option java_package = "org.apache.hadoop.hbase.protobuf.generated";
option java_outer_classname = "ErrorHandlingProtos";
Modified: hbase/branches/hbase-7290v2/hbase-protocol/src/main/protobuf/MasterAdmin.proto
URL: http://svn.apache.org/viewvc/hbase/branches/hbase-7290v2/hbase-protocol/src/main/protobuf/MasterAdmin.proto?rev=1447967&r1=1447966&r2=1447967&view=diff
==============================================================================
--- hbase/branches/hbase-7290v2/hbase-protocol/src/main/protobuf/MasterAdmin.proto (original)
+++ hbase/branches/hbase-7290v2/hbase-protocol/src/main/protobuf/MasterAdmin.proto Tue Feb 19 23:40:35 2013
@@ -330,8 +330,8 @@ service MasterAdminService {
rpc execMasterService(CoprocessorServiceRequest)
returns(CoprocessorServiceResponse);
- /**
- * Create a snapshot for the given table.
+ /**
+ * Create a snapshot for the given table.
* @param snapshot description of the snapshot to take
*/
rpc snapshot(TakeSnapshotRequest) returns(TakeSnapshotResponse);
@@ -343,7 +343,7 @@ service MasterAdminService {
rpc listSnapshots(ListSnapshotRequest) returns(ListSnapshotResponse);
/**
- * Delete an existing snapshot. This method can also be used to clean up a aborted snapshot.
+ * Delete an existing snapshot. This method can also be used to clean up an aborted snapshot.
* @param snapshotName snapshot to delete
*/
rpc deleteSnapshot(DeleteSnapshotRequest) returns(DeleteSnapshotResponse);
Modified: hbase/branches/hbase-7290v2/hbase-protocol/src/main/protobuf/hbase.proto
URL: http://svn.apache.org/viewvc/hbase/branches/hbase-7290v2/hbase-protocol/src/main/protobuf/hbase.proto?rev=1447967&r1=1447966&r2=1447967&view=diff
==============================================================================
--- hbase/branches/hbase-7290v2/hbase-protocol/src/main/protobuf/hbase.proto (original)
+++ hbase/branches/hbase-7290v2/hbase-protocol/src/main/protobuf/hbase.proto Tue Feb 19 23:40:35 2013
@@ -267,15 +267,15 @@ message NameInt64Pair {
* Description of the snapshot to take
*/
message SnapshotDescription {
- required string name = 1;
- optional string table = 2; // not needed for delete, but checked for in taking snapshot
- optional int64 creationTime = 3 [default = 0];
- enum Type {
- DISABLED = 0;
- FLUSH = 1;
- }
- optional Type type = 4 [default = FLUSH];
- optional int32 version = 5;
+ required string name = 1;
+ optional string table = 2; // not needed for delete, but checked for in taking snapshot
+ optional int64 creationTime = 3 [default = 0];
+ enum Type {
+ DISABLED = 0;
+ FLUSH = 1;
+ }
+ optional Type type = 4 [default = FLUSH];
+ optional int32 version = 5;
}
message EmptyMsg {
Modified: hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/catalog/MetaEditor.java
URL: http://svn.apache.org/viewvc/hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/catalog/MetaEditor.java?rev=1447967&r1=1447966&r2=1447967&view=diff
==============================================================================
--- hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/catalog/MetaEditor.java (original)
+++ hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/catalog/MetaEditor.java Tue Feb 19 23:40:35 2013
@@ -154,7 +154,7 @@ public class MetaEditor {
* @param deletes Deletes to add to .META. This list should support #remove.
* @throws IOException
*/
- static void deleteFromMetaTable(final CatalogTracker ct, final List<Delete> deletes)
+ public static void deleteFromMetaTable(final CatalogTracker ct, final List<Delete> deletes)
throws IOException {
HTable t = MetaReader.getMetaHTable(ct);
try {
Modified: hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java
URL: http://svn.apache.org/viewvc/hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java?rev=1447967&r1=1447966&r2=1447967&view=diff
==============================================================================
--- hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java (original)
+++ hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java Tue Feb 19 23:40:35 2013
@@ -2116,7 +2116,8 @@ public class HBaseAdmin implements Abort
}
/**
- * Create a timestamp consistent snapshot for the given table.
+ * Take a snapshot for the given table. If the table is enabled, a FLUSH-type snapshot will be
+ * taken. If the table is disabled, an offline snapshot is taken.
* <p>
* Snapshots are considered unique based on <b>the name of the snapshot</b>. Attempts to take a
* snapshot with the same name (even a different type or with different parameters) will fail with
@@ -2206,9 +2207,6 @@ public class HBaseAdmin implements Abort
*/
public void snapshot(SnapshotDescription snapshot) throws IOException, SnapshotCreationException,
IllegalArgumentException {
- // make sure the snapshot is valid
- SnapshotDescriptionUtils.assertSnapshotRequestIsValid(snapshot);
-
// actually take the snapshot
TakeSnapshotResponse response = takeSnapshotAsync(snapshot);
final IsSnapshotDoneRequest request = IsSnapshotDoneRequest.newBuilder().setSnapshot(snapshot)
@@ -2226,9 +2224,9 @@ public class HBaseAdmin implements Abort
try {
// sleep a backoff <= pauseTime amount
long sleep = getPauseTime(tries++);
- LOG.debug("Found sleep:" + sleep);
sleep = sleep > maxPauseTime ? maxPauseTime : sleep;
- LOG.debug(tries + ") Sleeping: " + sleep + " ms while we wait for snapshot to complete.");
+ LOG.debug("(#" + tries + ") Sleeping: " + sleep +
+ "ms while waiting for snapshot completion.");
Thread.sleep(sleep);
} catch (InterruptedException e) {
@@ -2242,8 +2240,7 @@ public class HBaseAdmin implements Abort
return masterAdmin.isSnapshotDone(null, request);
}
});
- }
- ;
+ };
if (!done.getDone()) {
throw new SnapshotCreationException("Snapshot '" + snapshot.getName()
+ "' wasn't completed in expectedTime:" + max + " ms", snapshot);
@@ -2251,7 +2248,7 @@ public class HBaseAdmin implements Abort
}
/**
- * Take a snapshot and wait for the server to complete that snapshot (asynchronous)
+ * Take a snapshot without waiting for the server to complete that snapshot (asynchronous)
* <p>
* Only a single snapshot should be taken at a time, or results may be undefined.
* @param snapshot snapshot to take
@@ -2309,7 +2306,7 @@ public class HBaseAdmin implements Abort
/**
* Restore the specified snapshot on the original table. (The table must be disabled)
* Before restoring the table, a new snapshot with the current table state is created.
- * In case of failure, the table will be rolled back to the its original state.
+ * In case of failure, the table will be rolled back to its original state.
*
* @param snapshotName name of the snapshot to restore
* @throws IOException if a remote or network exception occurs
@@ -2358,7 +2355,7 @@ public class HBaseAdmin implements Abort
// Try to rollback
try {
String msg = "Restore snapshot=" + snapshotName +
- " failed. Rollback to snapshot=" + rollbackSnapshot + " succeded.";
+ " failed. Rollback to snapshot=" + rollbackSnapshot + " succeeded.";
LOG.error(msg, e);
internalRestoreSnapshot(rollbackSnapshot, tableName);
throw new RestoreSnapshotException(msg, e);
Modified: hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/errorhandling/ForeignException.java
URL: http://svn.apache.org/viewvc/hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/errorhandling/ForeignException.java?rev=1447967&r1=1447966&r2=1447967&view=diff
==============================================================================
--- hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/errorhandling/ForeignException.java (original)
+++ hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/errorhandling/ForeignException.java Tue Feb 19 23:40:35 2013
@@ -52,20 +52,6 @@ public class ForeignException extends IO
private final String source;
/**
- * Create a new ForeignException that can be serialized. It is assumed that this came from a
- * remote source.
- * @param source
- * @param cause
- */
- private ForeignException(String source, String clazz, ProxyThrowable cause) {
- super(cause);
- assert source != null;
- assert cause != null;
- assert clazz != null;
- this.source = source;
- }
-
- /**
* Create a new ForeignException that can be serialized. It is assumed that this came form a
* local source.
* @param source
@@ -114,7 +100,7 @@ public class ForeignException extends IO
/**
* Convert a stack trace to list of {@link StackTraceElement}.
- * @param stackTrace the stack trace to convert to protobuf message
+ * @param trace the stack trace to convert to protobuf message
* @return <tt>null</tt> if the passed stack is <tt>null</tt>.
*/
private static List<StackTraceElementMessage> toStackTraceElementMessages(
@@ -146,10 +132,10 @@ public class ForeignException extends IO
}
/**
- * Converts an ForeignException to a array of bytes.
+ * Converts a ForeignException to an array of bytes.
* @param source the name of the external exception source
* @param t the "local" external exception (local)
- * @return protobuf serialized version of ForeignThreadException
+ * @return protobuf serialized version of ForeignException
*/
public static byte[] serialize(String source, Throwable t) {
GenericExceptionMessage.Builder gemBuilder = GenericExceptionMessage.newBuilder();
@@ -158,7 +144,8 @@ public class ForeignException extends IO
gemBuilder.setMessage(t.getMessage());
}
// set the stack trace, if there is one
- List<StackTraceElementMessage> stack = ForeignException.toStackTraceElementMessages(t.getStackTrace());
+ List<StackTraceElementMessage> stack =
+ ForeignException.toStackTraceElementMessages(t.getStackTrace());
if (stack != null) {
gemBuilder.addAllTrace(stack);
}
@@ -172,16 +159,16 @@ public class ForeignException extends IO
/**
* Takes a series of bytes and tries to generate an ForeignException instance for it.
* @param bytes
- * @return the ExternalExcpetion instance
+ * @return the ForeignExcpetion instance
* @throws InvalidProtocolBufferException if there was deserialization problem this is thrown.
*/
public static ForeignException deserialize(byte[] bytes) throws InvalidProtocolBufferException {
// figure out the data we need to pass
ForeignExceptionMessage eem = ForeignExceptionMessage.parseFrom(bytes);
GenericExceptionMessage gem = eem.getGenericException();
- StackTraceElement [] trace = ForeignException.toStack(gem.getTraceList());
+ StackTraceElement [] trace = ForeignException.toStackTrace(gem.getTraceList());
ProxyThrowable dfe = new ProxyThrowable(gem.getMessage(), trace);
- ForeignException e = new ForeignException(eem.getSource(), gem.getClassName(), dfe);
+ ForeignException e = new ForeignException(eem.getSource(), dfe);
return e;
}
@@ -192,7 +179,7 @@ public class ForeignException extends IO
* @return the deserialized list or <tt>null</tt> if it couldn't be unwound (e.g. wasn't set on
* the sender).
*/
- private static StackTraceElement[] toStack(List<StackTraceElementMessage> traceList) {
+ private static StackTraceElement[] toStackTrace(List<StackTraceElementMessage> traceList) {
if (traceList == null || traceList.size() == 0) {
return new StackTraceElement[0]; // empty array
}
Modified: hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/errorhandling/ForeignExceptionDispatcher.java
URL: http://svn.apache.org/viewvc/hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/errorhandling/ForeignExceptionDispatcher.java?rev=1447967&r1=1447966&r2=1447967&view=diff
==============================================================================
--- hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/errorhandling/ForeignExceptionDispatcher.java (original)
+++ hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/errorhandling/ForeignExceptionDispatcher.java Tue Feb 19 23:40:35 2013
@@ -44,7 +44,8 @@ import org.apache.hadoop.classification.
public class ForeignExceptionDispatcher implements ForeignExceptionListener, ForeignExceptionSnare {
public static final Log LOG = LogFactory.getLog(ForeignExceptionDispatcher.class);
protected final String name;
- protected final List<ForeignExceptionListener> listeners = new ArrayList<ForeignExceptionListener>();
+ protected final List<ForeignExceptionListener> listeners =
+ new ArrayList<ForeignExceptionListener>();
private ForeignException exception;
public ForeignExceptionDispatcher(String name) {
@@ -69,7 +70,7 @@ public class ForeignExceptionDispatcher
if (e != null) {
exception = e;
} else {
- exception = new ForeignException(name, e);
+ exception = new ForeignException(name, "");
}
// notify all the listeners
@@ -77,16 +78,16 @@ public class ForeignExceptionDispatcher
}
@Override
- public void rethrowException() throws ForeignException {
+ public synchronized void rethrowException() throws ForeignException {
if (exception != null) {
// This gets the stack where this is caused, (instead of where it was deserialized).
- // This which is much more useful for debugging
+ // This is much more useful for debugging
throw new ForeignException(exception.getSource(), exception.getCause());
}
}
@Override
- public boolean hasException() {
+ public synchronized boolean hasException() {
return exception != null;
}
@@ -102,7 +103,6 @@ public class ForeignExceptionDispatcher
*/
private void dispatch(ForeignException e) {
// update all the listeners with the passed error
- LOG.debug(name + " Recieved error, notifying listeners...");
for (ForeignExceptionListener l: listeners) {
l.receive(e);
}
Modified: hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/errorhandling/TimeoutException.java
URL: http://svn.apache.org/viewvc/hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/errorhandling/TimeoutException.java?rev=1447967&r1=1447966&r2=1447967&view=diff
==============================================================================
--- hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/errorhandling/TimeoutException.java (original)
+++ hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/errorhandling/TimeoutException.java Tue Feb 19 23:40:35 2013
@@ -21,7 +21,7 @@ import org.apache.hadoop.classification.
import org.apache.hadoop.classification.InterfaceStability;
/**
- * Exception for a timeout of a task.
+ * Exception for timeout of a task.
* @see TimeoutExceptionInjector
*/
@InterfaceAudience.Public
Modified: hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/io/HFileLink.java
URL: http://svn.apache.org/viewvc/hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/io/HFileLink.java?rev=1447967&r1=1447966&r2=1447967&view=diff
==============================================================================
--- hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/io/HFileLink.java (original)
+++ hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/io/HFileLink.java Tue Feb 19 23:40:35 2013
@@ -75,7 +75,7 @@ public class HFileLink extends FileLink
HRegionInfo.ENCODED_REGION_NAME_REGEX, StoreFile.HFILE_NAME_REGEX));
/**
- * The link should be used for hfile and reference links
+ * The pattern should be used for hfile and reference links
* that can be found in /hbase/table/region/family/
*/
private static final Pattern REF_OR_HFILE_LINK_PATTERN =
Modified: hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/CreateTableHandler.java
URL: http://svn.apache.org/viewvc/hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/CreateTableHandler.java?rev=1447967&r1=1447966&r2=1447967&view=diff
==============================================================================
--- hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/CreateTableHandler.java (original)
+++ hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/CreateTableHandler.java Tue Feb 19 23:40:35 2013
@@ -205,7 +205,7 @@ public class CreateTableHandler extends
try {
assignmentManager.getZKTable().setEnabledTable(tableName);
} catch (KeeperException e) {
- throw new IOException("Unable to ensure that the table will be" +
+ throw new IOException("Unable to ensure that " + tableName + " will be" +
" enabled because of a ZooKeeper issue", e);
}
}
@@ -216,7 +216,8 @@ public class CreateTableHandler extends
* @param tableName name of the table under construction
* @return the list of regions created
*/
- protected List<HRegionInfo> handleCreateHdfsRegions(final Path tableRootDir, final String tableName)
+ protected List<HRegionInfo> handleCreateHdfsRegions(final Path tableRootDir,
+ final String tableName)
throws IOException {
int regionNumber = newRegions.length;
ThreadPoolExecutor regionOpenAndInitThreadPool = getRegionOpenAndInitThreadPool(
Modified: hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/DeleteTableHandler.java
URL: http://svn.apache.org/viewvc/hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/DeleteTableHandler.java?rev=1447967&r1=1447966&r2=1447967&view=diff
==============================================================================
--- hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/DeleteTableHandler.java (original)
+++ hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/DeleteTableHandler.java Tue Feb 19 23:40:35 2013
@@ -91,13 +91,15 @@ public class DeleteTableHandler extends
// 4. Delete regions from FS (temp directory)
FileSystem fs = mfs.getFileSystem();
for (HRegionInfo hri: regions) {
- LOG.debug("Deleting region " + hri.getRegionNameAsString() + " from FS");
+ LOG.debug("Archiving region " + hri.getRegionNameAsString() + " from FS");
HFileArchiver.archiveRegion(fs, mfs.getRootDir(),
tempTableDir, new Path(tempTableDir, hri.getEncodedName()));
}
// 5. Delete table from FS (temp directory)
- fs.delete(tempTableDir, true);
+ if (!fs.delete(tempTableDir, true)) {
+ LOG.error("Couldn't delete " + tempTableDir);
+ }
} finally {
// 6. Update table descriptor cache
this.masterServices.getTableDescriptors().remove(Bytes.toString(tableName));
Modified: hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/DisabledTableSnapshotHandler.java
URL: http://svn.apache.org/viewvc/hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/DisabledTableSnapshotHandler.java?rev=1447967&r1=1447966&r2=1447967&view=diff
==============================================================================
--- hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/DisabledTableSnapshotHandler.java (original)
+++ hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/DisabledTableSnapshotHandler.java Tue Feb 19 23:40:35 2013
@@ -107,10 +107,11 @@ public class DisabledTableSnapshotHandle
}
// 3. write the table info to disk
- LOG.info("Starting to copy tableinfo for offline snapshot: " + SnapshotDescriptionUtils.toString(snapshot));
- TableInfoCopyTask tableInfo = new TableInfoCopyTask(this.monitor, snapshot, fs,
+ LOG.info("Starting to copy tableinfo for offline snapshot: " +
+ SnapshotDescriptionUtils.toString(snapshot));
+ TableInfoCopyTask tableInfoCopyTask = new TableInfoCopyTask(this.monitor, snapshot, fs,
FSUtils.getRootDir(conf));
- tableInfo.call();
+ tableInfoCopyTask.call();
monitor.rethrowException();
} catch (Exception e) {
// make sure we capture the exception to propagate back to the client later
Modified: hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/EnabledTableSnapshotHandler.java
URL: http://svn.apache.org/viewvc/hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/EnabledTableSnapshotHandler.java?rev=1447967&r1=1447966&r2=1447967&view=diff
==============================================================================
--- hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/EnabledTableSnapshotHandler.java (original)
+++ hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/EnabledTableSnapshotHandler.java Tue Feb 19 23:40:35 2013
@@ -39,7 +39,7 @@ import com.google.common.collect.Lists;
/**
* Handle the master side of taking a snapshot of an online table, regardless of snapshot type.
- * Uses a {@link Procedure} to run the snapshot across all the involved regions.
+ * Uses a {@link Procedure} to run the snapshot across all the involved region servers.
* @see ProcedureCoordinator
*/
@InterfaceAudience.Private
@@ -84,7 +84,7 @@ public class EnabledTableSnapshotHandler
// wait for the snapshot to complete. A timer thread is kicked off that should cancel this
// if it takes too long.
proc.waitForCompleted();
- LOG.info("Done waiting - snapshot finished!");
+ LOG.info("Done waiting - snapshot for " + this.snapshot.getName() + " finished!");
} catch (InterruptedException e) {
ForeignException ee =
new ForeignException("Interrupted while waiting for snapshot to finish", e);
Modified: hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/MasterSnapshotVerifier.java
URL: http://svn.apache.org/viewvc/hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/MasterSnapshotVerifier.java?rev=1447967&r1=1447966&r2=1447967&view=diff
==============================================================================
--- hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/MasterSnapshotVerifier.java (original)
+++ hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/MasterSnapshotVerifier.java Tue Feb 19 23:40:35 2013
@@ -84,7 +84,6 @@ public final class MasterSnapshotVerifie
private MasterServices services;
/**
- * Build a util for the given snapshot
* @param services services for the master
* @param snapshot snapshot to check
* @param rootDir root directory of the hbase installation.
@@ -137,7 +136,7 @@ public final class MasterSnapshotVerifie
}
/**
- * Check that all the regions in the the snapshot are valid, and accounted for.
+ * Check that all the regions in the snapshot are valid, and accounted for.
* @param snapshotDir snapshot directory to check
* @throws IOException if we can't reach .META. or read the files from the FS
*/
@@ -146,7 +145,7 @@ public final class MasterSnapshotVerifie
Bytes.toBytes(tableName));
for (HRegionInfo region : regions) {
// if offline split parent, skip it
- if (region.isOffline() || region.isSplit() || region.isSplitParent()) {
+ if (region.isOffline() && (region.isSplit() || region.isSplitParent())) {
continue;
}
@@ -156,6 +155,7 @@ public final class MasterSnapshotVerifie
/**
* Verify that the region (regioninfo, hfiles) are valid
+ * @param fs the FileSystem instance
* @param snapshotDir snapshot directory to check
* @param region the region to check
*/
@@ -174,10 +174,15 @@ public final class MasterSnapshotVerifie
throw new CorruptedSnapshotException("No region info found for region:" + region, snapshot);
}
FSDataInputStream in = fs.open(regionInfo);
- HRegionInfo found = HRegionInfo.parseFrom(in);
- if (!region.equals(found)) {
- throw new CorruptedSnapshotException("Found region info (" + found
+ HRegionInfo found;
+ try {
+ found = HRegionInfo.parseFrom(in);
+ if (!region.equals(found)) {
+ throw new CorruptedSnapshotException("Found region info (" + found
+ ") doesn't match expected region:" + region, snapshot);
+ }
+ } finally {
+ in.close();
}
// make sure we have the expected recovered edits files
@@ -225,20 +230,4 @@ public final class MasterSnapshotVerifie
}
}
}
-
- /**
- * Check that the logs stored in the log directory for the snapshot are valid - it contains all
- * the expected logs for all servers involved in the snapshot.
- * @param snapshotDir snapshot directory to check
- * @param snapshotServers list of the names of servers involved in the snapshot.
- * @throws CorruptedSnapshotException if the hlogs in the snapshot are not correct
- * @throws IOException if we can't reach the filesystem
- */
- private void verifyLogs(Path snapshotDir, Set<String> snapshotServers)
- throws CorruptedSnapshotException, IOException {
- Path snapshotLogDir = new Path(snapshotDir, HConstants.HREGION_LOGDIR_NAME);
- Path logsDir = new Path(rootDir, HConstants.HREGION_LOGDIR_NAME);
- TakeSnapshotUtils.verifyAllLogsGotReferenced(fs, logsDir, snapshotServers, snapshot,
- snapshotLogDir);
- }
}
\ No newline at end of file
Modified: hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/RestoreSnapshotHandler.java
URL: http://svn.apache.org/viewvc/hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/RestoreSnapshotHandler.java?rev=1447967&r1=1447966&r2=1447967&view=diff
==============================================================================
--- hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/RestoreSnapshotHandler.java (original)
+++ hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/RestoreSnapshotHandler.java Tue Feb 19 23:40:35 2013
@@ -80,10 +80,11 @@ public class RestoreSnapshotHandler exte
/**
* The restore table is executed in place.
- * - The on-disk data will be restored
- * - [if something fail here: you need to delete the table and re-run the restore]
+ * - The on-disk data will be restored - reference files are put in place without moving data
+ * - [if something fail here: you need to delete the table and re-run the restore]
* - META will be updated
- * - [if something fail here: you need to run hbck to fix META entries]
+ * - [if something fail here: you need to run hbck to fix META entries]
+ * The passed in list gets changed in this method
*/
@Override
protected void handleTableOperation(List<HRegionInfo> hris) throws IOException {
Modified: hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.java
URL: http://svn.apache.org/viewvc/hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.java?rev=1447967&r1=1447966&r2=1447967&view=diff
==============================================================================
--- hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.java (original)
+++ hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.java Tue Feb 19 23:40:35 2013
@@ -58,10 +58,10 @@ import org.apache.hadoop.hbase.util.FSUt
* Further, the cache is periodically refreshed ensure that files in snapshots that were deleted are
* also removed from the cache.
* <p>
- * A {@link SnapshotFileInspector} must be passed when creating <tt>this</tt> to allow extraction of files
- * under the /hbase/.snapshot/[snapshot name] directory, for each snapshot. This allows you to only
- * cache files under, for instance, all the logs in the .logs directory or all the files under all
- * the regions.
+ * A {@link SnapshotFileInspector} must be passed when creating <tt>this</tt> to allow extraction
+ * of files under the /hbase/.snapshot/[snapshot name] directory, for each snapshot.
+ * This allows you to only cache files under, for instance, all the logs in the .logs directory or
+ * all the files under all the regions.
* <p>
* <tt>this</tt> also considers all running snapshots (those under /hbase/.snapshot/.tmp) as valid
* snapshots and will attempt to cache files from those snapshots as well.
@@ -71,7 +71,7 @@ import org.apache.hadoop.hbase.util.FSUt
@InterfaceAudience.Private
@InterfaceStability.Evolving
public class SnapshotFileCache implements Stoppable {
- public interface SnapshotFileInspector {
+ interface SnapshotFileInspector {
/**
* Returns a collection of file names needed by the snapshot.
* @param snapshotDir {@link Path} to the snapshot directory to scan.
@@ -90,7 +90,8 @@ public class SnapshotFileCache implement
* This is a helper map of information about the snapshot directories so we don't need to rescan
* them if they haven't changed since the last time we looked.
*/
- private final Map<String, SnapshotDirectoryInfo> snapshots = new HashMap<String, SnapshotDirectoryInfo>();
+ private final Map<String, SnapshotDirectoryInfo> snapshots =
+ new HashMap<String, SnapshotDirectoryInfo>();
private final Timer refreshTimer;
private long lastModifiedTime = Long.MIN_VALUE;
@@ -118,7 +119,7 @@ public class SnapshotFileCache implement
* filesystem
* @param fs {@link FileSystem} where the snapshots are stored
* @param rootDir hbase root directory
- * @param cacheRefreshPeriod frequency (ms) with which the cache should be refreshed
+ * @param cacheRefreshPeriod period (ms) with which the cache should be refreshed
* @param cacheRefreshDelay amount of time to wait for the cache to be refreshed
* @param refreshThreadName name of the cache refresh thread
* @param inspectSnapshotFiles Filter to apply to each snapshot to extract the files.
@@ -143,8 +144,11 @@ public class SnapshotFileCache implement
* Exposed for TESTING.
*/
public void triggerCacheRefreshForTesting() {
- LOG.debug("Triggering cache refresh");
- new RefreshCacheTask().run();
+ try {
+ SnapshotFileCache.this.refreshCache();
+ } catch (IOException e) {
+ LOG.warn("Failed to refresh snapshot hfile cache!", e);
+ }
LOG.debug("Current cache:" + cache);
}
@@ -184,7 +188,7 @@ public class SnapshotFileCache implement
try {
status = fs.getFileStatus(snapshotDir);
} catch (FileNotFoundException e) {
- LOG.warn("Snapshot directory: " + snapshotDir + " doesn't exist");
+ LOG.error("Snapshot directory: " + snapshotDir + " doesn't exist");
return;
}
// if the snapshot directory wasn't modified since we last check, we are done
Modified: hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.java
URL: http://svn.apache.org/viewvc/hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.java?rev=1447967&r1=1447966&r2=1447967&view=diff
==============================================================================
--- hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.java (original)
+++ hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.java Tue Feb 19 23:40:35 2013
@@ -44,7 +44,8 @@ public class SnapshotHFileCleaner extend
* Conf key for the frequency to attempt to refresh the cache of hfiles currently used in
* snapshots (ms)
*/
- public static final String HFILE_CACHE_REFRESH_PERIOD_CONF_KEY = "hbase.master.hfilecleaner.plugins.snapshot.period";
+ public static final String HFILE_CACHE_REFRESH_PERIOD_CONF_KEY =
+ "hbase.master.hfilecleaner.plugins.snapshot.period";
/** Refresh cache, by default, every 5 minutes */
private static final long DEFAULT_HFILE_CACHE_REFRESH_PERIOD = 300000;
Modified: hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/SnapshotLogCleaner.java
URL: http://svn.apache.org/viewvc/hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/SnapshotLogCleaner.java?rev=1447967&r1=1447966&r2=1447967&view=diff
==============================================================================
--- hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/SnapshotLogCleaner.java (original)
+++ hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/SnapshotLogCleaner.java Tue Feb 19 23:40:35 2013
@@ -44,7 +44,8 @@ public class SnapshotLogCleaner extends
* Conf key for the frequency to attempt to refresh the cache of hfiles currently used in
* snapshots (ms)
*/
- static final String HLOG_CACHE_REFRESH_PERIOD_CONF_KEY = "hbase.master.hlogcleaner.plugins.snapshot.period";
+ static final String HLOG_CACHE_REFRESH_PERIOD_CONF_KEY =
+ "hbase.master.hlogcleaner.plugins.snapshot.period";
/** Refresh cache, by default, every 5 minutes */
private static final long DEFAULT_HLOG_CACHE_REFRESH_PERIOD = 300000;
@@ -54,6 +55,7 @@ public class SnapshotLogCleaner extends
@Override
public synchronized boolean isFileDeletable(Path filePath) {
try {
+ if (null == cache) return false;
return !cache.contains(filePath.getName());
} catch (IOException e) {
LOG.error("Exception while checking if:" + filePath + " was valid, keeping it just in case.",
Modified: hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.java
URL: http://svn.apache.org/viewvc/hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.java?rev=1447967&r1=1447966&r2=1447967&view=diff
==============================================================================
--- hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.java (original)
+++ hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.java Tue Feb 19 23:40:35 2013
@@ -77,7 +77,7 @@ import org.apache.zookeeper.KeeperExcept
* <p>
* The class provides methods for monitoring in-progress snapshot actions.
* <p>
- * Note: Currently there can only one snapshot being taken at a time over the cluster. This is a
+ * Note: Currently there can only be one snapshot being taken at a time over the cluster. This is a
* simplification in the current implementation.
*/
@InterfaceAudience.Private
@@ -86,7 +86,7 @@ public class SnapshotManager implements
private static final Log LOG = LogFactory.getLog(SnapshotManager.class);
/** By default, check to see if the snapshot is complete every WAKE MILLIS (ms) */
- public static final int SNAPSHOT_WAKE_MILLIS_DEFAULT = 500;
+ private static final int SNAPSHOT_WAKE_MILLIS_DEFAULT = 500;
/** Enable or disable snapshot support */
public static final String HBASE_SNAPSHOT_ENABLED = "hbase.snapshot.enabled";
@@ -95,16 +95,16 @@ public class SnapshotManager implements
* Conf key for # of ms elapsed between checks for snapshot errors while waiting for
* completion.
*/
- public static final String SNAPSHOT_WAKE_MILLIS_KEY = "hbase.snapshot.master.wakeMillis";
+ private static final String SNAPSHOT_WAKE_MILLIS_KEY = "hbase.snapshot.master.wakeMillis";
/** By default, check to see if the snapshot is complete (ms) */
- public static final int SNAPSHOT_TIMEOUT_MILLIS_DEFAULT = 5000;
+ private static final int SNAPSHOT_TIMEOUT_MILLIS_DEFAULT = 5000;
/**
* Conf key for # of ms elapsed before injecting a snapshot timeout error when waiting for
* completion.
*/
- public static final String SNAPSHOT_TIMEOUT_MILLIS_KEY = "hbase.snapshot.master.timeoutMillis";
+ private static final String SNAPSHOT_TIMEOUT_MILLIS_KEY = "hbase.snapshot.master.timeoutMillis";
/** Name of the operation to use in the controller */
public static final String ONLINE_SNAPSHOT_CONTROLLER_DESCRIPTION = "online-snapshot";
@@ -230,7 +230,7 @@ public class SnapshotManager implements
void resetTempDir() throws IOException {
// cleanup any existing snapshots.
Path tmpdir = SnapshotDescriptionUtils.getWorkingSnapshotDir(rootDir);
- if (master.getMasterFileSystem().getFileSystem().delete(tmpdir, true)) {
+ if (!master.getMasterFileSystem().getFileSystem().delete(tmpdir, true)) {
LOG.warn("Couldn't delete working snapshot directory: " + tmpdir);
}
}
@@ -277,7 +277,7 @@ public class SnapshotManager implements
* @param snapshot
* @return null if doesn't match, else a live handler.
*/
- TakeSnapshotHandler getTakeSnapshotHandler(SnapshotDescription snapshot) {
+ private synchronized TakeSnapshotHandler getTakeSnapshotHandler(SnapshotDescription snapshot) {
TakeSnapshotHandler h = this.handler;
if (h == null) {
return null;
@@ -397,7 +397,7 @@ public class SnapshotManager implements
}
try {
- // delete the working directory, since we aren't running the snapshot. Likely leftovers
+ // delete the working directory, since we aren't running the snapshot. Likely leftovers
// from a failed attempt.
fs.delete(workingDir, true);
@@ -415,7 +415,7 @@ public class SnapshotManager implements
}
/**
- * Take a snapshot of a enabled table.
+ * Take a snapshot of an enabled table.
* <p>
* The thread limitation on the executorService's thread pool for snapshots ensures the
* snapshot won't be started if there is another snapshot already running. Does
@@ -434,7 +434,7 @@ public class SnapshotManager implements
// cleanup the working directory by trying to delete it from the fs.
Path workingDir = SnapshotDescriptionUtils.getWorkingSnapshotDir(snapshot, rootDir);
try {
- if (this.master.getMasterFileSystem().getFileSystem().delete(workingDir, true)) {
+ if (!this.master.getMasterFileSystem().getFileSystem().delete(workingDir, true)) {
LOG.warn("Couldn't delete working directory (" + workingDir + " for snapshot:"
+ SnapshotDescriptionUtils.toString(snapshot));
}
@@ -454,7 +454,7 @@ public class SnapshotManager implements
* @throws HBaseSnapshotException when a snapshot specific exception occurs.
* @throws IOException when some sort of generic IO exception occurs.
*/
- public void takeSnapshot(SnapshotDescription snapshot) throws HBaseSnapshotException, IOException {
+ public void takeSnapshot(SnapshotDescription snapshot) throws IOException {
// check to see if we already completed the snapshot
if (isSnapshotCompleted(snapshot)) {
throw new SnapshotExistsException("Snapshot '" + snapshot.getName()
@@ -543,7 +543,7 @@ public class SnapshotManager implements
// cleanup the working directory by trying to delete it from the fs.
Path workingDir = SnapshotDescriptionUtils.getWorkingSnapshotDir(snapshot, rootDir);
try {
- if (this.master.getMasterFileSystem().getFileSystem().delete(workingDir, true)) {
+ if (!this.master.getMasterFileSystem().getFileSystem().delete(workingDir, true)) {
LOG.error("Couldn't delete working directory (" + workingDir + " for snapshot:" +
SnapshotDescriptionUtils.toString(snapshot));
}
@@ -596,8 +596,8 @@ public class SnapshotManager implements
}
/**
- * Restore the specified snapshot.
- * The restore will fail if the destination table has a snapshot or restore in progress.
+ * Clone the specified snapshot into a new table.
+ * The operation will fail if the destination table has a snapshot or restore in progress.
*
* @param snapshot Snapshot Descriptor
* @param hTableDescriptor Table Descriptor of the table to create
@@ -722,7 +722,7 @@ public class SnapshotManager implements
}
/**
- * Verify if the the restore of the specified table is in progress.
+ * Verify if the restore of the specified table is in progress.
*
* @param tableName table under restore
* @return <tt>true</tt> if there is a restore in progress of the specified table.
@@ -736,7 +736,7 @@ public class SnapshotManager implements
* Returns status of a restore request, specifically comparing source snapshot and target table
* names. Throws exception if not a known snapshot.
* @param snapshot
- * @return true if in progress, false if is not.
+ * @return true if in progress, false if snapshot is completed.
* @throws UnknownSnapshotException if specified source snapshot does not exit.
* @throws IOException if there was some sort of IO failure
*/
@@ -792,7 +792,7 @@ public class SnapshotManager implements
/**
* Scan the restore handlers and remove the finished ones.
*/
- private void cleanupRestoreSentinels() {
+ private synchronized void cleanupRestoreSentinels() {
Iterator<Map.Entry<String, SnapshotSentinel>> it = restoreHandlers.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, SnapshotSentinel> entry = it.next();
@@ -852,7 +852,7 @@ public class SnapshotManager implements
*/
private void checkSnapshotSupport(final Configuration conf, final MasterFileSystem mfs)
throws IOException, UnsupportedOperationException {
- // Verify if snapshot are disabled by the user
+ // Verify if snapshot is disabled by the user
String enabled = conf.get(HBASE_SNAPSHOT_ENABLED);
boolean snapshotEnabled = conf.getBoolean(HBASE_SNAPSHOT_ENABLED, false);
boolean userDisabled = (enabled != null && enabled.trim().length() > 0 && !snapshotEnabled);
@@ -894,7 +894,7 @@ public class SnapshotManager implements
}
}
- // Mark snapshot feature as enabled if cleaners are present and user as not disabled it.
+ // Mark snapshot feature as enabled if cleaners are present and user has not disabled it.
this.isSnapshotSupported = snapshotEnabled && !userDisabled;
// If cleaners are not enabled, verify that there're no snapshot in the .snapshot folder
Modified: hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.java
URL: http://svn.apache.org/viewvc/hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.java?rev=1447967&r1=1447966&r2=1447967&view=diff
==============================================================================
--- hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.java (original)
+++ hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.java Tue Feb 19 23:40:35 2013
@@ -52,6 +52,8 @@ import org.apache.zookeeper.KeeperExcept
* A handler for taking snapshots from the master.
*
* This is not a subclass of TableEventHandler because using that would incur an extra META scan.
+ *
+ * The {@link #snapshotRegions(List)} call should get implemented for each snapshot flavor.
*/
@InterfaceAudience.Private
public abstract class TakeSnapshotHandler extends EventHandler implements SnapshotSentinel,
@@ -91,6 +93,8 @@ public abstract class TakeSnapshotHandle
this.workingDir = SnapshotDescriptionUtils.getWorkingSnapshotDir(snapshot, rootDir);
this.monitor = new ForeignExceptionDispatcher();
+ loadTableDescriptor(); // check that .tableinfo is present
+
// prepare the verify
this.verifier = new MasterSnapshotVerifier(masterServices, snapshot, rootDir);
}
@@ -107,19 +111,13 @@ public abstract class TakeSnapshotHandle
}
/**
- * Execute the core common portions of taking a snapshot. the {@link #snapshotRegions(List)}
+ * Execute the core common portions of taking a snapshot. The {@link #snapshotRegions(List)}
* call should get implemented for each snapshot flavor.
*/
@Override
public void process() {
LOG.info("Running table snapshot operation " + eventType + " on table " + snapshot.getTable());
try {
- loadTableDescriptor(); // check that .tableinfo is present
-
- byte[] ssbytes = Bytes.toBytes(snapshot.getTable());
- List<Pair<HRegionInfo, ServerName>> regionsAndLocations = MetaReader.getTableRegionsAndLocations(
- this.server.getCatalogTracker(), ssbytes, true);
-
// If regions move after this meta scan, the region specific snapshot should fail, triggering
// an external exception that gets captured here.
@@ -128,6 +126,10 @@ public abstract class TakeSnapshotHandle
new TableInfoCopyTask(monitor, snapshot, fs, rootDir).call();
monitor.rethrowException();
+ List<Pair<HRegionInfo, ServerName>> regionsAndLocations =
+ MetaReader.getTableRegionsAndLocations(this.server.getCatalogTracker(),
+ Bytes.toBytes(snapshot.getTable()), true);
+
// run the snapshot
snapshotRegions(regionsAndLocations);
Modified: hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/Procedure.java
URL: http://svn.apache.org/viewvc/hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/Procedure.java?rev=1447967&r1=1447966&r2=1447967&view=diff
==============================================================================
--- hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/Procedure.java (original)
+++ hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/Procedure.java Tue Feb 19 23:40:35 2013
@@ -165,8 +165,7 @@ public class Procedure implements Callab
}
/**
- * Returns a copy of the procedure members still trying to enter the barrier.
- * @return
+ * @return String of the procedure members both trying to enter the barrier and already in barrier
*/
public String getStatus() {
String waiting, done;
@@ -176,9 +175,9 @@ public class Procedure implements Callab
}
return "Procedure " + procName + " { waiting=" + waiting + " done="+ done + " }";
}
-
+
/**
- * Get the ExternalErrorDispatcher
+ * Get the ForeignExceptionDispatcher
* @return the Procedure's monitor.
*/
public ForeignExceptionDispatcher getErrorMonitor() {
@@ -306,7 +305,7 @@ public class Procedure implements Callab
LOG.debug("Waiting on: " + acquiredBarrierLatch + " remaining members to acquire global barrier");
} else {
LOG.warn("Member " + member + " joined barrier, but we weren't waiting on it to join." +
- " Continuting on.");
+ " Continuing on.");
}
}
@@ -345,7 +344,7 @@ public class Procedure implements Callab
}
/**
- * A callback that handles incoming ExternalExceptions.
+ * A callback that handles incoming ForeignExceptions.
*/
@Override
public void receive(ForeignException e) {
@@ -371,7 +370,9 @@ public class Procedure implements Callab
if (monitor != null) {
monitor.rethrowException();
}
- ForeignExceptionDispatcher.LOG.debug("Waiting for '" + latchDescription + "' latch. (sleep:" + wakeFrequency + " ms)");
+ /*
+ ForeignExceptionDispatcher.LOG.debug("Waiting for '" + latchDescription + "' latch. (sleep:"
+ + wakeFrequency + " ms)"); */
released = latch.await(wakeFrequency, TimeUnit.MILLISECONDS);
}
}
Modified: hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/ProcedureCoordinator.java
URL: http://svn.apache.org/viewvc/hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/ProcedureCoordinator.java?rev=1447967&r1=1447966&r2=1447967&view=diff
==============================================================================
--- hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/ProcedureCoordinator.java (original)
+++ hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/ProcedureCoordinator.java Tue Feb 19 23:40:35 2013
@@ -112,7 +112,7 @@ public class ProcedureCoordinator {
}
String procName = proc.getName();
- // make sure we aren't already running an procedure of that name
+ // make sure we aren't already running a procedure of that name
synchronized (procedures) {
Procedure oldProc = procedures.get(procName);
if (oldProc != null) {
@@ -129,9 +129,9 @@ public class ProcedureCoordinator {
// kick off the procedure's execution in a separate thread
Future<Void> f = null;
try {
- f = this.pool.submit(proc);
- // if everything got started properly, we can add it known running procedures
synchronized (procedures) {
+ f = this.pool.submit(proc);
+ // if everything got started properly, we can add it known running procedures
this.procedures.put(procName, proc);
}
return true;
Modified: hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/ProcedureMember.java
URL: http://svn.apache.org/viewvc/hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/ProcedureMember.java?rev=1447967&r1=1447966&r2=1447967&view=diff
==============================================================================
--- hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/ProcedureMember.java (original)
+++ hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/ProcedureMember.java Tue Feb 19 23:40:35 2013
@@ -54,8 +54,8 @@ public class ProcedureMember implements
private final SubprocedureFactory builder;
private final ProcedureMemberRpcs rpcs;
-// private final WeakValueMapping<String, Subprocedure> subprocs = new WeakValueMapping<String, Subprocedure>();
- private final ConcurrentMap<String,Subprocedure> subprocs = new MapMaker().concurrencyLevel(4).weakValues().makeMap();
+ private final ConcurrentMap<String,Subprocedure> subprocs =
+ new MapMaker().concurrencyLevel(4).weakValues().makeMap();
private final ExecutorService pool;
/**
@@ -167,7 +167,8 @@ public class ProcedureMember implements
public void receivedReachedGlobalBarrier(String procName) {
Subprocedure subproc = subprocs.get(procName);
if (subproc == null) {
- LOG.warn("Unexpected reached glabal barrier message for Procedure '" + procName + "'");
+ LOG.warn("Unexpected reached glabal barrier message for Sub-Procedure '" + procName + "'");
+ return;
}
subproc.receiveReachedGlobalBarrier();
}
@@ -187,7 +188,7 @@ public class ProcedureMember implements
* @return true if successfully, false if bailed due to timeout.
* @throws InterruptedException
*/
- public boolean closeAndWait(long timeoutMs) throws InterruptedException {
+ boolean closeAndWait(long timeoutMs) throws InterruptedException {
pool.shutdown();
return pool.awaitTermination(timeoutMs, TimeUnit.MILLISECONDS);
}
@@ -204,9 +205,9 @@ public class ProcedureMember implements
*/
public void controllerConnectionFailure(final String message, final IOException cause) {
Collection<Subprocedure> toNotify = subprocs.values();
+ LOG.error(message, cause);
for (Subprocedure sub : toNotify) {
// TODO notify the elements, if they aren't null
- LOG.error(message, cause);
sub.cancel(message, cause);
}
}
Modified: hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/Subprocedure.java
URL: http://svn.apache.org/viewvc/hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/Subprocedure.java?rev=1447967&r1=1447966&r2=1447967&view=diff
==============================================================================
--- hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/Subprocedure.java (original)
+++ hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/Subprocedure.java Tue Feb 19 23:40:35 2013
@@ -181,7 +181,7 @@ abstract public class Subprocedure imple
insideBarrier();
LOG.debug("Subprocedure '" + barrierName + "' locally completed");
- // Ack that the member has executed and relased local barrier
+ // Ack that the member has executed and released local barrier
rpcs.sendMemberCompleted(this);
LOG.debug("Subprocedure '" + barrierName + "' has notified controller of completion");
Modified: hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/ZKProcedureCoordinatorRpcs.java
URL: http://svn.apache.org/viewvc/hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/ZKProcedureCoordinatorRpcs.java?rev=1447967&r1=1447966&r2=1447967&view=diff
==============================================================================
--- hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/ZKProcedureCoordinatorRpcs.java (original)
+++ hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/ZKProcedureCoordinatorRpcs.java Tue Feb 19 23:40:35 2013
@@ -66,6 +66,9 @@ public class ZKProcedureCoordinatorRpcs
* appear, first acquire to relevant listener or sets watch waiting for notification of
* the acquire node
*
+ * @param proc the Procedure
+ * @param info data to be stored in the acquire node
+ * @param nodeNames children of the acquire phase
* @throws IOException if any failure occurs.
*/
@Override
@@ -79,12 +82,10 @@ public class ZKProcedureCoordinatorRpcs
if (ZKUtil.watchAndCheckExists(zkProc.getWatcher(), abortNode)) {
abort(abortNode);
}
-
// If we get an abort node watch triggered here, we'll go complete creating the acquired
// znode but then handle the acquire znode and bail out
-
} catch (KeeperException e) {
- LOG.error("Failed to create abort", e);
+ LOG.error("Failed to watch abort", e);
throw new IOException("Failed while watching abort node:" + abortNode, e);
}
@@ -155,11 +156,12 @@ public class ZKProcedureCoordinatorRpcs
* Start monitoring znodes in ZK - subclass hook to start monitoring znodes they are about.
* @return true if succeed, false if encountered initialization errors.
*/
- final public boolean start(final ProcedureCoordinator listener) {
+ final public boolean start(final ProcedureCoordinator coordinator) {
if (this.coordinator != null) {
- throw new IllegalStateException("ZKProcedureCoordinator already started and already has listener installed");
+ throw new IllegalStateException(
+ "ZKProcedureCoordinator already started and already has listener installed");
}
- this.coordinator = listener;
+ this.coordinator = coordinator;
try {
this.zkProc = new ZKProcedureUtil(watcher, procedureType, coordName) {
@@ -170,15 +172,15 @@ public class ZKProcedureCoordinatorRpcs
logZKTree(this.baseZNode);
if (isAcquiredPathNode(path)) {
// node wasn't present when we created the watch so zk event triggers acquire
- listener.memberAcquiredBarrier(ZKUtil.getNodeName(ZKUtil.getParent(path)), ZKUtil.getNodeName(path));
- }
- if (isReachedPathNode(path)) {
- // node wasn't present when we created the watch so zk event triggers the finished barrier.
-
- // TODO Nothing enforces that acquire and reached znodes from showing up in the wrong order.
- listener.memberFinishedBarrier(ZKUtil.getNodeName(ZKUtil.getParent(path)), ZKUtil.getNodeName(path));
- }
- if (isAbortPathNode(path)) {
+ coordinator.memberAcquiredBarrier(ZKUtil.getNodeName(ZKUtil.getParent(path)),
+ ZKUtil.getNodeName(path));
+ } else if (isReachedPathNode(path)) {
+ // node was absent when we created the watch so zk event triggers the finished barrier.
+
+ // TODO Nothing enforces that acquire and reached znodes from showing up in wrong order.
+ coordinator.memberFinishedBarrier(ZKUtil.getNodeName(ZKUtil.getParent(path)),
+ ZKUtil.getNodeName(path));
+ } else if (isAbortPathNode(path)) {
abort(path);
}
}
Modified: hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/ZKProcedureMemberRpcs.java
URL: http://svn.apache.org/viewvc/hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/ZKProcedureMemberRpcs.java?rev=1447967&r1=1447966&r2=1447967&view=diff
==============================================================================
--- hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/ZKProcedureMemberRpcs.java (original)
+++ hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/ZKProcedureMemberRpcs.java Tue Feb 19 23:40:35 2013
@@ -62,7 +62,7 @@ public class ZKProcedureMemberRpcs imple
private ZKProcedureUtil zkController;
/**
- * Must call {@link #start(ProcedureMember)} before this is can be used.
+ * Must call {@link #start(ProcedureMember)} before this can be used.
* @param watcher {@link ZooKeeperWatcher} to be owned by <tt>this</tt>. Closed via
* {@link #close()}.
* @param procType name of the znode describing the procedure type
@@ -120,12 +120,6 @@ public class ZKProcedureMemberRpcs imple
return zkController;
}
- public void start() {
- LOG.debug("Starting the procedure member");
- watchForAbortedProcedures();
- waitForNewProcedures();
- }
-
@Override
public String getMemberName() {
return memberName;
@@ -145,7 +139,8 @@ public class ZKProcedureMemberRpcs imple
LOG.debug("Checking for aborted procedures on node: '" + zkController.getAbortZnode() + "'");
try {
// this is the list of the currently aborted procedues
- for (String node : ZKUtil.listChildrenAndWatchForNewChildren(zkController.getWatcher(), zkController.getAbortZnode())) {
+ for (String node : ZKUtil.listChildrenAndWatchForNewChildren(zkController.getWatcher(),
+ zkController.getAbortZnode())) {
String abortNode = ZKUtil.joinZNode(zkController.getAbortZnode(), node);
abort(abortNode);
}
@@ -157,11 +152,12 @@ public class ZKProcedureMemberRpcs imple
private void waitForNewProcedures() {
// watch for new procedues that we need to start subprocedures for
- LOG.debug("Looking for new procedures under znode: '" + zkController.getAcquiredBarrier() + "'");
- List<String> runningProcedure = null;
+ LOG.debug("Looking for new procedures under znode:'" + zkController.getAcquiredBarrier() + "'");
+ List<String> runningProcedures = null;
try {
- runningProcedure = ZKUtil.listChildrenAndWatchForNewChildren(zkController.getWatcher(), zkController.getAcquiredBarrier());
- if (runningProcedure == null) {
+ runningProcedures = ZKUtil.listChildrenAndWatchForNewChildren(zkController.getWatcher(),
+ zkController.getAcquiredBarrier());
+ if (runningProcedures == null) {
LOG.debug("No running procedures.");
return;
}
@@ -169,7 +165,11 @@ public class ZKProcedureMemberRpcs imple
member.controllerConnectionFailure("General failure when watching for new procedures",
new IOException(e));
}
- for (String procName : runningProcedure) {
+ if (runningProcedures == null) {
+ LOG.debug("No running procedures.");
+ return;
+ }
+ for (String procName : runningProcedures) {
// then read in the procedure information
String path = ZKUtil.joinZNode(zkController.getAcquiredBarrier(), procName);
startNewSubprocedure(path);
@@ -177,7 +177,7 @@ public class ZKProcedureMemberRpcs imple
}
/**
- * Kick off a new procedure on the listener with the data stored in the passed znode.
+ * Kick off a new sub-procedure on the listener with the data stored in the passed znode.
* <p>
* Will attempt to create the same procedure multiple times if an procedure znode with the same
* name is created. It is left up the coordinator to ensure this doesn't occur.
@@ -238,7 +238,8 @@ public class ZKProcedureMemberRpcs imple
try {
LOG.debug("Member: '" + memberName + "' joining acquired barrier for procedure (" + procName
+ ") in zk");
- String acquiredZNode = ZKUtil.joinZNode(ZKProcedureUtil.getAcquireBarrierNode(zkController, procName), memberName);
+ String acquiredZNode = ZKUtil.joinZNode(ZKProcedureUtil.getAcquireBarrierNode(
+ zkController, procName), memberName);
ZKUtil.createAndFailSilent(zkController.getWatcher(), acquiredZNode);
// watch for the complete node for this snapshot
@@ -254,7 +255,7 @@ public class ZKProcedureMemberRpcs imple
}
/**
- * This acts as the ack for a completed
+ * This acts as the ack for a completed snapshot
*/
@Override
public void sendMemberCompleted(Subprocedure sub) throws IOException {
@@ -278,12 +279,12 @@ public class ZKProcedureMemberRpcs imple
public void sendMemberAborted(Subprocedure sub, ForeignException ee) {
if (sub == null) {
LOG.error("Failed due to null subprocedure", ee);
+ return;
}
String procName = sub.getName();
LOG.debug("Aborting procedure (" + procName + ") in zk");
String procAbortZNode = zkController.getAbortZNode(procName);
try {
- LOG.debug("Creating abort znode:" + procAbortZNode);
String source = (ee.getSource() == null) ? memberName: ee.getSource();
byte[] errorInfo = ProtobufUtil.prependPBMagic(ForeignException.serialize(source, ee));
ZKUtil.createAndFailSilent(zkController.getWatcher(), procAbortZNode, errorInfo);
@@ -316,9 +317,10 @@ public class ZKProcedureMemberRpcs imple
LOG.error(msg);
// we got a remote exception, but we can't describe it so just return exn from here
ee = new ForeignException(getMemberName(), new IllegalArgumentException(msg));
+ } else {
+ data = Arrays.copyOfRange(data, ProtobufUtil.lengthOfPBMagic(), data.length);
+ ee = ForeignException.deserialize(data);
}
- data = Arrays.copyOfRange(data, ProtobufUtil.lengthOfPBMagic(), data.length);
- ee = ForeignException.deserialize(data);
} catch (InvalidProtocolBufferException e) {
LOG.warn("Got an error notification for op:" + opName
+ " but we can't read the information. Killing the procedure.");
@@ -336,7 +338,8 @@ public class ZKProcedureMemberRpcs imple
public void start(ProcedureMember listener) {
LOG.debug("Starting procedure member '" + this.memberName + "'");
this.member = listener;
- this.start();
+ watchForAbortedProcedures();
+ waitForNewProcedures();
}
@Override
Modified: hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/ZKProcedureUtil.java
URL: http://svn.apache.org/viewvc/hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/ZKProcedureUtil.java?rev=1447967&r1=1447966&r2=1447967&view=diff
==============================================================================
--- hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/ZKProcedureUtil.java (original)
+++ hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/ZKProcedureUtil.java Tue Feb 19 23:40:35 2013
@@ -234,7 +234,7 @@ public abstract class ZKProcedureUtil
* @param root name of the root directory in zk to print
* @throws KeeperException
*/
- public void logZKTree(String root) {
+ void logZKTree(String root) {
if (!LOG.isDebugEnabled()) return;
LOG.debug("Current zk system:");
String prefix = "|-";
Modified: hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.java
URL: http://svn.apache.org/viewvc/hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.java?rev=1447967&r1=1447966&r2=1447967&view=diff
==============================================================================
--- hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.java (original)
+++ hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.java Tue Feb 19 23:40:35 2013
@@ -34,7 +34,7 @@ import org.apache.hadoop.hbase.regionser
import org.apache.hadoop.hbase.snapshot.SnapshotDescriptionUtils;
/**
- * This online snapshot implementation forces uses the distributed procedure framework to force a
+ * This online snapshot implementation uses the distributed procedure framework to force a
* store flush and then records the hfiles. Its enter stage does nothing. Its leave stage then
* flushes the memstore, builds the region server's snapshot manifest from its hfiles list, and
* copies .regioninfos into the snapshot working directory. At the master side, there is an atomic
@@ -102,9 +102,9 @@ public class FlushSnapshotSubprocedure e
if (taskManager.hasTasks()) {
throw new IllegalStateException("Attempting to take snapshot "
+ SnapshotDescriptionUtils.toString(snapshot)
- + " but we have currently have outstanding tasks");
+ + " but we currently have outstanding tasks");
}
-
+
// Add all hfiles already existing in region.
for (HRegion region : regions) {
// submit one task per region for parallelize by region.
Modified: hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/snapshot/RegionServerSnapshotManager.java
URL: http://svn.apache.org/viewvc/hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/snapshot/RegionServerSnapshotManager.java?rev=1447967&r1=1447966&r2=1447967&view=diff
==============================================================================
--- hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/snapshot/RegionServerSnapshotManager.java (original)
+++ hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/snapshot/RegionServerSnapshotManager.java Tue Feb 19 23:40:35 2013
@@ -73,7 +73,7 @@ import com.google.protobuf.InvalidProtoc
public class RegionServerSnapshotManager {
private static final Log LOG = LogFactory.getLog(RegionServerSnapshotManager.class);
- /** Maximum number of concurrent snapshot region tasks that can run concurrently */
+ /** Maximum number of snapshot region tasks that can run concurrently */
private static final String CONCURENT_SNAPSHOT_TASKS_KEY = "hbase.snapshot.region.concurrentTasks";
private static final int DEFAULT_CONCURRENT_SNAPSHOT_TASKS = 3;
@@ -212,8 +212,8 @@ public class RegionServerSnapshotManager
/**
* Determine if the snapshot should be handled on this server
*
- * NOTE: This is racy -- the master expects a list of regionservers, but the regions get the
- * regions. This means if a region moves somewhere between the calls we'll miss some regions.
+ * NOTE: This is racy -- the master expects a list of regionservers.
+ * This means if a region moves somewhere between the calls we'll miss some regions.
* For example, a region move during a snapshot could result in a region to be skipped or done
* twice. This is manageable because the {@link MasterSnapshotVerifier} will double check the
* region lists after the online portion of the snapshot completes and will explicitly fail the
@@ -297,7 +297,7 @@ public class RegionServerSnapshotManager
/**
* Wait for all of the currently outstanding tasks submitted via {@link #submitTask(Callable)}.
- * This *must* be called to after all tasks are submitted via submitTask.
+ * This *must* be called after all tasks are submitted via submitTask.
*
* @return <tt>true</tt> on success, <tt>false</tt> otherwise
* @throws InterruptedException
@@ -313,7 +313,7 @@ public class RegionServerSnapshotManager
Future<Void> f = taskPool.take();
f.get();
if (!futures.remove(f)) {
- LOG.warn("unexpected future");
+ LOG.warn("unexpected future" + f);
}
LOG.debug("Completed " + (i+1) + "/" + sz + " local region snapshots.");
}
Modified: hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/ExportSnapshot.java
URL: http://svn.apache.org/viewvc/hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/ExportSnapshot.java?rev=1447967&r1=1447966&r2=1447967&view=diff
==============================================================================
--- hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/ExportSnapshot.java (original)
+++ hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/ExportSnapshot.java Tue Feb 19 23:40:35 2013
@@ -362,7 +362,8 @@ public final class ExportSnapshot extend
* Extract the list of files (HFiles/HLogs) to copy using Map-Reduce.
* @return list of files referenced by the snapshot (pair of path and size)
*/
- private List<Pair<Path, Long>> getSnapshotFiles(final FileSystem fs, final Path snapshotDir) throws IOException {
+ private List<Pair<Path, Long>> getSnapshotFiles(final FileSystem fs, final Path snapshotDir)
+ throws IOException {
SnapshotDescription snapshotDesc = SnapshotDescriptionUtils.readSnapshotInfo(fs, snapshotDir);
final List<Pair<Path, Long>> files = new ArrayList<Pair<Path, Long>>();
Modified: hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.java
URL: http://svn.apache.org/viewvc/hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.java?rev=1447967&r1=1447966&r2=1447967&view=diff
==============================================================================
--- hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.java (original)
+++ hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.java Tue Feb 19 23:40:35 2013
@@ -95,7 +95,7 @@ import org.apache.hadoop.io.IOUtils;
*/
@InterfaceAudience.Private
public class RestoreSnapshotHelper {
- private static final Log LOG = LogFactory.getLog(RestoreSnapshotHelper.class);
+ private static final Log LOG = LogFactory.getLog(RestoreSnapshotHelper.class);
private final Map<byte[], byte[]> regionsMap =
new TreeMap<byte[], byte[]>(Bytes.BYTES_COMPARATOR);
@@ -290,7 +290,7 @@ public class RestoreSnapshotHelper {
}
/**
- * Restore region by removing files not it in the snapshot
+ * Restore region by removing files not in the snapshot
* and adding the missing ones from the snapshot.
*/
private void restoreRegion(HRegionInfo regionInfo) throws IOException {
Modified: hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/SnapshotTask.java
URL: http://svn.apache.org/viewvc/hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/SnapshotTask.java?rev=1447967&r1=1447966&r2=1447967&view=diff
==============================================================================
--- hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/SnapshotTask.java (original)
+++ hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/SnapshotTask.java Tue Feb 19 23:40:35 2013
@@ -19,6 +19,7 @@ package org.apache.hadoop.hbase.snapshot
import java.util.concurrent.Callable;
+import org.apache.hadoop.classification.InterfaceAudience;
import org.apache.hadoop.hbase.errorhandling.ForeignException;
import org.apache.hadoop.hbase.errorhandling.ForeignExceptionSnare;
import org.apache.hadoop.hbase.errorhandling.ForeignExceptionDispatcher;
@@ -27,6 +28,7 @@ import org.apache.hadoop.hbase.protobuf.
/**
* General snapshot operation taken on a regionserver
*/
+@InterfaceAudience.Private
public abstract class SnapshotTask implements ForeignExceptionSnare, Callable<Void>{
protected final SnapshotDescription snapshot;
Modified: hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/TablePartiallyOpenException.java
URL: http://svn.apache.org/viewvc/hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/TablePartiallyOpenException.java?rev=1447967&r1=1447966&r2=1447967&view=diff
==============================================================================
--- hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/TablePartiallyOpenException.java (original)
+++ hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/TablePartiallyOpenException.java Tue Feb 19 23:40:35 2013
@@ -24,7 +24,7 @@ import org.apache.hadoop.classification.
import org.apache.hadoop.hbase.util.Bytes;
/**
- * Thrown if a table should be online/offline but is partial open
+ * Thrown if a table should be online/offline but is partially open
*/
@InterfaceAudience.Public
@InterfaceStability.Evolving
Modified: hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/util/FSUtils.java
URL: http://svn.apache.org/viewvc/hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/util/FSUtils.java?rev=1447967&r1=1447966&r2=1447967&view=diff
==============================================================================
--- hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/util/FSUtils.java (original)
+++ hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/util/FSUtils.java Tue Feb 19 23:40:35 2013
@@ -949,7 +949,7 @@ public abstract class FSUtils {
/**
* A {@link PathFilter} that returns only regular files.
*/
- public static class FileFilter implements PathFilter {
+ static class FileFilter implements PathFilter {
private final FileSystem fs;
public FileFilter(final FileSystem fs) {
@@ -995,21 +995,6 @@ public abstract class FSUtils {
}
/**
- * Filter out paths that are hidden (start with '.') and are not directories.
- */
- public static class VisibleDirectory extends DirFilter {
-
- public VisibleDirectory(FileSystem fs) {
- super(fs);
- }
-
- @Override
- public boolean accept(Path file) {
- return super.accept(file) && !file.getName().startsWith(".");
- }
- }
-
- /**
* Heuristic to determine whether is safe or not to open a file for append
* Looks both for dfs.support.append and use reflection to search
* for SequenceFile.Writer.syncFs() or FSDataOutputStream.hflush()
Modified: hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/util/FSVisitor.java
URL: http://svn.apache.org/viewvc/hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/util/FSVisitor.java?rev=1447967&r1=1447966&r2=1447967&view=diff
==============================================================================
--- hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/util/FSVisitor.java (original)
+++ hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/util/FSVisitor.java Tue Feb 19 23:40:35 2013
@@ -118,7 +118,7 @@ public final class FSVisitor {
}
/**
- * Iterate over each region in the table the table and inform about recovered.edits
+ * Iterate over each region in the table and inform about recovered.edits
*
* @param fs {@link FileSystem}
* @param tableDir {@link Path} to the table directory
Modified: hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/util/ModifyRegionUtils.java
URL: http://svn.apache.org/viewvc/hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/util/ModifyRegionUtils.java?rev=1447967&r1=1447966&r2=1447967&view=diff
==============================================================================
--- hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/util/ModifyRegionUtils.java (original)
+++ hbase/branches/hbase-7290v2/hbase-server/src/main/java/org/apache/hadoop/hbase/util/ModifyRegionUtils.java Tue Feb 19 23:40:35 2013
@@ -45,6 +45,7 @@ import org.apache.hadoop.hbase.HTableDes
import org.apache.hadoop.hbase.backup.HFileArchiver;
import org.apache.hadoop.hbase.catalog.CatalogTracker;
import org.apache.hadoop.hbase.catalog.MetaEditor;
+import org.apache.hadoop.hbase.client.Delete;
import org.apache.hadoop.hbase.master.AssignmentManager;
import org.apache.hadoop.hbase.regionserver.HRegion;
@@ -187,26 +188,14 @@ public abstract class ModifyRegionUtils
public static void deleteRegions(final Configuration conf, final FileSystem fs,
final CatalogTracker catalogTracker, final List<HRegionInfo> regions) throws IOException {
if (regions != null && regions.size() > 0) {
+ List<Delete> deletes = new ArrayList<Delete>(regions.size());
for (HRegionInfo hri: regions) {
- deleteRegion(conf, fs, catalogTracker, hri);
+ deletes.add(new Delete(hri.getRegionName()));
+
+ // "Delete" region from FS
+ HFileArchiver.archiveRegion(conf, fs, hri);
}
+ MetaEditor.deleteFromMetaTable(catalogTracker, deletes);
}
}
-
- /**
- * Remove region from file-system and .META.
- * (The region must be offline).
- *
- * @param fs {@link FileSystem} on which to delete the region directory
- * @param catalogTracker the catalog tracker
- * @param regionInfo {@link HRegionInfo} to delete.
- */
- public static void deleteRegion(final Configuration conf, final FileSystem fs,
- final CatalogTracker catalogTracker, final HRegionInfo regionInfo) throws IOException {
- // Remove region from .META.
- MetaEditor.deleteRegion(catalogTracker, regionInfo);
-
- // "Delete" region from FS
- HFileArchiver.archiveRegion(conf, fs, regionInfo);
- }
}
Modified: hbase/branches/hbase-7290v2/hbase-server/src/main/resources/hbase-default.xml
URL: http://svn.apache.org/viewvc/hbase/branches/hbase-7290v2/hbase-server/src/main/resources/hbase-default.xml?rev=1447967&r1=1447966&r2=1447967&view=diff
==============================================================================
--- hbase/branches/hbase-7290v2/hbase-server/src/main/resources/hbase-default.xml (original)
+++ hbase/branches/hbase-7290v2/hbase-server/src/main/resources/hbase-default.xml Tue Feb 19 23:40:35 2013
@@ -964,7 +964,6 @@
The thread pool always has at least these number of threads so
the REST server is ready to serve incoming requests. The default
is 2.
->>>>>>> apache/trunk
</description>
</property>
</configuration>
Modified: hbase/branches/hbase-7290v2/hbase-server/src/main/ruby/shell/commands/clone_snapshot.rb
URL: http://svn.apache.org/viewvc/hbase/branches/hbase-7290v2/hbase-server/src/main/ruby/shell/commands/clone_snapshot.rb?rev=1447967&r1=1447966&r2=1447967&view=diff
==============================================================================
--- hbase/branches/hbase-7290v2/hbase-server/src/main/ruby/shell/commands/clone_snapshot.rb (original)
+++ hbase/branches/hbase-7290v2/hbase-server/src/main/ruby/shell/commands/clone_snapshot.rb Tue Feb 19 23:40:35 2013
@@ -21,10 +21,11 @@ module Shell
class CloneSnapshot < Command
def help
return <<-EOF
-Create a new table by cloning the snapshot content. Examples:
+Create a new table by cloning the snapshot content.
There're no copies of data involved.
And writing on the newly created table will not influence the snapshot data.
+Examples:
hbase> clone_snapshot 'snapshotName', 'tableName'
EOF
end