Author: stack
Date: Fri Jul 24 22:42:43 2009
New Revision: 797682

URL: http://svn.apache.org/viewvc?rev=797682&view=rev
Log:
HBASE-1683 OOME on master splitting logs; stuck, won't go down

Modified:
    hadoop/hbase/branches/0.19/CHANGES.txt
    hadoop/hbase/branches/0.19/src/java/org/apache/hadoop/hbase/HConstants.java
    
hadoop/hbase/branches/0.19/src/java/org/apache/hadoop/hbase/regionserver/HLog.java

Modified: hadoop/hbase/branches/0.19/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/hadoop/hbase/branches/0.19/CHANGES.txt?rev=797682&r1=797681&r2=797682&view=diff
==============================================================================
--- hadoop/hbase/branches/0.19/CHANGES.txt (original)
+++ hadoop/hbase/branches/0.19/CHANGES.txt Fri Jul 24 22:42:43 2009
@@ -28,6 +28,7 @@
                Rather, just let client fail
    HBASE-1651  client is broken, it requests ROOT region location from ZK
                too much
+   HBASE-1683  OOME on master splitting logs; stuck, won't go down
 
 Release 0.19.3 - May 27th, 2009
   BUG FIXES

Modified: 
hadoop/hbase/branches/0.19/src/java/org/apache/hadoop/hbase/HConstants.java
URL: 
http://svn.apache.org/viewvc/hadoop/hbase/branches/0.19/src/java/org/apache/hadoop/hbase/HConstants.java?rev=797682&r1=797681&r2=797682&view=diff
==============================================================================
--- hadoop/hbase/branches/0.19/src/java/org/apache/hadoop/hbase/HConstants.java 
(original)
+++ hadoop/hbase/branches/0.19/src/java/org/apache/hadoop/hbase/HConstants.java 
Fri Jul 24 22:42:43 2009
@@ -120,14 +120,6 @@
   /** Default size of a reservation block   */
   static final int DEFAULT_SIZE_RESERVATION_BLOCK = 1024 * 1024 * 5;
   
-  /** Default number of threads to use when log splitting 
-   *  to rewrite the logs. More means faster but bigger mem consumption */
-  static final int DEFAULT_NUMBER_LOG_WRITER_THREAD = 10;
-  
-  /** Default number of logs to read concurrently
-   *  when log splitting. More means faster but bigger mem consumption  */
-  static final int DEFAULT_NUMBER_CONCURRENT_LOG_READS = 10;
-  
   // Always store the location of the root table's HRegion.
   // This HRegion is never split.
   
@@ -280,4 +272,4 @@
   
   public static final int MODIFY_TABLE_FLUSH = MODIFY_CLOSE_REGION + 1;
   public static final int MODIFY_TABLE_MAJOR_COMPACT = MODIFY_TABLE_FLUSH + 1;
-}
\ No newline at end of file
+}

Modified: 
hadoop/hbase/branches/0.19/src/java/org/apache/hadoop/hbase/regionserver/HLog.java
URL: 
http://svn.apache.org/viewvc/hadoop/hbase/branches/0.19/src/java/org/apache/hadoop/hbase/regionserver/HLog.java?rev=797682&r1=797681&r2=797682&view=diff
==============================================================================
--- 
hadoop/hbase/branches/0.19/src/java/org/apache/hadoop/hbase/regionserver/HLog.java
 (original)
+++ 
hadoop/hbase/branches/0.19/src/java/org/apache/hadoop/hbase/regionserver/HLog.java
 Fri Jul 24 22:42:43 2009
@@ -780,16 +780,26 @@
       final Map<byte [], WriterAndPath> logWriters =
         new TreeMap<byte [], WriterAndPath>(Bytes.BYTES_COMPARATOR);
       List<Path> splits = null;
+
+      // Number of threads to use when log splitting to rewrite the logs.
+      // More means faster but bigger mem consumption.
+      int logWriterThreads =
+        conf.getInt("hbase.regionserver.hlog.splitlog.writer.threads", 3);
+      
+      // Number of logs to read concurrently when log splitting.
+      // More means faster but bigger mem consumption  */
+      int concurrentLogReads =
+        conf.getInt("hbase.regionserver.hlog.splitlog.reader.threads", 3);
+
       try {
         int maxSteps = Double.valueOf(Math.ceil((logfiles.length * 1.0) / 
-            DEFAULT_NUMBER_CONCURRENT_LOG_READS)).intValue();
+            concurrentLogReads)).intValue();
         for(int step = 0; step < maxSteps; step++) {
           final Map<byte[], LinkedList<HLogEntry>> logEntries = 
             new TreeMap<byte[], LinkedList<HLogEntry>>(Bytes.BYTES_COMPARATOR);
           // Stop at logfiles.length when it's the last step
           int endIndex = step == maxSteps - 1 ? logfiles.length : 
-            step*DEFAULT_NUMBER_CONCURRENT_LOG_READS + 
-            DEFAULT_NUMBER_CONCURRENT_LOG_READS;
+            step*concurrentLogReads + concurrentLogReads;
           for (int i = (step * 10); i < endIndex; i++) {
             if (LOG.isDebugEnabled()) {
               LOG.debug("Splitting hlog " + (i + 1) + " of " + logfiles.length 
+
@@ -854,7 +864,7 @@
             }
           }
           ExecutorService threadPool = 
-            Executors.newFixedThreadPool(DEFAULT_NUMBER_LOG_WRITER_THREAD);
+            Executors.newFixedThreadPool(logWriterThreads);
           for (final byte[] key : logEntries.keySet()) {
 
             Thread thread = new Thread(Bytes.toString(key)) {


Reply via email to