This is an automated email from the ASF dual-hosted git repository. ppkarwasz pushed a commit to branch move-http-source-module in repository https://gitbox.apache.org/repos/asf/logging-flume.git
commit 1d0354a5061bf8c6e1646ee9f2bea7f6d9bba8d7 Author: Piotr P. Karwasz <[email protected]> AuthorDate: Wed Jun 10 13:18:53 2026 +0200 Move HTTPSource to its own flume-http-source module Keeping HTTPSource in flume-ng-core forced the heavy Jetty/Gson HTTP stack onto every core consumer. Extract it into a dedicated optional source module under flume-ng-sources, like taildir, so it ships only when needed. The package (org.apache.flume.source.http) is unchanged, so the SourceType.HTTP reflective mapping and existing "http" configs keep working. Core retains Jetty/Gson for its metrics server and HTTPServerConstraintUtil. Assisted-By: Claude Opus 4.8 (1M context) <[email protected]> --- flume-bom/pom.xml | 5 + .../flume/source/TestDefaultSourceFactory.java | 2 - flume-ng-dist/pom.xml | 4 + flume-ng-sources/flume-http-source/pom.xml | 122 +++++++++++++++++++++ .../org/apache/flume/source/http/BLOBHandler.java | 0 .../flume/source/http/HTTPBadRequestException.java | 0 .../org/apache/flume/source/http/HTTPSource.java | 0 .../http/HTTPSourceConfigurationConstants.java | 0 .../flume/source/http/HTTPSourceHandler.java | 0 .../org/apache/flume/source/http/JSONHandler.java | 0 .../http/FlumeHttpServletRequestWrapper.java | 0 .../apache/flume/source/http/TestBLOBHandler.java | 0 .../apache/flume/source/http/TestHTTPSource.java | 0 .../flume/source/http/TestHTTPSourceFactory.java | 33 +++--- .../apache/flume/source/http/TestJSONHandler.java | 0 .../src/test/resources/jettykeystore | Bin flume-ng-sources/pom.xml | 1 + 17 files changed, 148 insertions(+), 19 deletions(-) diff --git a/flume-bom/pom.xml b/flume-bom/pom.xml index ec04c374b..5e1dec6f3 100644 --- a/flume-bom/pom.xml +++ b/flume-bom/pom.xml @@ -187,6 +187,11 @@ <artifactId>flume-scribe-source</artifactId> <version>${flume-scribe.version}</version> </dependency> + <dependency> + <groupId>org.apache.flume.flume-ng-sources</groupId> + <artifactId>flume-http-source</artifactId> + <version>${project.version}</version> + </dependency> <dependency> <groupId>org.apache.flume.flume-ng-sources</groupId> <artifactId>flume-taildir-source</artifactId> diff --git a/flume-ng-core/src/test/java/org/apache/flume/source/TestDefaultSourceFactory.java b/flume-ng-core/src/test/java/org/apache/flume/source/TestDefaultSourceFactory.java index dfd7fd7a7..2947b2c3f 100644 --- a/flume-ng-core/src/test/java/org/apache/flume/source/TestDefaultSourceFactory.java +++ b/flume-ng-core/src/test/java/org/apache/flume/source/TestDefaultSourceFactory.java @@ -18,7 +18,6 @@ package org.apache.flume.source; import org.apache.flume.Source; import org.apache.flume.SourceFactory; -import org.apache.flume.source.http.HTTPSource; import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -68,7 +67,6 @@ public class TestDefaultSourceFactory { verifySourceCreation("multiport_syslogtcp-src", "multiport_syslogtcp", MultiportSyslogTCPSource.class); verifySourceCreation("syslogudp-src", "syslogudp", SyslogUDPSource.class); // verifySourceCreation("spooldir-src", "spooldir", SpoolDirectorySource.class); - verifySourceCreation("http-src", "http", HTTPSource.class); // verifySourceCreation("thrift-src", "thrift", ThriftSource.class); verifySourceCreation("custom-src", MockSource.class.getCanonicalName(), MockSource.class); } diff --git a/flume-ng-dist/pom.xml b/flume-ng-dist/pom.xml index 3804ffc7b..92273e741 100644 --- a/flume-ng-dist/pom.xml +++ b/flume-ng-dist/pom.xml @@ -126,6 +126,10 @@ <groupId>org.apache.flume</groupId> <artifactId>flume-legacy-thrift-source</artifactId> </dependency>--> + <dependency> + <groupId>org.apache.flume.flume-ng-sources</groupId> + <artifactId>flume-http-source</artifactId> + </dependency> <dependency> <groupId>org.apache.flume.flume-ng-sources</groupId> <artifactId>flume-taildir-source</artifactId> diff --git a/flume-ng-sources/flume-http-source/pom.xml b/flume-ng-sources/flume-http-source/pom.xml new file mode 100644 index 000000000..d3a854b2f --- /dev/null +++ b/flume-ng-sources/flume-http-source/pom.xml @@ -0,0 +1,122 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Licensed to the Apache Software Foundation (ASF) under one or more + ~ contributor license agreements. See the NOTICE file distributed with + ~ this work for additional information regarding copyright ownership. + ~ The ASF licenses this file to you under the Apache License, Version 2.0 + ~ (the "License"); you may not use this file except in compliance with + ~ the License. You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + + <modelVersion>4.0.0</modelVersion> + + <parent> + <groupId>org.apache.flume</groupId> + <artifactId>flume-ng-sources</artifactId> + <version>2.0.0-SNAPSHOT</version> + </parent> + + <groupId>org.apache.flume.flume-ng-sources</groupId> + <artifactId>flume-http-source</artifactId> + <name>Flume HTTP Source</name> + + <properties> + <!-- TODO fix spotbugs/pmd violations --> + <spotbugs.maxAllowedViolations>10</spotbugs.maxAllowedViolations> + <pmd.maxAllowedViolations>2</pmd.maxAllowedViolations> + <module.name>org.apache.flume.source.http</module.name> + </properties> + + <dependencies> + <dependency> + <groupId>org.apache.flume</groupId> + <artifactId>flume-ng-sdk</artifactId> + </dependency> + <dependency> + <groupId>org.apache.flume</groupId> + <artifactId>flume-ng-sdk</artifactId> + <classifier>tests</classifier> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.apache.flume</groupId> + <artifactId>flume-ng-core</artifactId> + </dependency> + + <dependency> + <groupId>com.google.guava</groupId> + <artifactId>guava</artifactId> + </dependency> + + <dependency> + <groupId>com.google.code.gson</groupId> + <artifactId>gson</artifactId> + </dependency> + + <dependency> + <groupId>commons-io</groupId> + <artifactId>commons-io</artifactId> + </dependency> + + <dependency> + <groupId>org.eclipse.jetty</groupId> + <artifactId>jetty-servlet</artifactId> + </dependency> + + <dependency> + <groupId>org.eclipse.jetty</groupId> + <artifactId>jetty-util</artifactId> + </dependency> + + <dependency> + <groupId>org.eclipse.jetty</groupId> + <artifactId>jetty-server</artifactId> + </dependency> + + <dependency> + <groupId>org.eclipse.jetty</groupId> + <artifactId>jetty-jmx</artifactId> + </dependency> + + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.mockito</groupId> + <artifactId>mockito-core</artifactId> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.easytesting</groupId> + <artifactId>fest-reflect</artifactId> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.apache.httpcomponents</groupId> + <artifactId>httpclient</artifactId> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.apache.httpcomponents</groupId> + <artifactId>httpcore</artifactId> + <scope>test</scope> + </dependency> + + </dependencies> + +</project> diff --git a/flume-ng-core/src/main/java/org/apache/flume/source/http/BLOBHandler.java b/flume-ng-sources/flume-http-source/src/main/java/org/apache/flume/source/http/BLOBHandler.java similarity index 100% rename from flume-ng-core/src/main/java/org/apache/flume/source/http/BLOBHandler.java rename to flume-ng-sources/flume-http-source/src/main/java/org/apache/flume/source/http/BLOBHandler.java diff --git a/flume-ng-core/src/main/java/org/apache/flume/source/http/HTTPBadRequestException.java b/flume-ng-sources/flume-http-source/src/main/java/org/apache/flume/source/http/HTTPBadRequestException.java similarity index 100% copy from flume-ng-core/src/main/java/org/apache/flume/source/http/HTTPBadRequestException.java copy to flume-ng-sources/flume-http-source/src/main/java/org/apache/flume/source/http/HTTPBadRequestException.java diff --git a/flume-ng-core/src/main/java/org/apache/flume/source/http/HTTPSource.java b/flume-ng-sources/flume-http-source/src/main/java/org/apache/flume/source/http/HTTPSource.java similarity index 100% rename from flume-ng-core/src/main/java/org/apache/flume/source/http/HTTPSource.java rename to flume-ng-sources/flume-http-source/src/main/java/org/apache/flume/source/http/HTTPSource.java diff --git a/flume-ng-core/src/main/java/org/apache/flume/source/http/HTTPSourceConfigurationConstants.java b/flume-ng-sources/flume-http-source/src/main/java/org/apache/flume/source/http/HTTPSourceConfigurationConstants.java similarity index 100% rename from flume-ng-core/src/main/java/org/apache/flume/source/http/HTTPSourceConfigurationConstants.java rename to flume-ng-sources/flume-http-source/src/main/java/org/apache/flume/source/http/HTTPSourceConfigurationConstants.java diff --git a/flume-ng-core/src/main/java/org/apache/flume/source/http/HTTPSourceHandler.java b/flume-ng-sources/flume-http-source/src/main/java/org/apache/flume/source/http/HTTPSourceHandler.java similarity index 100% rename from flume-ng-core/src/main/java/org/apache/flume/source/http/HTTPSourceHandler.java rename to flume-ng-sources/flume-http-source/src/main/java/org/apache/flume/source/http/HTTPSourceHandler.java diff --git a/flume-ng-core/src/main/java/org/apache/flume/source/http/JSONHandler.java b/flume-ng-sources/flume-http-source/src/main/java/org/apache/flume/source/http/JSONHandler.java similarity index 100% rename from flume-ng-core/src/main/java/org/apache/flume/source/http/JSONHandler.java rename to flume-ng-sources/flume-http-source/src/main/java/org/apache/flume/source/http/JSONHandler.java diff --git a/flume-ng-core/src/test/java/org/apache/flume/source/http/FlumeHttpServletRequestWrapper.java b/flume-ng-sources/flume-http-source/src/test/java/org/apache/flume/source/http/FlumeHttpServletRequestWrapper.java similarity index 100% rename from flume-ng-core/src/test/java/org/apache/flume/source/http/FlumeHttpServletRequestWrapper.java rename to flume-ng-sources/flume-http-source/src/test/java/org/apache/flume/source/http/FlumeHttpServletRequestWrapper.java diff --git a/flume-ng-core/src/test/java/org/apache/flume/source/http/TestBLOBHandler.java b/flume-ng-sources/flume-http-source/src/test/java/org/apache/flume/source/http/TestBLOBHandler.java similarity index 100% rename from flume-ng-core/src/test/java/org/apache/flume/source/http/TestBLOBHandler.java rename to flume-ng-sources/flume-http-source/src/test/java/org/apache/flume/source/http/TestBLOBHandler.java diff --git a/flume-ng-core/src/test/java/org/apache/flume/source/http/TestHTTPSource.java b/flume-ng-sources/flume-http-source/src/test/java/org/apache/flume/source/http/TestHTTPSource.java similarity index 100% rename from flume-ng-core/src/test/java/org/apache/flume/source/http/TestHTTPSource.java rename to flume-ng-sources/flume-http-source/src/test/java/org/apache/flume/source/http/TestHTTPSource.java diff --git a/flume-ng-core/src/main/java/org/apache/flume/source/http/HTTPBadRequestException.java b/flume-ng-sources/flume-http-source/src/test/java/org/apache/flume/source/http/TestHTTPSourceFactory.java similarity index 59% rename from flume-ng-core/src/main/java/org/apache/flume/source/http/HTTPBadRequestException.java rename to flume-ng-sources/flume-http-source/src/test/java/org/apache/flume/source/http/TestHTTPSourceFactory.java index 61983382e..519c36382 100644 --- a/flume-ng-core/src/main/java/org/apache/flume/source/http/HTTPBadRequestException.java +++ b/flume-ng-sources/flume-http-source/src/test/java/org/apache/flume/source/http/TestHTTPSourceFactory.java @@ -16,27 +16,26 @@ */ package org.apache.flume.source.http; -import org.apache.flume.FlumeException; +import org.apache.flume.Source; +import org.apache.flume.SourceFactory; +import org.apache.flume.source.DefaultSourceFactory; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; -/** - * - * Exception thrown by an HTTP Handler if the request was not parsed correctly - * into an event because the request was not in the expected format. - * - */ -public class HTTPBadRequestException extends FlumeException { +public class TestHTTPSourceFactory { - private static final long serialVersionUID = -3540764742069390951L; - - public HTTPBadRequestException(String msg) { - super(msg); - } + private SourceFactory sourceFactory; - public HTTPBadRequestException(String msg, Throwable th) { - super(msg, th); + @Before + public void setUp() { + sourceFactory = new DefaultSourceFactory(); } - public HTTPBadRequestException(Throwable th) { - super(th); + @Test + public void testHttpSourceCreation() throws Exception { + Source src = sourceFactory.create("http-src", "http"); + Assert.assertNotNull(src); + Assert.assertTrue(src instanceof HTTPSource); } } diff --git a/flume-ng-core/src/test/java/org/apache/flume/source/http/TestJSONHandler.java b/flume-ng-sources/flume-http-source/src/test/java/org/apache/flume/source/http/TestJSONHandler.java similarity index 100% rename from flume-ng-core/src/test/java/org/apache/flume/source/http/TestJSONHandler.java rename to flume-ng-sources/flume-http-source/src/test/java/org/apache/flume/source/http/TestJSONHandler.java diff --git a/flume-ng-core/src/test/resources/jettykeystore b/flume-ng-sources/flume-http-source/src/test/resources/jettykeystore similarity index 100% rename from flume-ng-core/src/test/resources/jettykeystore rename to flume-ng-sources/flume-http-source/src/test/resources/jettykeystore diff --git a/flume-ng-sources/pom.xml b/flume-ng-sources/pom.xml index 7c8b56222..683ea2a53 100644 --- a/flume-ng-sources/pom.xml +++ b/flume-ng-sources/pom.xml @@ -32,6 +32,7 @@ <name>Flume Sources</name> <modules> + <module>flume-http-source</module> <module>flume-taildir-source</module> </modules>
