public boolean needsToBeChopped(KeyExtent otherExtent) { // During a delete, the block after the merge will be stretched to cover the deleted area. // Therefore, it needs to be chopped if (!otherExtent.getTableId().equals(extent.getTableId())) return false; if (isDelete()) return otherExtent.getPrevEndRow() != null && otherExtent.getPrevEndRow().equals(extent.getEndRow()); else return this.extent.overlaps(otherExtent); }
info.getExtent(), state, info.isDelete()); if (state == MergeState.STARTED) { state = MergeState.SPLITTING; if (!info.isDelete() && total == 1) { log.info("Merge range is already contained in a single tablet {}", info.getExtent()); state = MergeState.COMPLETE; } else if (hosted == total) { if (info.isDelete()) { if (!lowerSplit) log.info("Waiting for {} lower split to occur {}", info, info.getExtent());
return; if (!info.isDelete()) return;
if (stats.getMergeInfo().isDelete()) { deleteTablets(stats.getMergeInfo()); } else {
public boolean needsToBeChopped(KeyExtent otherExtent) { // During a delete, the block after the merge will be stretched to cover the deleted area. // Therefore, it needs to be chopped if (!otherExtent.getTableId().equals(extent.getTableId())) return false; if (isDelete()) return otherExtent.getPrevEndRow() != null && otherExtent.getPrevEndRow().equals(extent.getEndRow()); else return this.extent.overlaps(otherExtent); }
public boolean needsToBeChopped(KeyExtent extent) { // During a delete, the block after the merge will be stretched to cover the deleted area. // Therefore, it needs to be chopped if (!extent.getTableId().equals(range.getTableId())) return false; if (isDelete()) return extent.getPrevEndRow() != null && extent.getPrevEndRow().equals(range.getEndRow()); else return this.range.overlaps(extent); }
return state; log.info("Computing next merge state for " + info.getRange() + " which is presently " + state + " isDelete : " + info.isDelete()); if (state == MergeState.STARTED) { state = MergeState.SPLITTING; if (!info.isDelete() && total == 1) { log.info("Merge range is already contained in a single tablet " + info.getRange()); state = MergeState.COMPLETE; } else if (hosted == total) { if (info.isDelete()) { if (!lowerSplit) log.info("Waiting for " + info + " lower split to occur " + info.getRange());
+ " isDelete : " + info.isDelete()); if (state == MergeState.STARTED) { state = MergeState.SPLITTING; if (!info.isDelete() && total == 1) { log.info("Merge range is already contained in a single tablet " + info.getExtent()); state = MergeState.COMPLETE; } else if (hosted == total) { if (info.isDelete()) { if (!lowerSplit) log.info("Waiting for " + info + " lower split to occur " + info.getExtent());
return; if (!info.isDelete()) return;
return; if (!info.isDelete()) return;
private void updateMergeState(Map<Text,MergeStats> mergeStatsCache) { for (MergeStats stats : mergeStatsCache.values()) { try { MergeState update = stats.nextMergeState(getConnector(), Master.this); // when next state is MERGING, its important to persist this before // starting the merge... the verification check that is done before // moving into the merging state could fail if merge starts but does // not finish if (update == MergeState.COMPLETE) update = MergeState.NONE; if (update != stats.getMergeInfo().getState()) { setMergeState(stats.getMergeInfo(), update); } if (update == MergeState.MERGING) { 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); } } } catch (Exception ex) { log.error("Unable to update merge state for merge " + stats.getMergeInfo().getRange(), ex); } } }
if (stats.getMergeInfo().isDelete()) { deleteTablets(stats.getMergeInfo()); } else {