You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by ra...@apache.org on 2014/10/21 07:35:24 UTC
git commit: PHOENIX-1238 Rollback index region split on any split
failure(Rajeshbabu)
Repository: phoenix
Updated Branches:
refs/heads/master 1816f6e81 -> 677e34cae
PHOENIX-1238 Rollback index region split on any split failure(Rajeshbabu)
Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo
Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/677e34ca
Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/677e34ca
Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/677e34ca
Branch: refs/heads/master
Commit: 677e34cae36c57912b7ee1dd3173d0975c3bd25a
Parents: 1816f6e
Author: Rajeshbabu Chintaguntla <ra...@apache.org>
Authored: Tue Oct 21 05:35:06 2014 +0000
Committer: Rajeshbabu Chintaguntla <ra...@apache.org>
Committed: Tue Oct 21 05:35:06 2014 +0000
----------------------------------------------------------------------
.../regionserver/IndexSplitTransaction.java | 4 ++
.../hbase/regionserver/LocalIndexSplitter.java | 74 ++++++++++++++------
2 files changed, 56 insertions(+), 22 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/phoenix/blob/677e34ca/phoenix-core/src/main/java/org/apache/hadoop/hbase/regionserver/IndexSplitTransaction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/hadoop/hbase/regionserver/IndexSplitTransaction.java b/phoenix-core/src/main/java/org/apache/hadoop/hbase/regionserver/IndexSplitTransaction.java
index 87e7d81..18f1b0b 100644
--- a/phoenix-core/src/main/java/org/apache/hadoop/hbase/regionserver/IndexSplitTransaction.java
+++ b/phoenix-core/src/main/java/org/apache/hadoop/hbase/regionserver/IndexSplitTransaction.java
@@ -971,4 +971,8 @@ public class IndexSplitTransaction {
return ZKAssign.transitionNode(zkw, parent, serverName,
beginState, endState, znodeVersion, payload);
}
+
+ public HRegion getParent() {
+ return this.parent;
+ }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/phoenix/blob/677e34ca/phoenix-core/src/main/java/org/apache/hadoop/hbase/regionserver/LocalIndexSplitter.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/hadoop/hbase/regionserver/LocalIndexSplitter.java b/phoenix-core/src/main/java/org/apache/hadoop/hbase/regionserver/LocalIndexSplitter.java
index 1afe6c7..acdb353 100644
--- a/phoenix-core/src/main/java/org/apache/hadoop/hbase/regionserver/LocalIndexSplitter.java
+++ b/phoenix-core/src/main/java/org/apache/hadoop/hbase/regionserver/LocalIndexSplitter.java
@@ -62,31 +62,40 @@ public class LocalIndexSplitter extends BaseRegionObserver {
.getValue(MetaDataUtil.IS_LOCAL_INDEX_TABLE_PROP_BYTES)))) {
HRegion indexRegion = IndexUtil.getIndexRegion(environment);
if (indexRegion == null) return;
- st = new IndexSplitTransaction(indexRegion, splitKey);
- if (!st.prepare()) {
- LOG.error("Prepare for the table " + indexRegion.getTableDesc().getNameAsString()
+ try {
+ st = new IndexSplitTransaction(indexRegion, splitKey);
+ if (!st.prepare()) {
+ LOG.error("Prepare for the table " + indexRegion.getTableDesc().getNameAsString()
+ " failed. So returning null. ");
+ ctx.bypass();
+ return;
+ }
+ indexRegion.forceSplit(splitKey);
+ daughterRegions = st.stepsBeforePONR(rss, rss, false);
+ HRegionInfo copyOfParent = new HRegionInfo(indexRegion.getRegionInfo());
+ copyOfParent.setOffline(true);
+ copyOfParent.setSplit(true);
+ // Put for parent
+ Put putParent = MetaEditor.makePutFromRegionInfo(copyOfParent);
+ MetaEditor.addDaughtersToPut(putParent, daughterRegions.getFirst().getRegionInfo(),
+ daughterRegions.getSecond().getRegionInfo());
+ metaEntries.add(putParent);
+ // Puts for daughters
+ Put putA = MetaEditor.makePutFromRegionInfo(daughterRegions.getFirst().getRegionInfo());
+ Put putB =
+ MetaEditor.makePutFromRegionInfo(daughterRegions.getSecond().getRegionInfo());
+ st.addLocation(putA, rss.getServerName(), 1);
+ st.addLocation(putB, rss.getServerName(), 1);
+ metaEntries.add(putA);
+ metaEntries.add(putB);
+ } catch (Exception e) {
ctx.bypass();
- return;
+ if (st != null){
+ st.rollback(rss, rss);
+ st = null;
+ daughterRegions = null;
+ }
}
- indexRegion.forceSplit(splitKey);
- daughterRegions = st.stepsBeforePONR(rss, rss, false);
- HRegionInfo copyOfParent = new HRegionInfo(indexRegion.getRegionInfo());
- copyOfParent.setOffline(true);
- copyOfParent.setSplit(true);
- // Put for parent
- Put putParent = MetaEditor.makePutFromRegionInfo(copyOfParent);
- MetaEditor.addDaughtersToPut(putParent, daughterRegions.getFirst().getRegionInfo(),
- daughterRegions.getSecond().getRegionInfo());
- metaEntries.add(putParent);
- // Puts for daughters
- Put putA = MetaEditor.makePutFromRegionInfo(daughterRegions.getFirst().getRegionInfo());
- Put putB =
- MetaEditor.makePutFromRegionInfo(daughterRegions.getSecond().getRegionInfo());
- st.addLocation(putA, rss.getServerName(), 1);
- st.addLocation(putB, rss.getServerName(), 1);
- metaEntries.add(putA);
- metaEntries.add(putB);
}
}
@@ -98,4 +107,25 @@ public class LocalIndexSplitter extends BaseRegionObserver {
HRegionServer rs = (HRegionServer) environment.getRegionServerServices();
st.stepsAfterPONR(rs, rs, daughterRegions);
}
+
+ @Override
+ public void preRollBackSplit(ObserverContext<RegionCoprocessorEnvironment> ctx)
+ throws IOException {
+ RegionCoprocessorEnvironment environment = ctx.getEnvironment();
+ HRegionServer rs = (HRegionServer) environment.getRegionServerServices();
+ try {
+ if (st != null) {
+ st.rollback(rs, rs);
+ st = null;
+ daughterRegions = null;
+ }
+ } catch (Exception e) {
+ if (st != null) {
+ LOG.error("Error while rolling back the split failure for index region "
+ + st.getParent(), e);
+ }
+ rs.abort("Abort; we got an error during rollback of index");
+ }
+ }
+
}