Return-Path: X-Original-To: apmail-hbase-commits-archive@www.apache.org Delivered-To: apmail-hbase-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 8866C106D8 for ; Fri, 8 Nov 2013 02:44:38 +0000 (UTC) Received: (qmail 58645 invoked by uid 500); 8 Nov 2013 02:44:38 -0000 Delivered-To: apmail-hbase-commits-archive@hbase.apache.org Received: (qmail 58611 invoked by uid 500); 8 Nov 2013 02:44:38 -0000 Mailing-List: contact commits-help@hbase.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@hbase.apache.org Delivered-To: mailing list commits@hbase.apache.org Received: (qmail 58604 invoked by uid 99); 8 Nov 2013 02:44:38 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 08 Nov 2013 02:44:38 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 08 Nov 2013 02:44:35 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id DDA1E23889BB; Fri, 8 Nov 2013 02:44:13 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1539907 - in /hbase/branches/0.96/hbase-server/src/main/java/org/apache/hadoop/hbase: catalog/MetaEditor.java master/snapshot/RestoreSnapshotHandler.java Date: Fri, 08 Nov 2013 02:44:13 -0000 To: commits@hbase.apache.org From: enis@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20131108024413.DDA1E23889BB@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: enis Date: Fri Nov 8 02:44:13 2013 New Revision: 1539907 URL: http://svn.apache.org/r1539907 Log: HBASE-9906 Restore snapshot fails to restore the meta edits sporadically Modified: hbase/branches/0.96/hbase-server/src/main/java/org/apache/hadoop/hbase/catalog/MetaEditor.java hbase/branches/0.96/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/RestoreSnapshotHandler.java Modified: hbase/branches/0.96/hbase-server/src/main/java/org/apache/hadoop/hbase/catalog/MetaEditor.java URL: http://svn.apache.org/viewvc/hbase/branches/0.96/hbase-server/src/main/java/org/apache/hadoop/hbase/catalog/MetaEditor.java?rev=1539907&r1=1539906&r2=1539907&view=diff ============================================================================== --- hbase/branches/0.96/hbase-server/src/main/java/org/apache/hadoop/hbase/catalog/MetaEditor.java (original) +++ hbase/branches/0.96/hbase-server/src/main/java/org/apache/hadoop/hbase/catalog/MetaEditor.java Fri Nov 8 02:44:13 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 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/branches/0.96/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/RestoreSnapshotHandler.java URL: http://svn.apache.org/viewvc/hbase/branches/0.96/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/RestoreSnapshotHandler.java?rev=1539907&r1=1539906&r2=1539907&view=diff ============================================================================== --- hbase/branches/0.96/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/RestoreSnapshotHandler.java (original) +++ hbase/branches/0.96/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/RestoreSnapshotHandler.java Fri Nov 8 02:44:13 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 hrisToRemove = new LinkedList(); 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.