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 2015/06/10 01:45:06 UTC
hbase git commit: HBASE-13875 Clock skew between master and region
server may render restored region without server address
Repository: hbase
Updated Branches:
refs/heads/branch-1.1 f95430a84 -> 8c3ba0252
HBASE-13875 Clock skew between master and region server may render restored region without server address
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/8c3ba025
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/8c3ba025
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/8c3ba025
Branch: refs/heads/branch-1.1
Commit: 8c3ba025219b9ead7b16e7c7dad2999313eca7e5
Parents: f95430a
Author: tedyu <yu...@gmail.com>
Authored: Tue Jun 9 16:44:55 2015 -0700
Committer: tedyu <yu...@gmail.com>
Committed: Tue Jun 9 16:44:55 2015 -0700
----------------------------------------------------------------------
.../apache/hadoop/hbase/MetaTableAccessor.java | 49 ++++++++++++++++----
1 file changed, 41 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/8c3ba025/hbase-client/src/main/java/org/apache/hadoop/hbase/MetaTableAccessor.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/MetaTableAccessor.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/MetaTableAccessor.java
index 3c6cafe..d429182 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/MetaTableAccessor.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/MetaTableAccessor.java
@@ -929,7 +929,14 @@ public class MetaTableAccessor {
*/
public static Put makePutFromRegionInfo(HRegionInfo regionInfo)
throws IOException {
- Put put = new Put(regionInfo.getRegionName());
+ return makePutFromRegionInfo(regionInfo, HConstants.LATEST_TIMESTAMP);
+ }
+ /**
+ * Generates and returns a Put containing the region into for the catalog table
+ */
+ public static Put makePutFromRegionInfo(HRegionInfo regionInfo, long ts)
+ throws IOException {
+ Put put = new Put(regionInfo.getRegionName(), ts);
addRegionInfo(put, regionInfo);
return put;
}
@@ -1154,11 +1161,23 @@ public class MetaTableAccessor {
public static void addRegionsToMeta(Connection connection,
List<HRegionInfo> regionInfos, int regionReplication)
throws IOException {
+ addRegionsToMeta(connection, regionInfos, regionReplication, HConstants.LATEST_TIMESTAMP);
+ }
+ /**
+ * Adds a hbase:meta row for each of the specified new regions.
+ * @param connection connection we're using
+ * @param regionInfos region information list
+ * @param regionReplication
+ * @param ts desired timestamp
+ * @throws IOException if problem connecting or updating meta
+ */
+ public static void addRegionsToMeta(Connection connection,
+ List<HRegionInfo> regionInfos, int regionReplication, long ts)
+ throws IOException {
List<Put> puts = new ArrayList<Put>();
for (HRegionInfo regionInfo : regionInfos) {
if (RegionReplicaUtil.isDefaultReplica(regionInfo)) {
- puts.add(makePutFromRegionInfo(regionInfo));
- Put put = makePutFromRegionInfo(regionInfo);
+ Put put = makePutFromRegionInfo(regionInfo, ts);
// Add empty locations for region replicas so that number of replicas can be cached
// whenever the primary region is looked up from meta
for (int i = 1; i < regionReplication; i++) {
@@ -1380,17 +1399,28 @@ public class MetaTableAccessor {
* Deletes the specified regions from META.
* @param connection connection we're using
* @param regionsInfo list of regions to be deleted from META
+ * @param ts desired timestamp
* @throws IOException
*/
public static void deleteRegions(Connection connection,
- List<HRegionInfo> regionsInfo) throws IOException {
+ List<HRegionInfo> regionsInfo, long ts) throws IOException {
List<Delete> deletes = new ArrayList<Delete>(regionsInfo.size());
for (HRegionInfo hri: regionsInfo) {
- deletes.add(new Delete(hri.getRegionName()));
+ deletes.add(new Delete(hri.getRegionName(), ts));
}
deleteFromMetaTable(connection, deletes);
LOG.info("Deleted " + regionsInfo);
}
+ /**
+ * Deletes the specified regions from META.
+ * @param connection connection we're using
+ * @param regionsInfo list of regions to be deleted from META
+ * @throws IOException
+ */
+ public static void deleteRegions(Connection connection,
+ List<HRegionInfo> regionsInfo) throws IOException {
+ deleteRegions(connection, regionsInfo, HConstants.LATEST_TIMESTAMP);
+ }
/**
* Adds and Removes the specified regions from hbase:meta
@@ -1431,13 +1461,16 @@ public class MetaTableAccessor {
*/
public static void overwriteRegions(Connection connection,
List<HRegionInfo> regionInfos, int regionReplication) throws IOException {
- deleteRegions(connection, regionInfos);
+ // use master time for delete marker and the Put
+ long now = EnvironmentEdgeManager.currentTime();
+ deleteRegions(connection, regionInfos, now);
// 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(connection, regionInfos, regionReplication);
+ //
+ // HBASE-13875 uses master timestamp for the mutations. The 20ms sleep is not needed
+ addRegionsToMeta(connection, regionInfos, regionReplication, now+1);
LOG.info("Overwritten " + regionInfos);
}