You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flume.apache.org by br...@apache.org on 2012/04/10 02:47:23 UTC

svn commit: r1311535 - in /incubator/flume/trunk/flume-ng-core/src: main/java/org/apache/flume/source/AvroSource.java test/java/org/apache/flume/source/TestAvroSource.java

Author: brock
Date: Tue Apr 10 00:47:22 2012
New Revision: 1311535

URL: http://svn.apache.org/viewvc?rev=1311535&view=rev
Log:
FLUME-1011: AvroSource should have a configurable max thread count

(Juhani Connolly via Brock Noland)

Modified:
    incubator/flume/trunk/flume-ng-core/src/main/java/org/apache/flume/source/AvroSource.java
    incubator/flume/trunk/flume-ng-core/src/test/java/org/apache/flume/source/TestAvroSource.java

Modified: incubator/flume/trunk/flume-ng-core/src/main/java/org/apache/flume/source/AvroSource.java
URL: http://svn.apache.org/viewvc/incubator/flume/trunk/flume-ng-core/src/main/java/org/apache/flume/source/AvroSource.java?rev=1311535&r1=1311534&r2=1311535&view=diff
==============================================================================
--- incubator/flume/trunk/flume-ng-core/src/main/java/org/apache/flume/source/AvroSource.java (original)
+++ incubator/flume/trunk/flume-ng-core/src/main/java/org/apache/flume/source/AvroSource.java Tue Apr 10 00:47:22 2012
@@ -24,6 +24,7 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.Executors;
 
 import org.apache.avro.ipc.NettyServer;
 import org.apache.avro.ipc.Responder;
@@ -41,6 +42,7 @@ import org.apache.flume.event.EventBuild
 import org.apache.flume.source.avro.AvroFlumeEvent;
 import org.apache.flume.source.avro.AvroSourceProtocol;
 import org.apache.flume.source.avro.Status;
+import org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -85,6 +87,12 @@ import org.slf4j.LoggerFactory;
  * <td>TCP port / int</td>
  * <td>none (required)</td>
  * </tr>
+ * <tr>
+ * <td><tt>threads</tt></td>
+ * <td>Max number of threads assigned to thread pool, 0 being unlimited</td>
+ * <td>Count / int</td>
+ * <td>0(optional)</td>
+ * </tr>
  * </table>
  * <p>
  * <b>Metrics</b>
@@ -96,6 +104,8 @@ import org.slf4j.LoggerFactory;
 public class AvroSource extends AbstractSource implements EventDrivenSource,
     Configurable, AvroSourceProtocol {
 
+  private static final String THREADS = "threads";
+
   private static final Logger logger = LoggerFactory
       .getLogger(AvroSource.class);
 
@@ -105,6 +115,8 @@ public class AvroSource extends Abstract
   private Server server;
   private CounterGroup counterGroup;
 
+  private int maxThreads;
+
   public AvroSource() {
     counterGroup = new CounterGroup();
   }
@@ -113,6 +125,12 @@ public class AvroSource extends Abstract
   public void configure(Context context) {
     port = Integer.parseInt(context.getString("port"));
     bindAddress = context.getString("bind");
+    try {
+      maxThreads = context.getInteger(THREADS, 0);
+    } catch (NumberFormatException e) {
+      logger.warn("AVRO source\'s \"threads\" property must specify an integer value.",
+              context.getString(THREADS));
+    }
   }
 
   @Override
@@ -120,8 +138,14 @@ public class AvroSource extends Abstract
     logger.info("Avro source starting:{}", this);
 
     Responder responder = new SpecificResponder(AvroSourceProtocol.class, this);
-    server = new NettyServer(responder,
-        new InetSocketAddress(bindAddress, port));
+    if(maxThreads <= 0) {
+      server = new NettyServer(responder,
+              new InetSocketAddress(bindAddress, port));
+    } else {
+      server = new NettyServer(responder, new InetSocketAddress(bindAddress, port),
+              new NioServerSocketChannelFactory(Executors.newFixedThreadPool(maxThreads),
+                      Executors.newFixedThreadPool(maxThreads)));
+    }
 
     server.start();
 

Modified: incubator/flume/trunk/flume-ng-core/src/test/java/org/apache/flume/source/TestAvroSource.java
URL: http://svn.apache.org/viewvc/incubator/flume/trunk/flume-ng-core/src/test/java/org/apache/flume/source/TestAvroSource.java?rev=1311535&r1=1311534&r2=1311535&view=diff
==============================================================================
--- incubator/flume/trunk/flume-ng-core/src/test/java/org/apache/flume/source/TestAvroSource.java (original)
+++ incubator/flume/trunk/flume-ng-core/src/test/java/org/apache/flume/source/TestAvroSource.java Tue Apr 10 00:47:22 2012
@@ -120,6 +120,7 @@ public class TestAvroSource {
 
         context.put("port", String.valueOf(selectedPort = 41414 + i));
         context.put("bind", "0.0.0.0");
+        context.put("threads", "50");
 
         Configurables.configure(source, context);