[ 
https://issues.apache.org/jira/browse/HADOOP-2079?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Jim Kellerman updated HADOOP-2079:
----------------------------------

    Attachment: patch.txt

This patch addresses both HADOOP-2079 and HADOOP-2056

Changes:

Because row keys are essentially unbounded in length and can potentially file 
name unfriendly characters, the start key is now SHA1 encoded and inserted into 
the file name as a long decimal number. This is better than using Base64 
encoding of the row key because the Base64 encoding is longer than the row key 
and can consequently cause the file name to be too long. This approach assures 
that file names will be unique and still be short enough for modern file 
systems. HRegionInfo now supports this encoding method and since SHA1 encoding 
is not reversable, the decode method has been removed.

HStore uses both the raw region name and the encoded region name.

Use new static method HRegionInfo.encodeRegionName: HLog, HMaster, HRegion

HMaster avoids race conditions on log splitting by only doing them in 
PendingServerShutdown if the server's lease expires while the master is 
running. If the master is just starting up, then the root and meta scanners 
invoke log splitting if they find stale server data.

HStoreFile now uses ArrayList and List instead of Vector and Collection



> [hbase] HLog generates incorrect file name when splitting a log, race  
> condition also contributes
> -------------------------------------------------------------------------------------------------
>
>                 Key: HADOOP-2079
>                 URL: https://issues.apache.org/jira/browse/HADOOP-2079
>             Project: Hadoop
>          Issue Type: Bug
>          Components: contrib/hbase
>    Affects Versions: 0.16.0
>            Reporter: Jim Kellerman
>            Assignee: Jim Kellerman
>             Fix For: 0.16.0
>
>         Attachments: patch.txt
>
>
> In Hadoop-Nightly #277 TestRegionServerExit failed with a timeout.
> The reason for this was a race in the Master in which checkAssigned (run from 
> either the root or meta scanner)  will immediately try to split the log and 
> then assign a region which has invalid server info.
> The scenario went something like this:
> 1. region server aborted
> 2. root region was written on optional cache flush
> lease timed out on aborted server which removes it from serversToServerInfo 
> and queues a PendingServerShutdown operation
> 3. root scanner runs and finds server info incorrect (it is in the root 
> region but the server is not in serversToServerInfo
> 4. checkAssigned starts splitting the log but because the log name is 
> incorrect it can't finish
> 5. PendingServerShutdown fires and really gums up the works.
> So there are two problems:
> 1. HLog.splitLog needs to generate the correct log file name.
> 2. PendingServerShutdown and/or leaseExpired need to cooperate with 
> checkAssigned so that there are not two concurrent attempts to recover the 
> log.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to