[ 
https://issues.apache.org/jira/browse/HADOOP-2338?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12548427
 ] 

Jim Kellerman commented on HADOOP-2338:
---------------------------------------

What happened:

Master is starting up and successfully assigns root and meta regions and 
processes the responses.

As the master is scanning the meta, it is finding stale serverinfo, splitting 
the old logs and assigning regions.

The first open report comes in and is queued up for the main thread. It tries 
to process the request but can't
because the meta region has not been completely scanned. The main thread then 
starts starving the rest of
the master by putting the request back on the queue and taking it off.

Needless to say, this slows down processing of the meta region considerably and 
prevents the master from responding to
heartbeat messages.

The master completes its first scan of the meta table, and starts its second 
pass, enough time has elapsed
that the master thinks that the first server it assigned the region to either 
didn't get the message or died, so
the master assigns the region to another server (the one that can't get a reply 
back to the master for 67 seconds).

The master finally processes the original open response and updates the meta.

A while later, the master assigns the same region again to yet a third server. 
It updates the meta again with the third server's
information.

It is quite understandable that in this chaos, the region would no longer 
appear in the assignAttempts map causing the 
NPE in the master.

Recommendations:

- Do not assign any user regions until all the meta regions have been scanned 
once.
- If we assume that message delivery is reliable, we don't need the 
assignAttempts map because if we don't hear
  back from the server we assign a region to, its lease will expire and we 
could reassign the region at that time.




> [hbase] NPE in master server
> ----------------------------
>
>                 Key: HADOOP-2338
>                 URL: https://issues.apache.org/jira/browse/HADOOP-2338
>             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: master.log.gz
>
>
> Master gets an NPE after receiving multiple responses from the same server 
> telling the master it has opened a region.
> {code}
> 2007-12-02 20:31:37,515 DEBUG hbase.HRegion - Next sequence id for region 
> postlog,img254/577/02suecia024richardburnson0.jpg,1196619667879 is 73377537
> 2007-12-02 20:31:37,517 INFO  hbase.HRegion - region 
> postlog,img254/577/02suecia024richardburnson0.jpg,1196619667879 available
> 2007-12-02 20:31:39,200 WARN  hbase.HRegionServer - Processing message 
> (Retry: 0)
> java.io.IOException: java.io.IOException: java.lang.NullPointerException
>     at org.apache.hadoop.hbase.HMaster.processMsgs(HMaster.java :1484)
>     at org.apache.hadoop.hbase.HMaster.regionServerReport(HMaster.java:1423)
>     at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
>     at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java
>  :25)
>     at java.lang.reflect.Method.invoke(Method.java:597)
>     at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:379)
>     at org.apache.hadoop.ipc.Server$Handler.run(Server.java:596)
>     at sun.reflect.NativeConstructorAccessorImpl.newInstance0 (Native Method)
>     at 
> sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
>     at 
> sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java
>  :27)
>     at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
>     at 
> org.apache.hadoop.hbase.RemoteExceptionHandler.decodeRemoteException(RemoteExceptionHandler.java:82)
>     at org.apache.hadoop.hbase.RemoteExceptionHandler.checkIOException 
> (RemoteExceptionHandler.java:48)
>     at org.apache.hadoop.hbase.HRegionServer.run(HRegionServer.java:759)
>     at java.lang.Thread.run(Thread.java:619)
>       case HMsg.MSG_REPORT_PROCESS_OPEN:
>         synchronized ( this.assignAttempts) {
>           // Region server has acknowledged request to open region.
>           // Extend region open time by 1/2 max region open time.
> **1484**          assignAttempts.put(region.getRegionName (), 
>               Long.valueOf(assignAttempts.get(
>                   region.getRegionName()).longValue() +
>                   (this.maxRegionOpenTime / 2)));
>         }
>         break;
> {code}

-- 
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