You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by en...@apache.org on 2013/11/08 03:41:26 UTC
svn commit: r1539906 - in
/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase:
catalog/MetaEditor.java master/snapshot/RestoreSnapshotHandler.java
Author: enis
Date: Fri Nov 8 02:41:25 2013
New Revision: 1539906
URL: http://svn.apache.org/r1539906
Log:
HBASE-9906 Restore snapshot fails to restore the meta edits sporadically
Modified:
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/catalog/MetaEditor.java
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/RestoreSnapshotHandler.java
Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/catalog/MetaEditor.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/catalog/MetaEditor.java?rev=1539906&r1=1539905&r2=1539906&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/catalog/MetaEditor.java (original)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/catalog/MetaEditor.java Fri Nov 8 02:41:25 2013
@@ -32,16 +32,16 @@ import org.apache.hadoop.hbase.HRegionIn
import org.apache.hadoop.hbase.NotAllMetaRegionsOnlineException;
import org.apache.hadoop.hbase.ServerName;
import org.apache.hadoop.hbase.client.Delete;
-import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Mutation;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.ipc.CoprocessorRpcChannel;
import org.apache.hadoop.hbase.protobuf.ProtobufUtil;
import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto.MutationType;
-import org.apache.hadoop.hbase.protobuf.generated.MultiRowMutationProtos.MutateRowsRequest;
import org.apache.hadoop.hbase.protobuf.generated.MultiRowMutationProtos.MultiRowMutationService;
+import org.apache.hadoop.hbase.protobuf.generated.MultiRowMutationProtos.MutateRowsRequest;
import org.apache.hadoop.hbase.util.Bytes;
+import org.apache.hadoop.hbase.util.Threads;
import com.google.protobuf.ServiceException;
@@ -524,6 +524,24 @@ public class MetaEditor {
}
/**
+ * Overwrites the specified regions from hbase:meta
+ * @param catalogTracker
+ * @param regionInfos list of regions to be added to META
+ * @throws IOException
+ */
+ public static void overwriteRegions(CatalogTracker catalogTracker,
+ List<HRegionInfo> regionInfos) throws IOException {
+ deleteRegions(catalogTracker, regionInfos);
+ // Why sleep? This is the easiest way to ensure that the previous deletes does not
+ // eclipse the following puts, that might happen in the same ts from the server.
+ // See HBASE-9906, and HBASE-9879. Once either HBASE-9879, HBASE-8770 is fixed,
+ // or HBASE-9905 is fixed and meta uses seqIds, we do not need the sleep.
+ Threads.sleep(20);
+ addRegionsToMeta(catalogTracker, regionInfos);
+ LOG.info("Overwritten " + regionInfos);
+ }
+
+ /**
* Deletes merge qualifiers for the specified merged region.
* @param catalogTracker
* @param mergedRegion
Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/RestoreSnapshotHandler.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/RestoreSnapshotHandler.java?rev=1539906&r1=1539905&r2=1539906&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/RestoreSnapshotHandler.java (original)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/RestoreSnapshotHandler.java Fri Nov 8 02:41:25 2013
@@ -29,9 +29,9 @@ import org.apache.commons.logging.LogFac
import org.apache.hadoop.classification.InterfaceAudience;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
-import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.HRegionInfo;
import org.apache.hadoop.hbase.HTableDescriptor;
+import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.catalog.CatalogTracker;
import org.apache.hadoop.hbase.catalog.MetaEditor;
import org.apache.hadoop.hbase.errorhandling.ForeignException;
@@ -92,6 +92,7 @@ public class RestoreSnapshotHandler exte
+ hTableDescriptor.getTableName());
}
+ @Override
public RestoreSnapshotHandler prepare() throws IOException {
return (RestoreSnapshotHandler) super.prepare();
}
@@ -145,7 +146,6 @@ public class RestoreSnapshotHandler exte
// that are not correct after the restore.
List<HRegionInfo> hrisToRemove = new LinkedList<HRegionInfo>();
if (metaChanges.hasRegionsToRemove()) hrisToRemove.addAll(metaChanges.getRegionsToRemove());
- if (metaChanges.hasRegionsToRestore()) hrisToRemove.addAll(metaChanges.getRegionsToRestore());
MetaEditor.deleteRegions(catalogTracker, hrisToRemove);
// 4.2 Add the new set of regions to META
@@ -156,8 +156,8 @@ public class RestoreSnapshotHandler exte
// in the snapshot folder.
hris.clear();
if (metaChanges.hasRegionsToAdd()) hris.addAll(metaChanges.getRegionsToAdd());
- if (metaChanges.hasRegionsToRestore()) hris.addAll(metaChanges.getRegionsToRestore());
MetaEditor.addRegionsToMeta(catalogTracker, hris);
+ MetaEditor.overwriteRegions(catalogTracker, metaChanges.getRegionsToRestore());
metaChanges.updateMetaParentRegions(catalogTracker, hris);
// At this point the restore is complete. Next step is enabling the table.