[ 
https://issues.apache.org/jira/browse/HBASE-6968?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13482173#comment-13482173
 ] 

liang xie commented on HBASE-6968:
----------------------------------

I look through trunk code, there's no change needed,  so let's set this affects 
issue version on 0.90/0.92/0.94 only, right ?
                
> Several HBase write perf improvement
> ------------------------------------
>
>                 Key: HBASE-6968
>                 URL: https://issues.apache.org/jira/browse/HBASE-6968
>             Project: HBase
>          Issue Type: Improvement
>            Reporter: Liyin Tang
>
> Here are 2 hbase write performance improvements recently:
> 1) Avoid creating HBaseConfiguraiton object for each HLog. Every time when 
> creating a HBaseConfiguraiton object, it would parse the xml configuration 
> files from disk, which is not cheap operation.
> In HLog.java:
> orig:
> {code:title=HLog.java}
>   newWriter = createWriter(fs, newPath, HBaseConfiguration.create(conf));
> {code}
> new:
> {code}
>   newWriter = createWriter(fs, newPath, conf);
> {code}
> 2) Change 2 hotspot synchronized functions into double locking pattern. So it 
> shall remove the synchronization overhead in the normal case.
> orig:
> {code:title=HBaseRpcMetrics.java}
>   public synchronized void inc(String name, int amt) {        
>     MetricsTimeVaryingRate m = get(name);     
>     if (m == null) {  
>       m = create(name);       
>     } 
>     m.inc(amt);       
>   }
> {code}
> new:
> {code}
>   public void inc(String name, int amt) {     
>     MetricsTimeVaryingRate m = get(name);     
>     if (m == null) {  
>       synchronized (this) {   
>         if ((m = get(name)) == null) {        
>           m = create(name);   
>         }     
>       }       
>     } 
>     m.inc(amt);       
>   }
> {code}
> =====================
> orig:
> {code:title=MemStoreFlusher.java}
>   public synchronized void reclaimMemStoreMemory() {  
>     if (this.server.getGlobalMemstoreSize().get() >= globalMemStoreLimit) {   
>       flushSomeRegions();     
>     }
>   }   
> {code}
> new:
> {code}
>   public void reclaimMemStoreMemory() {       
>     if (this.server.getGlobalMemstoreSize().get() >= globalMemStoreLimit) {   
>       flushSomeRegions();     
>     }
>   }   
>   private synchronized void flushSomeRegions() {      
>     if (this.server.getGlobalMemstoreSize().get() < globalMemStoreLimit) {    
>       return; // double check the global memstore size inside of the 
> synchronized block.      
>     } 
>  ...   
>  }
> {code}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to