[ https://issues.apache.org/jira/browse/HBASE-18014?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Andrew Purtell updated HBASE-18014: ----------------------------------- Resolution: Fixed Hadoop Flags: Reviewed Fix Version/s: 1.4.0 Status: Resolved (was: Patch Available) > A case of Region remain unassigned when table enabled > ----------------------------------------------------- > > Key: HBASE-18014 > URL: https://issues.apache.org/jira/browse/HBASE-18014 > Project: HBase > Issue Type: Bug > Affects Versions: 1.4.0, 1.1.10 > Reporter: Allan Yang > Assignee: Allan Yang > Fix For: 1.4.0 > > Attachments: HBASE-18014-branch-1.patch, HBASE-18014-branch-1.v2.patch > > > Reproduce procedure: > 1. Create a table, say the regions of this table are opened on RS1 > 2. Disable this table > 3. Abort RS1 and wait for SSH to complete > 4. Wait for a while, RS1 will be deleted from processedServers(a HashMap in > {{RegionState}} to store processed dead servers) > 5. Enable the table, then the region of the table will remain unassigned > until master restarts. > Why? > When assigning regions after the table enabled, AssignmentManager will check > whether those regions are on servers which are dead but not processed, since > RS1 already have deleted from the map of 'processedServers'. Then the > AssignmentManager think this region is on a dead but not processed server. So > it will skip assign, let the region be handled by SSH. > {code:java} > case OFFLINE: > if (useZKForAssignment > && regionStates.isServerDeadAndNotProcessed(sn) > && wasRegionOnDeadServerByMeta(region, sn)) { > if (!regionStates.isRegionInTransition(region)) { > LOG.info("Updating the state to " + State.OFFLINE + " to allow to > be reassigned by SSH"); > regionStates.updateRegionState(region, State.OFFLINE); > } > LOG.info("Skip assigning " + region.getRegionNameAsString() > + ", it is on a dead but not processed yet server: " + sn); > return null; > } > {code} -- This message was sent by Atlassian JIRA (v6.3.15#6346)