You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@accumulo.apache.org by ec...@apache.org on 2012/01/31 15:33:02 UTC
svn commit: r1238615 - in
/incubator/accumulo/branches/1.4/src/server/src/main/java/org/apache/accumulo/server/master:
Master.java state/MergeStats.java
Author: ecn
Date: Tue Jan 31 14:33:01 2012
New Revision: 1238615
URL: http://svn.apache.org/viewvc?rev=1238615&view=rev
Log:
ACCUMULO-356: if the verify fails, the merge would never execute; improved logging for merge state transistions.
Modified:
incubator/accumulo/branches/1.4/src/server/src/main/java/org/apache/accumulo/server/master/Master.java
incubator/accumulo/branches/1.4/src/server/src/main/java/org/apache/accumulo/server/master/state/MergeStats.java
Modified: incubator/accumulo/branches/1.4/src/server/src/main/java/org/apache/accumulo/server/master/Master.java
URL: http://svn.apache.org/viewvc/incubator/accumulo/branches/1.4/src/server/src/main/java/org/apache/accumulo/server/master/Master.java?rev=1238615&r1=1238614&r2=1238615&view=diff
==============================================================================
--- incubator/accumulo/branches/1.4/src/server/src/main/java/org/apache/accumulo/server/master/Master.java (original)
+++ incubator/accumulo/branches/1.4/src/server/src/main/java/org/apache/accumulo/server/master/Master.java Tue Jan 31 14:33:01 2012
@@ -1490,22 +1490,23 @@ public class Master implements LiveTServ
for (MergeStats stats : mergeStatsCache.values()) {
try {
MergeState update = stats.nextMergeState();
- if (update != stats.getMergeInfo().getState()) {
- if (update == MergeState.MERGING) {
- if (stats.verifyMergeConsistency(getConnector(), Master.this)) {
- try {
- if (stats.getMergeInfo().isDelete())
- deleteTablets(stats.getMergeInfo());
- else
- mergeMetadataRecords(stats.getMergeInfo());
- setMergeState(stats.getMergeInfo(), update = MergeState.COMPLETE);
- } catch (Exception ex) {
- log.error("Unable merge metadata table records", ex);
+ if (update == MergeState.MERGING) {
+ if (stats.verifyMergeConsistency(getConnector(), Master.this)) {
+ try {
+ if (stats.getMergeInfo().isDelete()) {
+ deleteTablets(stats.getMergeInfo());
+ } else {
+ mergeMetadataRecords(stats.getMergeInfo());
}
+ setMergeState(stats.getMergeInfo(), update = MergeState.COMPLETE);
+ } catch (Exception ex) {
+ log.error("Unable merge metadata table records", ex);
}
}
- if (update == MergeState.COMPLETE)
- update = MergeState.NONE;
+ }
+ if (update == MergeState.COMPLETE)
+ update = MergeState.NONE;
+ if (update != stats.getMergeInfo().getState()) {
setMergeState(stats.getMergeInfo(), update);
}
} catch (Exception ex) {
Modified: incubator/accumulo/branches/1.4/src/server/src/main/java/org/apache/accumulo/server/master/state/MergeStats.java
URL: http://svn.apache.org/viewvc/incubator/accumulo/branches/1.4/src/server/src/main/java/org/apache/accumulo/server/master/state/MergeStats.java?rev=1238615&r1=1238614&r2=1238615&view=diff
==============================================================================
--- incubator/accumulo/branches/1.4/src/server/src/main/java/org/apache/accumulo/server/master/state/MergeStats.java (original)
+++ incubator/accumulo/branches/1.4/src/server/src/main/java/org/apache/accumulo/server/master/state/MergeStats.java Tue Jan 31 14:33:01 2012
@@ -90,9 +90,14 @@ public class MergeStats {
public MergeState nextMergeState() throws Exception {
MergeState state = info.getState();
+ log.info("Computing next merge state for " + this.info.getRange() + " which is presently " + state);
if (state == MergeState.STARTED) {
state = MergeState.SPLITTING;
}
+ if (total == 0) {
+ log.info("failed to see any tablets for this range, ignoring");
+ return state;
+ }
if (state == MergeState.SPLITTING) {
log.info(hosted + " are hosted, total " + total);
if (!info.isDelete() && total == 1) {
@@ -171,9 +176,11 @@ public class MergeStats {
break;
}
verify.update(tls.extent, tls.getState(master.onlineTabletServers()), tls.chopped);
+ // check that the prevRow matches the previous row
if (pr != null && (tls.extent.getPrevEndRow() == null || !tls.extent.getPrevEndRow().equals(pr)))
return false;
pr = tls.extent.getEndRow();
+ // stop when we've seen the tablet just beyond our range
if (tls.extent.getPrevEndRow() != null && extent.getEndRow() != null && tls.extent.getPrevEndRow().compareTo(extent.getEndRow()) > 0) {
break;
}