This is an automated email from the ASF dual-hosted git repository.
ppkarwasz pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/logging-flume.git
The following commit(s) were added to refs/heads/trunk by this push:
new 0a82f29a0 Move HTTPSource to its own flume-http-source module (#444)
0a82f29a0 is described below
commit 0a82f29a0c1d8628f9593de28d4e959aaa1f5119
Author: Piotr P. Karwasz <[email protected]>
AuthorDate: Thu Jun 11 11:30:07 2026 +0200
Move HTTPSource to its own flume-http-source module (#444)
* 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]>
* Make flume-http-source self-contained for HTTP constraints
HTTPSource was reaching into flume-ng-core for HTTPServerConstraintUtil.
Move that helper into the module next to its only caller and make it
package-private, so the HTTP source no longer depends on a core internal
for its Jetty constraint handling. Declare jetty-security directly here
(managed in flume-parent) since the helper uses it.
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 | 127 +++++++++++++++++++++
.../org/apache/flume/source/http/BLOBHandler.java | 0
.../flume/source/http/HTTPBadRequestException.java | 0
.../source/http}/HTTPServerConstraintUtil.java | 6 +-
.../org/apache/flume/source/http/HTTPSource.java | 1 -
.../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 +
flume-parent/pom.xml | 6 +
19 files changed, 162 insertions(+), 23 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..75df4f28f
--- /dev/null
+++ b/flume-ng-sources/flume-http-source/pom.xml
@@ -0,0 +1,127 @@
+<?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-security</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/tools/HTTPServerConstraintUtil.java
b/flume-ng-sources/flume-http-source/src/main/java/org/apache/flume/source/http/HTTPServerConstraintUtil.java
similarity index 92%
rename from
flume-ng-core/src/main/java/org/apache/flume/tools/HTTPServerConstraintUtil.java
rename to
flume-ng-sources/flume-http-source/src/main/java/org/apache/flume/source/http/HTTPServerConstraintUtil.java
index 8dfef6a54..cf1a3932d 100644
---
a/flume-ng-core/src/main/java/org/apache/flume/tools/HTTPServerConstraintUtil.java
+++
b/flume-ng-sources/flume-http-source/src/main/java/org/apache/flume/source/http/HTTPServerConstraintUtil.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.flume.tools;
+package org.apache.flume.source.http;
import org.eclipse.jetty.security.ConstraintMapping;
import org.eclipse.jetty.security.ConstraintSecurityHandler;
@@ -25,7 +25,7 @@ import org.eclipse.jetty.util.security.Constraint;
/**
* Utility class to define constraints on Jetty HTTP servers
*/
-public class HTTPServerConstraintUtil {
+class HTTPServerConstraintUtil {
private HTTPServerConstraintUtil() {}
@@ -33,7 +33,7 @@ public class HTTPServerConstraintUtil {
* Generate constraints for the Flume HTTP Source
* @return ConstraintSecurityHandler for use with Jetty servlet
*/
- public static ConstraintSecurityHandler enforceConstraints() {
+ static ConstraintSecurityHandler enforceConstraints() {
Constraint c = new Constraint();
c.setAuthenticate(true);
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 99%
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
index 52c29ca9e..567e0631c 100644
--- 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
@@ -34,7 +34,6 @@ import org.apache.flume.exception.ChannelException;
import org.apache.flume.instrumentation.SourceCounter;
import org.apache.flume.source.SslContextAwareAbstractSource;
import org.apache.flume.tools.FlumeBeanConfigurator;
-import org.apache.flume.tools.HTTPServerConstraintUtil;
import org.eclipse.jetty.http.HttpVersion;
import org.eclipse.jetty.jmx.MBeanContainer;
import org.eclipse.jetty.server.HttpConfiguration;
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>
diff --git a/flume-parent/pom.xml b/flume-parent/pom.xml
index 90fcb68e0..9035c0352 100644
--- a/flume-parent/pom.xml
+++ b/flume-parent/pom.xml
@@ -414,6 +414,12 @@
<version>${jetty.version}</version>
</dependency>
+ <dependency>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-security</artifactId>
+ <version>${jetty.version}</version>
+ </dependency>
+
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-util</artifactId>