Jingyun Tian created HBASE-18619: ------------------------------------ Summary: Should we add a postOpenDeployTasks after open splited or merged region? Key: HBASE-18619 URL: https://issues.apache.org/jira/browse/HBASE-18619 Project: HBase Issue Type: Bug Components: Region Assignment Affects Versions: 1.1.11, 1.2.6, 0.98.6, 1.4.0 Reporter: Jingyun Tian Assignee: Jingyun Tian
I have a question that why we skip postOpenDeployTasks() when we not using zk for assignment? {code:java} if (services != null) { try { if (useZKForAssignment) { // add 2nd daughter first (see HBASE-4335) services.postOpenDeployTasks(b); } else if (!services.reportRegionStateTransition(TransitionCode.SPLIT, parent.getRegionInfo(), hri_a, hri_b)) { throw new IOException("Failed to report split region to master: " + parent.getRegionInfo().getShortNameToLog()); } // Should add it to OnlineRegions services.addToOnlineRegions(b); if (useZKForAssignment) { services.postOpenDeployTasks(a); } services.addToOnlineRegions(a); } catch (KeeperException ke) { throw new IOException(ke); } } {code} It causes a new splitted region or new merged region will not compact their reference files. Then if the normalizer thread want to split this region, it will get stuck. {code:java} public boolean canSplit() { this.lock.readLock().lock(); try { // Not split-able if we find a reference store file present in the store. boolean result = !hasReferences(); if (!result && LOG.isDebugEnabled()) { LOG.debug("Cannot split region due to reference files being there"); } return result; } finally { this.lock.readLock().unlock(); } } {code} According to the code, should we add a services.postOpenDeployTasks after successfully _*reportRegionStateTransition(TransitionCode.SPLIT, parent.getRegionInfo(), hri_a, hri_b)*_ -- This message was sent by Atlassian JIRA (v6.4.14#64029)