This is an automated email from the ASF dual-hosted git repository.
rgoers pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/logging-flume-rpc.git
The following commit(s) were added to refs/heads/main by this push:
new b083355 Bootstrap build and release infrastructure (#5)
b083355 is described below
commit b083355fd0ee38d95afd1bd8009d01ed5fd13ec3
Author: Piotr P. Karwasz <[email protected]>
AuthorDate: Wed Sep 9 17:48:37 2026 +0200
Bootstrap build and release infrastructure (#5)
* Simplify POM files
Use `${revision}` for the project version, add the `<scm>` block and remove
from the POM files everything that `flume-parent` or `logging-parent`
already provides: the Surefire, compiler, RAT and `test-jar` plugin
configuration, the redundant properties (four of which were undefined) and
the
`netty-all` version. RAT excludes move to `.rat-excludes`, which
`flume-parent` picks up.
- `flume-ng-sdk` with the `tests` classifier has no managed version in
Flume 2.x; the tests only use `Whitebox`, so the dependency becomes
`flume-ng-sdk-test`.
- `flume-rpc-thrift` overrode `thrift.version` to 0.14.2, hiding the root's
0.23.0. The override is gone and the root is pinned to 0.14.2, since the
checked-in generated sources do not compile against newer `libthrift`.
- `netty-all` moves from the locally pinned 4.2.4.Final to the 4.2.16.Final
managed by `flume-third-party-dependencies`; the Netty modules pulled in
by
`avro-ipc-netty` are excluded, as `flume-rpc-avro` depends on `netty-all`.
- `.mvn/jvm.config` provides the `--add-exports` flags Error Prone needs.
- The temporary `use-apache-snapshots` profile, activated through
`.mvn/maven.config`, resolves the unreleased parent.
Assisted-By: Claude Fable 5.1 <[email protected]>
Claude-Session: https://claude.ai/code/session_01F9NiqMnCccUGDtqt64uKe6
* Expand wildcard imports
The `logging-parent` enforcer rules ban wildcard imports. The two Thrift
generated classes are edited in place; regenerating them with the
`compileThrift` profile will reintroduce the wildcard import.
Assisted-By: Claude Fable 5.1 <[email protected]>
Claude-Session: https://claude.ai/code/session_01F9NiqMnCccUGDtqt64uKe6
* Adapt tests to `flume-ng-sdk-test` and Error Prone
`Whitebox` now lives in `org.apache.flume.sdk.test`. The `setUp` helper of
`TestAvroSink` is called explicitly by each test, so it is renamed rather
than annotated with `@Before`, which Error Prone would otherwise require.
Assisted-By: Claude Fable 5.1 <[email protected]>
Claude-Session: https://claude.ai/code/session_01F9NiqMnCccUGDtqt64uKe6
* Add `.gitignore`, `.gitattributes`, `LICENSE.txt`, `NOTICE.txt` and
`README.md`
Assisted-By: Claude Fable 5.1 <[email protected]>
Claude-Session: https://claude.ai/code/session_01F9NiqMnCccUGDtqt64uKe6
* Add GitHub Actions workflows from `logging-flume`
Port the `build`, CodeQL and Dependabot workflows and the Dependabot
configuration from the main Flume repository, adapted to this repository:
`main` default branch, no Maven site, Java only and `flume-rpc` as the
distribution identifier.
Fix the required status check name in `.asf.yaml`: the reusable build
workflow reports it as `build / build (ubuntu-latest)`. Until that change is
on `main`, a temporary job named `build (ubuntu-latest)` satisfies the
ruleset currently in force.
Assisted-By: Claude Fable 5.1 <[email protected]>
Claude-Session: https://claude.ai/code/session_01F9NiqMnCccUGDtqt64uKe6
* Generate release notes with `log4j-changelog`
Assisted-By: Claude Fable 5.1 <[email protected]>
Claude-Session: https://claude.ai/code/session_01F9NiqMnCccUGDtqt64uKe6
* Tighten the SpotBugs and PMD violation limits to the current counts
Assisted-By: Claude Fable 5.1 <[email protected]>
Claude-Session: https://claude.ai/code/session_01F9NiqMnCccUGDtqt64uKe6
---
.asf.yaml | 2 +-
.gitattributes | 23 ++
.github/dependabot.yaml | 68 ++++++
.github/workflows/analyze-dependabot.yaml | 37 ++++
.github/workflows/build.yaml | 97 ++++++++
.github/workflows/build.yml | 71 ------
.github/workflows/codeql-analysis.yml | 20 +-
.github/workflows/process-dependabot.yaml | 48 ++++
.gitignore | 69 ++++--
.mvn/jvm.config | 11 +
.mvn/maven.config | 1 +
.rat-excludes | 5 +
LICENSE.txt | 245 +++++++++++++++++++++
NOTICE.txt | 5 +
README.md | 51 +++++
flume-embedded-agent/pom.xml | 3 +-
.../embedded/TestEmbeddedAgentEmbeddedSource.java | 6 +-
flume-rpc-avro/pom.xml | 80 +------
.../rpc/avro/source/SpoolDirectorySource.java | 40 +++-
.../serialization/TestSpoolingFileLineReader.java | 5 +-
.../apache/flume/rpc/avro/sink/TestAvroSink.java | 40 ++--
flume-rpc-thrift/pom.xml | 88 +-------
.../apache/flume/rpc/thrift/ThriftFlumeEvent.java | 1 -
.../flume/rpc/thrift/ThriftSourceProtocol.java | 2 +-
.../flume/rpc/thrift/ThriftTestingSource.java | 2 +-
pom.xml | 106 +++++----
src/changelog/.2.x.x/.release-notes.adoc.ftl | 25 +++
src/changelog/.2.x.x/add_rpc_modules.xml | 8 +
src/changelog/.changelog.adoc.ftl | 27 +++
src/changelog/.index.adoc.ftl | 42 ++++
30 files changed, 900 insertions(+), 328 deletions(-)
diff --git a/.asf.yaml b/.asf.yaml
index 7a2c143..4a6f577 100644
--- a/.asf.yaml
+++ b/.asf.yaml
@@ -71,7 +71,7 @@ github:
required_status_checks:
# The GitHub Actions app
- app_slug: github-actions
- name: "build (ubuntu-latest)"
+ name: "build / build (ubuntu-latest)"
# The GitHub Advanced Security app
- app_slug: github-advanced-security
name: "CodeQL"
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..eaa5806
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,23 @@
+# 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.
+
+# All text files with LF line endings
+* text=auto eol=lf
+# PS1 files are Windows specific
+*.ps1 eol=crlf
+# Maven Wrapper cmd script
+/mvnw.cmd eol=crlf
+# Maven Wrapper need LF line endings
+/.mvn/wrapper/maven-wrapper.properties eol=lf
diff --git a/.github/dependabot.yaml b/.github/dependabot.yaml
new file mode 100644
index 0000000..b0b1164
--- /dev/null
+++ b/.github/dependabot.yaml
@@ -0,0 +1,68 @@
+#
+# 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.
+#
+
+#
+# ██ ██ █████ ██████ ███ ██ ██ ███ ██ ██████ ██
+# ██ ██ ██ ██ ██ ██ ████ ██ ██ ████ ██ ██ ██
+# ██ █ ██ ███████ ██████ ██ ██ ██ ██ ██ ██ ██ ██ ███ ██
+# ██ ███ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
+# ███ ███ ██ ██ ██ ██ ██ ████ ██ ██ ████ ██████ ██
+#
+# `dependabot.yaml` must be stored in the `.github` directory of the default
branch[1].
+#
+# 1. Make all your changes to this file!
+# Don't create another `dependabot.yaml` – it will simply be discarded.
+#
+# 2. Always associate your entries to a branch!
+# For instance, use `target-branch` in `updates` entries
+#
+# [1]
https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
+#
+
+version: 2
+
+# Fix the Maven Central to the ASF repository to work around:
https://github.com/dependabot/dependabot-core/issues/8329
+registries:
+ maven-central:
+ type: maven-repository
+ url: https://repo.maven.apache.org/maven2
+
+updates:
+
+ - package-ecosystem: maven
+ directory: "/"
+ schedule:
+ interval: "monthly"
+ cooldown:
+ default-days: 7
+ groups:
+ # Groups all non-major updates in a single PR.
+ # No group matches major updates, so each one gets a separate PR.
+ maven-minor-updates:
+ update-types: [ "minor", "patch" ]
+ target-branch: "main"
+ registries:
+ - maven-central
+
+ - package-ecosystem: github-actions
+ directory: "/"
+ schedule:
+ interval: "monthly"
+ groups:
+ github-actions-updates:
+ patterns: [ "*" ]
+ target-branch: "main"
diff --git a/.github/workflows/analyze-dependabot.yaml
b/.github/workflows/analyze-dependabot.yaml
new file mode 100644
index 0000000..be94bce
--- /dev/null
+++ b/.github/workflows/analyze-dependabot.yaml
@@ -0,0 +1,37 @@
+#
+# 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.
+#
+
+name: "Dependabot Analyze PR"
+
+on:
+ pull_request:
+
+# Default permissions for each job.
+# Additional permissions should be assigned on a per-job basis.
+permissions: { }
+
+jobs:
+
+ analyze-dependabot:
+ # `github.actor` prevents recursive calls when `github-actions[bot]`
pushes to the PR;
+ # `github.event.pull_request.user.login` skips PRs not opened by
Dependabot.
+ if: ${{
+ github.repository == 'apache/logging-flume-rpc'
+ && github.actor == 'dependabot[bot]'
+ && github.event.pull_request.user.login == 'dependabot[bot]'
+ }}
+ uses:
apache/logging-parent/.github/workflows/analyze-dependabot-reusable.yaml@gha/v0
diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml
new file mode 100644
index 0000000..8e8f492
--- /dev/null
+++ b/.github/workflows/build.yaml
@@ -0,0 +1,97 @@
+#
+# 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.
+#
+
+name: build
+
+on:
+ push:
+ branches:
+ - "main"
+ - "release/*"
+ pull_request:
+
+# Disable all permissions by defaults:
+# Permissions are enabled on a per-job basis.
+permissions: { }
+
+concurrency:
+ # One group per PR, or per ref for branch pushes.
+ group: ${{ github.workflow }}-${{ github.event.pull_request.number ||
github.ref }}
+ # Cancel in-progress runs for PRs only, so release branch builds always
complete.
+ cancel-in-progress: ${{ github.event_name == 'pull_request' }}
+
+jobs:
+
+ build:
+ uses: apache/logging-parent/.github/workflows/build-reusable.yaml@gha/v0
+ with:
+ java-version: 17
+
+ # TODO: remove once the `.asf.yaml` ruleset on `main` requires `build /
build (ubuntu-latest)`.
+ # The ruleset currently in force requires a check named `build
(ubuntu-latest)`, which the
+ # reusable workflow cannot produce, so this job carries that name until the
fix is merged.
+ build-legacy-check:
+ name: build (ubuntu-latest)
+ runs-on: ubuntu-latest
+ steps:
+ - run: echo OK
+
+ deploy-snapshot:
+ needs: build
+ if: github.repository == 'apache/logging-flume-rpc' && github.ref_name ==
'main'
+ uses:
apache/logging-parent/.github/workflows/deploy-snapshot-reusable.yaml@gha/v0
+ # Secrets for deployments
+ secrets:
+ NEXUS_USERNAME: ${{ secrets.LOGGING_STAGE_DEPLOYER_USER }}
+ NEXUS_PASSWORD: ${{ secrets.LOGGING_STAGE_DEPLOYER_PW }}
+ with:
+ java-version: 17
+
+ deploy-release:
+ needs: build
+ if: github.repository == 'apache/logging-flume-rpc' &&
startsWith(github.ref_name, 'release/')
+ uses:
apache/logging-parent/.github/workflows/deploy-release-reusable.yaml@gha/v0
+ # Secrets for deployments
+ secrets:
+ GPG_SECRET_KEY: ${{ secrets.LOGGING_GPG_SECRET_KEY }}
+ NEXUS_USERNAME: ${{ secrets.LOGGING_STAGE_DEPLOYER_USER }}
+ NEXUS_PASSWORD: ${{ secrets.LOGGING_STAGE_DEPLOYER_PW }}
+ SVN_USERNAME: ${{ secrets.LOGGING_SVN_DEV_USERNAME }}
+ SVN_PASSWORD: ${{ secrets.LOGGING_SVN_DEV_PASSWORD }}
+ # Write permissions to allow the Maven `revision` property update,
changelog release, etc.
+ permissions:
+ contents: write
+ with:
+ java-version: 17
+ project-id: flume-rpc
+
+ verify-reproducibility-snapshot:
+ needs: deploy-snapshot
+ uses:
apache/logging-parent/.github/workflows/verify-reproducibility-reusable.yaml@gha/v0
+ with:
+ java-version: 17
+ # Compare against the repository `deploy-snapshot` uploaded as a run
artifact, so that
+ # the check does not depend on the snapshot having propagated to the
Nexus group repository.
+ reference-artifact-name: ${{
needs.deploy-snapshot.outputs.repository-artifact-name }}
+
+ verify-reproducibility-release:
+ needs: deploy-release
+ uses:
apache/logging-parent/.github/workflows/verify-reproducibility-reusable.yaml@gha/v0
+ with:
+ java-version: 17
+ # `deploy-release` publishes no run artifact, so the staging repository
is the reference.
+ nexus-url: ${{ needs.deploy-release.outputs.nexus-url }}
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
deleted file mode 100644
index 2df41f8..0000000
--- a/.github/workflows/build.yml
+++ /dev/null
@@ -1,71 +0,0 @@
-#
-# 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.
-#
-
-name: build
-
-on:
- push:
- branches:
- - trunk
- - build-dev
- pull_request:
-
-# Remove all permissions by default. They will be added at a job level.
-permissions: {}
-
-jobs:
- build:
-
- runs-on: ${{ matrix.os }}
- name: build (${{ matrix.os }})
-
- strategy:
- # Don't cancel the remaining OS builds when one fails
- fail-fast: false
- matrix:
- os: [ ubuntu-latest, windows-latest ]
- java-distribution: [ temurin ]
- #
- # There is no protobuf 2.x version for `aarch64`.
- # Reenable the macOS build after the dependency has been upgraded.
- #
- #include:
- # # There is no Temurin JDK 8 for ARM
- # - os: macos-latest
- # java-distribution: zulu
-
- steps:
-
- - name: Checkout repository
- uses: actions/checkout@v6
-
- # JDK 8 is needed for the build, and it is the primary bytecode target.
- - name: Setup JDK 17
- uses: actions/setup-java@v5
- with:
- distribution: ${{ matrix.java-distribution }}
- java-version: 17
- cache: maven
-
- - name: Build with Maven
- timeout-minutes: 120
- shell: bash
- run: |
- ./mvnw clean verify -DredirectTestOutput=true \
- --show-version --batch-mode --errors --no-transfer-progress \
- -DtrimStackTrace=false \
- -Dsurefire.rerunFailingTestsCount=2
diff --git a/.github/workflows/codeql-analysis.yml
b/.github/workflows/codeql-analysis.yml
index b6eb02c..60a80d2 100644
--- a/.github/workflows/codeql-analysis.yml
+++ b/.github/workflows/codeql-analysis.yml
@@ -18,16 +18,22 @@ name: "CodeQL"
on:
push:
- branches: [ trunk ]
+ branches: [ main ]
pull_request:
# The branches below must be a subset of the branches above
- branches: [ trunk ]
+ branches: [ main ]
schedule:
- cron: '15 0 * * 5'
# Remove all permissions by default. They will be added at a job level.
permissions: {}
+concurrency:
+ # One group per PR, or per ref for branch pushes.
+ group: ${{ github.workflow }}-${{ github.event.pull_request.number ||
github.ref }}
+ # Cancel in-progress runs for PRs only, so release branch builds always
complete.
+ cancel-in-progress: ${{ github.event_name == 'pull_request' }}
+
jobs:
analyze:
name: Analyze
@@ -40,17 +46,17 @@ jobs:
strategy:
fail-fast: false
matrix:
- language: [ 'java', 'python' ]
+ language: [ 'java' ]
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript',
'python', 'ruby' ]
# Learn more about CodeQL language support at
https://git.io/codeql-language-support
steps:
- name: Checkout repository
- uses: actions/checkout@v2
+ uses: actions/checkout@v7
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
- uses: github/codeql-action/init@959cbb7472c4d4ad70cdfe6f4976053fe48ab394
# 2.1.37
+ uses: github/codeql-action/init@cdf488f595d80d6e07e03d4674febd5ab45fa938
# 4.37.9
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a
config file.
@@ -61,7 +67,7 @@ jobs:
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually
(see below)
- name: Autobuild
- uses:
github/codeql-action/autobuild@959cbb7472c4d4ad70cdfe6f4976053fe48ab394 #
2.1.37
+ uses:
github/codeql-action/autobuild@cdf488f595d80d6e07e03d4674febd5ab45fa938 #
4.37.9
# ℹ️ Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
@@ -75,4 +81,4 @@ jobs:
# make release
- name: Perform CodeQL Analysis
- uses:
github/codeql-action/analyze@959cbb7472c4d4ad70cdfe6f4976053fe48ab394 #
2.1.37
+ uses:
github/codeql-action/analyze@cdf488f595d80d6e07e03d4674febd5ab45fa938 #
4.37.9
diff --git a/.github/workflows/process-dependabot.yaml
b/.github/workflows/process-dependabot.yaml
new file mode 100644
index 0000000..2079ac3
--- /dev/null
+++ b/.github/workflows/process-dependabot.yaml
@@ -0,0 +1,48 @@
+#
+# 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.
+#
+
+name: "Dependabot Process PR"
+
+on:
+ workflow_run:
+ workflows:
+ - "Dependabot Analyze PR"
+ types:
+ - completed
+
+# Default permissions for each job.
+# Additional permissions should be assigned on a per-job basis.
+permissions: { }
+
+jobs:
+
+ process-dependabot:
+ # Skip this workflow on commits not pushed by Dependabot
+ if: ${{
+ github.repository == 'apache/logging-flume-rpc'
+ && github.actor == 'dependabot[bot]'
+ && github.event.workflow_run.conclusion == 'success'
+ }}
+ uses:
apache/logging-parent/.github/workflows/process-dependabot-reusable.yaml@gha/v0
+ permissions:
+ # Append the changelog commit
+ contents: write
+ # Convert the PR into draft
+ pull-requests: write
+ with:
+ # The path to the changelog directory for the current development branch.
+ changelog-path: src/changelog/.2.x.x
diff --git a/.gitignore b/.gitignore
index 9a0a932..5e0fa5a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,22 +1,53 @@
-# Lines that start with '#' are comments.
-*~
-*.diff
-*#
-.classpath
-.project
-.settings
-bin/flume-env.sh
-conf/flume-site.xml
-bin/.settings
-.eclipse
-pmd_report.html
-*/bin
-target
-patchprocess
-derby.log
-.idea
+# 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.
+
+# Maven
+target/
+.flattened-pom.xml
+/.mvn/extensions.xml
+/.mvn/wrapper/maven-wrapper.jar
+.surefire-*
+
+# Node.js (used by `frontend-maven-plugin` in `logging-parent`)
+node/
+node_modules/
+package-lock.json
+
+# IntelliJ IDEA
+.idea/
*.iml
+*.iws
+
+# Eclipse
+.project
+.classpath
+.settings/
+.factorypath
+/.metadata/
+.cache-main
+.cache-tests
+
+# Visual Studio Code
+.vscode/
+
+# NetBeans
nb-configuration.xml
+
+# Editor backup files
+*~
+*#
+
+# macOS
.DS_Store
-/.mvn/wrapper/maven-wrapper.jar
-**/metastore_db
diff --git a/.mvn/jvm.config b/.mvn/jvm.config
new file mode 100644
index 0000000..f3b9f7d
--- /dev/null
+++ b/.mvn/jvm.config
@@ -0,0 +1,11 @@
+--add-exports jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED
+--add-exports jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED
+--add-exports jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED
+--add-exports jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED
+--add-exports jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED
+--add-exports jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED
+--add-exports jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED
+--add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED
+--add-opens jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED
+--add-opens jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED
+-Dfile.encoding=UTF-8
diff --git a/.mvn/maven.config b/.mvn/maven.config
new file mode 100644
index 0000000..33b031d
--- /dev/null
+++ b/.mvn/maven.config
@@ -0,0 +1 @@
+-Puse-apache-snapshots
diff --git a/.rat-excludes b/.rat-excludes
new file mode 100644
index 0000000..bdb9d8e
--- /dev/null
+++ b/.rat-excludes
@@ -0,0 +1,5 @@
+.rat-excludes
+**/src/test/resources/**
+**/*.avsc
+**/*.avro
+**/src/main/thrift/aslv2
diff --git a/LICENSE.txt b/LICENSE.txt
new file mode 100644
index 0000000..9fa7156
--- /dev/null
+++ b/LICENSE.txt
@@ -0,0 +1,245 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed 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.
+
+====
+
+The following files are included under the 2-Clause BSD License
+
+flume-ng-sinks/flume-ng-morphline-solr-sink/src/test/resources/solr/collection1/conf/lang/stopwords_ar.txt
+flume-ng-sinks/flume-ng-morphline-solr-sink/src/test/resources/solr/collection1/conf/lang/stopwords_bg.txt
+flume-ng-sinks/flume-ng-morphline-solr-sink/src/test/resources/solr/collection1/conf/lang/stopwords_da.txt
+flume-ng-sinks/flume-ng-morphline-solr-sink/src/test/resources/solr/collection1/conf/lang/stopwords_de.txt
+flume-ng-sinks/flume-ng-morphline-solr-sink/src/test/resources/solr/collection1/conf/lang/stopwords_es.txt
+flume-ng-sinks/flume-ng-morphline-solr-sink/src/test/resources/solr/collection1/conf/lang/stopwords_fa.txt
+flume-ng-sinks/flume-ng-morphline-solr-sink/src/test/resources/solr/collection1/conf/lang/stopwords_fi.txt
+flume-ng-sinks/flume-ng-morphline-solr-sink/src/test/resources/solr/collection1/conf/lang/stopwords_fr.txt
+flume-ng-sinks/flume-ng-morphline-solr-sink/src/test/resources/solr/collection1/conf/lang/stopwords_hi.txt
+flume-ng-sinks/flume-ng-morphline-solr-sink/src/test/resources/solr/collection1/conf/lang/stopwords_hu.txt
+flume-ng-sinks/flume-ng-morphline-solr-sink/src/test/resources/solr/collection1/conf/lang/stopwords_it.txt
+flume-ng-sinks/flume-ng-morphline-solr-sink/src/test/resources/solr/collection1/conf/lang/stopwords_nl.txt
+flume-ng-sinks/flume-ng-morphline-solr-sink/src/test/resources/solr/collection1/conf/lang/stopwords_no.txt
+flume-ng-sinks/flume-ng-morphline-solr-sink/src/test/resources/solr/collection1/conf/lang/stopwords_pt.txt
+flume-ng-sinks/flume-ng-morphline-solr-sink/src/test/resources/solr/collection1/conf/lang/stopwords_ro.txt
+flume-ng-sinks/flume-ng-morphline-solr-sink/src/test/resources/solr/collection1/conf/lang/stopwords_ru.txt
+flume-ng-sinks/flume-ng-morphline-solr-sink/src/test/resources/solr/collection1/conf/lang/stopwords_sv.txt
+
+Redistribution and use in source and binary forms, with or without
modification,
+are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this
+list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice,
+this list of conditions and the following disclaimer in the documentation
and/or
+other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/NOTICE.txt b/NOTICE.txt
new file mode 100644
index 0000000..bf428fa
--- /dev/null
+++ b/NOTICE.txt
@@ -0,0 +1,5 @@
+Apache Flume RPC
+Copyright 2026 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..ba5e010
--- /dev/null
+++ b/README.md
@@ -0,0 +1,51 @@
+<!--
+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 status
+
+> [!WARNING]
+> **As of May 2026 this project is undergoing significant rework! We do not
+> advise using it until it is restablized and a formal release is announced.**
+> [It has been marked as dormant by Apache Logging Services consensus on
2024-10-10.](https://lists.apache.org/thread/dg9wro6dp7w95o1x911lbyqxzl808b3l)
+> Users are advised to migrate to alternatives.
+> For other inquiries, see [the support
policy](https://logging.apache.org/support.html).
+
+# Welcome to Apache Flume RPC!
+
+Apache Flume is a distributed, reliable, and available service for efficiently
+collecting, aggregating, and moving large amounts of event data. It has a
simple
+and flexible architecture based on streaming data flows. It is robust and fault
+tolerant with tunable reliability mechanisms and many failover and recovery
+mechanisms. The system is centrally managed and allows for intelligent dynamic
+management. It uses a simple extensible data model that allows for online
+analytic application.
+
+Apache Flume RPC provides the components that let Flume agents and applications
+exchange events over the network:
+
+* `flume-rpc-avro`: the Avro RPC client, source and sink,
+* `flume-rpc-thrift`: the Thrift RPC client, source and sink,
+* `flume-embedded-agent`: a stable public API for embedding a Flume agent in
an application.
+
+Apache Flume RPC is open-sourced under the Apache Software Foundation License
v2.0.
+
+## Documentation
+
+The Flume 2.x guide and FAQ are available here:
+
+* https://flume.apache.org/
diff --git a/flume-embedded-agent/pom.xml b/flume-embedded-agent/pom.xml
index 0ab5674..3de0e23 100644
--- a/flume-embedded-agent/pom.xml
+++ b/flume-embedded-agent/pom.xml
@@ -21,8 +21,7 @@
<parent>
<groupId>org.apache.flume</groupId>
<artifactId>flume-rpc</artifactId>
- <version>2.0.0-SNAPSHOT</version>
- <relativePath>../pom.xml</relativePath>
+ <version>${revision}</version>
</parent>
<artifactId>flume-embedded-agent</artifactId>
diff --git
a/flume-embedded-agent/src/test/java/org/apache/flume/agent/embedded/TestEmbeddedAgentEmbeddedSource.java
b/flume-embedded-agent/src/test/java/org/apache/flume/agent/embedded/TestEmbeddedAgentEmbeddedSource.java
index 65b905e..26a6792 100644
---
a/flume-embedded-agent/src/test/java/org/apache/flume/agent/embedded/TestEmbeddedAgentEmbeddedSource.java
+++
b/flume-embedded-agent/src/test/java/org/apache/flume/agent/embedded/TestEmbeddedAgentEmbeddedSource.java
@@ -16,7 +16,11 @@
*/
package org.apache.flume.agent.embedded;
-import static org.mockito.Mockito.*;
+import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
diff --git a/flume-rpc-avro/pom.xml b/flume-rpc-avro/pom.xml
index 1bee65a..42d0cfe 100644
--- a/flume-rpc-avro/pom.xml
+++ b/flume-rpc-avro/pom.xml
@@ -21,18 +21,16 @@
<parent>
<groupId>org.apache.flume</groupId>
<artifactId>flume-rpc</artifactId>
- <version>2.0.0-SNAPSHOT</version>
- <relativePath>../pom.xml</relativePath>
+ <version>${revision}</version>
</parent>
- <groupId>org.apache.flume</groupId>
<artifactId>flume-rpc-avro</artifactId>
<name>Flume RPC Avro</name>
<properties>
<module.name>org.apache.flume.rpc.avro</module.name>
- <spotbugs.maxAllowedViolations>55</spotbugs.maxAllowedViolations>
- <pmd.maxAllowedViolations>121</pmd.maxAllowedViolations>
+ <spotbugs.maxAllowedViolations>38</spotbugs.maxAllowedViolations>
+ <pmd.maxAllowedViolations>14</pmd.maxAllowedViolations>
</properties>
<dependencies>
<dependency>
@@ -54,8 +52,7 @@
</dependency>
<dependency>
<groupId>org.apache.flume</groupId>
- <artifactId>flume-ng-sdk</artifactId>
- <classifier>tests</classifier>
+ <artifactId>flume-ng-sdk-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
@@ -116,7 +113,6 @@
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
- <version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
@@ -127,62 +123,6 @@
</dependencies>
<build>
<plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <version>${mvn-compiler-plugin.version}</version>
- <configuration>
- <release>${releaseJavaVersion}</release>
- <compilerArgs>
- <arg>-parameters</arg>
- </compilerArgs>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.apache.rat</groupId>
- <artifactId>apache-rat-plugin</artifactId>
- <version>${rat.version}</version>
- <configuration>
- <excludes>
- <exclude>**/.idea/</exclude>
- <exclude>**/*.iml</exclude>
- <exclude>src/main/resources/META-INF/services/**/*</exclude>
- <exclude>**/nb-configuration.xml</exclude>
- <exclude>.git/</exclude>
- <exclude>patchprocess/</exclude>
- <exclude>.gitignore</exclude>
- <exclude>**/*.yml</exclude>
- <exclude>**/*.yaml</exclude>
- <exclude>**/*.json</exclude>
- <!-- ASF jenkins box puts the Maven repo in our root directory. -->
- <exclude>.repository/</exclude>
- <exclude>**/*.diff</exclude>
- <exclude>**/*.patch</exclude>
- <exclude>**/*.avsc</exclude>
- <exclude>**/*.avro</exclude>
- <exclude>**/docs/**</exclude>
- <exclude>**/test/resources/**</exclude>
- <exclude>**/.settings/*</exclude>
- <exclude>**/.classpath</exclude>
- <exclude>**/.project</exclude>
- <exclude>**/target/**</exclude>
- <exclude>**/derby.log</exclude>
- <exclude>**/metastore_db/</exclude>
- <exclude>.mvn/**</exclude>
- <exclude>**/exclude-pmd.properties</exclude>
- </excludes>
- <consoleOutput>true</consoleOutput>
- </configuration>
- <executions>
- <execution>
- <id>verify.rat</id>
- <goals>
- <goal>check</goal>
- </goals>
- <phase>verify</phase>
- </execution>
- </executions>
- </plugin>
<plugin>
<groupId>org.apache.avro</groupId>
<artifactId>avro-maven-plugin</artifactId>
@@ -204,18 +144,6 @@
</execution>
</executions>
</plugin>
-
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-jar-plugin</artifactId>
- <executions>
- <execution>
- <goals>
- <goal>test-jar</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
</plugins>
</build>
</project>
diff --git
a/flume-rpc-avro/src/main/java/org/apache/flume/rpc/avro/source/SpoolDirectorySource.java
b/flume-rpc-avro/src/main/java/org/apache/flume/rpc/avro/source/SpoolDirectorySource.java
index 9815e97..819d071 100644
---
a/flume-rpc-avro/src/main/java/org/apache/flume/rpc/avro/source/SpoolDirectorySource.java
+++
b/flume-rpc-avro/src/main/java/org/apache/flume/rpc/avro/source/SpoolDirectorySource.java
@@ -16,7 +16,44 @@
*/
package org.apache.flume.rpc.avro.source;
-import static
org.apache.flume.source.SpoolDirectorySourceConfigurationConstants.*;
+import static
org.apache.flume.source.SpoolDirectorySourceConfigurationConstants.BASENAME_HEADER;
+import static
org.apache.flume.source.SpoolDirectorySourceConfigurationConstants.BASENAME_HEADER_KEY;
+import static
org.apache.flume.source.SpoolDirectorySourceConfigurationConstants.BATCH_SIZE;
+import static
org.apache.flume.source.SpoolDirectorySourceConfigurationConstants.BUFFER_MAX_LINE_LENGTH;
+import static
org.apache.flume.source.SpoolDirectorySourceConfigurationConstants.CONSUME_ORDER;
+import static
org.apache.flume.source.SpoolDirectorySourceConfigurationConstants.DECODE_ERROR_POLICY;
+import static
org.apache.flume.source.SpoolDirectorySourceConfigurationConstants.DEFAULT_BASENAME_HEADER;
+import static
org.apache.flume.source.SpoolDirectorySourceConfigurationConstants.DEFAULT_BASENAME_HEADER_KEY;
+import static
org.apache.flume.source.SpoolDirectorySourceConfigurationConstants.DEFAULT_BATCH_SIZE;
+import static
org.apache.flume.source.SpoolDirectorySourceConfigurationConstants.DEFAULT_CONSUME_ORDER;
+import static
org.apache.flume.source.SpoolDirectorySourceConfigurationConstants.DEFAULT_DECODE_ERROR_POLICY;
+import static
org.apache.flume.source.SpoolDirectorySourceConfigurationConstants.DEFAULT_DELETE_POLICY;
+import static
org.apache.flume.source.SpoolDirectorySourceConfigurationConstants.DEFAULT_DESERIALIZER;
+import static
org.apache.flume.source.SpoolDirectorySourceConfigurationConstants.DEFAULT_FILENAME_HEADER_KEY;
+import static
org.apache.flume.source.SpoolDirectorySourceConfigurationConstants.DEFAULT_FILE_HEADER;
+import static
org.apache.flume.source.SpoolDirectorySourceConfigurationConstants.DEFAULT_IGNORE_PAT;
+import static
org.apache.flume.source.SpoolDirectorySourceConfigurationConstants.DEFAULT_INCLUDE_PAT;
+import static
org.apache.flume.source.SpoolDirectorySourceConfigurationConstants.DEFAULT_INPUT_CHARSET;
+import static
org.apache.flume.source.SpoolDirectorySourceConfigurationConstants.DEFAULT_MAX_BACKOFF;
+import static
org.apache.flume.source.SpoolDirectorySourceConfigurationConstants.DEFAULT_POLL_DELAY;
+import static
org.apache.flume.source.SpoolDirectorySourceConfigurationConstants.DEFAULT_RECURSIVE_DIRECTORY_SEARCH;
+import static
org.apache.flume.source.SpoolDirectorySourceConfigurationConstants.DEFAULT_SPOOLED_FILE_SUFFIX;
+import static
org.apache.flume.source.SpoolDirectorySourceConfigurationConstants.DEFAULT_TRACKER_DIR;
+import static
org.apache.flume.source.SpoolDirectorySourceConfigurationConstants.DEFAULT_TRACKING_POLICY;
+import static
org.apache.flume.source.SpoolDirectorySourceConfigurationConstants.DELETE_POLICY;
+import static
org.apache.flume.source.SpoolDirectorySourceConfigurationConstants.DESERIALIZER;
+import static
org.apache.flume.source.SpoolDirectorySourceConfigurationConstants.FILENAME_HEADER;
+import static
org.apache.flume.source.SpoolDirectorySourceConfigurationConstants.FILENAME_HEADER_KEY;
+import static
org.apache.flume.source.SpoolDirectorySourceConfigurationConstants.IGNORE_PAT;
+import static
org.apache.flume.source.SpoolDirectorySourceConfigurationConstants.INCLUDE_PAT;
+import static
org.apache.flume.source.SpoolDirectorySourceConfigurationConstants.INPUT_CHARSET;
+import static
org.apache.flume.source.SpoolDirectorySourceConfigurationConstants.MAX_BACKOFF;
+import static
org.apache.flume.source.SpoolDirectorySourceConfigurationConstants.POLL_DELAY;
+import static
org.apache.flume.source.SpoolDirectorySourceConfigurationConstants.RECURSIVE_DIRECTORY_SEARCH;
+import static
org.apache.flume.source.SpoolDirectorySourceConfigurationConstants.SPOOLED_FILE_SUFFIX;
+import static
org.apache.flume.source.SpoolDirectorySourceConfigurationConstants.SPOOL_DIRECTORY;
+import static
org.apache.flume.source.SpoolDirectorySourceConfigurationConstants.TRACKER_DIR;
+import static
org.apache.flume.source.SpoolDirectorySourceConfigurationConstants.TRACKING_POLICY;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Preconditions;
@@ -41,6 +78,7 @@ import
org.apache.flume.rpc.avro.serialization.ReliableSpoolingFileEventReader;
import org.apache.flume.serialization.DecodeErrorPolicy;
import org.apache.flume.serialization.LineDeserializer;
import org.apache.flume.source.AbstractSource;
+import
org.apache.flume.source.SpoolDirectorySourceConfigurationConstants.ConsumeOrder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git
a/flume-rpc-avro/src/test/java/org/apache/flume/rpc/avro/serialization/TestSpoolingFileLineReader.java
b/flume-rpc-avro/src/test/java/org/apache/flume/rpc/avro/serialization/TestSpoolingFileLineReader.java
index dd3e892..e66546a 100644
---
a/flume-rpc-avro/src/test/java/org/apache/flume/rpc/avro/serialization/TestSpoolingFileLineReader.java
+++
b/flume-rpc-avro/src/test/java/org/apache/flume/rpc/avro/serialization/TestSpoolingFileLineReader.java
@@ -16,7 +16,10 @@
*/
package org.apache.flume.rpc.avro.serialization;
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
import com.google.common.base.Charsets;
import com.google.common.base.Throwables;
diff --git
a/flume-rpc-avro/src/test/java/org/apache/flume/rpc/avro/sink/TestAvroSink.java
b/flume-rpc-avro/src/test/java/org/apache/flume/rpc/avro/sink/TestAvroSink.java
index 2b7630e..ad6492a 100644
---
a/flume-rpc-avro/src/test/java/org/apache/flume/rpc/avro/sink/TestAvroSink.java
+++
b/flume-rpc-avro/src/test/java/org/apache/flume/rpc/avro/sink/TestAvroSink.java
@@ -54,10 +54,10 @@ import org.apache.flume.instrumentation.SinkCounter;
import org.apache.flume.lifecycle.LifecycleController;
import org.apache.flume.lifecycle.LifecycleState;
import org.apache.flume.rpc.avro.source.AvroSource;
+import org.apache.flume.sdk.test.Whitebox;
import org.apache.flume.source.avro.AvroFlumeEvent;
import org.apache.flume.source.avro.AvroSourceProtocol;
import org.apache.flume.source.avro.Status;
-import org.apache.flume.util.Whitebox;
import org.junit.Assert;
import org.junit.Test;
import org.mockito.Mockito;
@@ -81,11 +81,11 @@ public class TestAvroSink {
private AvroSink sink;
private Channel channel;
- public void setUp() {
- setUp("none", 0);
+ public void setUpSink() {
+ setUpSink("none", 0);
}
- public void setUp(String compressionType, int compressionLevel) {
+ public void setUpSink(String compressionType, int compressionLevel) {
if (sink != null) {
throw new RuntimeException("double setup");
}
@@ -127,7 +127,7 @@ public class TestAvroSink {
@Test
public void testLifecycle() throws InterruptedException,
InstantiationException, IllegalAccessException {
- setUp();
+ setUpSink();
Server server = createServer(new MockAvroServer());
server.start();
@@ -144,7 +144,7 @@ public class TestAvroSink {
@Test
public void testProcess()
throws InterruptedException, EventDeliveryException,
InstantiationException, IllegalAccessException {
- setUp();
+ setUpSink();
Event event = EventBuilder.withBody("test event 1", Charsets.UTF_8);
Server server = createServer(new MockAvroServer());
@@ -179,7 +179,7 @@ public class TestAvroSink {
@Test
public void testChannelException()
throws InterruptedException, EventDeliveryException,
InstantiationException, IllegalAccessException {
- setUp();
+ setUpSink();
Server server = createServer(new MockAvroServer());
server.start();
@@ -202,7 +202,7 @@ public class TestAvroSink {
@Test
public void testTimeout()
throws InterruptedException, EventDeliveryException,
InstantiationException, IllegalAccessException {
- setUp();
+ setUpSink();
Event event = EventBuilder.withBody("foo", Charsets.UTF_8);
AtomicLong delay = new AtomicLong();
Server server = createServer(new DelayMockAvroServer(delay));
@@ -258,7 +258,7 @@ public class TestAvroSink {
public void testFailedConnect()
throws InterruptedException, EventDeliveryException,
InstantiationException, IllegalAccessException {
- setUp();
+ setUpSink();
Event event = EventBuilder.withBody("test event 1",
Charset.forName("UTF8"));
Server server = createServer(new MockAvroServer());
@@ -311,7 +311,7 @@ public class TestAvroSink {
@Test
public void testReset() throws Exception {
- setUp();
+ setUpSink();
Server server = createServer(new MockAvroServer());
server.start();
@@ -377,7 +377,7 @@ public class TestAvroSink {
@Test
public void testSslProcessTrustAllCerts()
throws InterruptedException, EventDeliveryException,
InstantiationException, IllegalAccessException {
- setUp();
+ setUpSink();
Context context = createBaseContext();
context.put("ssl", String.valueOf(true));
@@ -391,7 +391,7 @@ public class TestAvroSink {
@Test
public void testSslProcessWithComponentTruststore()
throws InterruptedException, EventDeliveryException,
InstantiationException, IllegalAccessException {
- setUp();
+ setUpSink();
Context context = createBaseContext();
context.put("ssl", String.valueOf(true));
@@ -406,7 +406,7 @@ public class TestAvroSink {
@Test
public void testSslProcessWithComponentTruststoreNoPassword()
throws InterruptedException, EventDeliveryException,
InstantiationException, IllegalAccessException {
- setUp();
+ setUpSink();
Context context = createBaseContext();
context.put("ssl", String.valueOf(true));
@@ -420,7 +420,7 @@ public class TestAvroSink {
@Test
public void testSslProcessWithGlobalTruststore()
throws InterruptedException, EventDeliveryException,
InstantiationException, IllegalAccessException {
- setUp();
+ setUpSink();
System.setProperty("javax.net.ssl.trustStore",
"src/test/resources/truststore.jks");
System.setProperty("javax.net.ssl.trustStorePassword", "password");
@@ -439,7 +439,7 @@ public class TestAvroSink {
@Test
public void testSslProcessWithGlobalTruststoreNoPassword()
throws InterruptedException, EventDeliveryException,
InstantiationException, IllegalAccessException {
- setUp();
+ setUpSink();
System.setProperty("javax.net.ssl.trustStore",
"src/test/resources/truststore.jks");
@@ -488,7 +488,7 @@ public class TestAvroSink {
@Test
public void testSslWithCompression()
throws InterruptedException, EventDeliveryException,
InstantiationException, IllegalAccessException {
- setUp("deflate", 6);
+ setUpSink("deflate", 6);
boolean bound = false;
@@ -575,7 +575,7 @@ public class TestAvroSink {
@Test
public void testSslSinkWithNonSslServer()
throws InterruptedException, InstantiationException,
IllegalAccessException {
- setUp();
+ setUpSink();
Server server = createServer(new MockAvroServer());
server.start();
@@ -601,7 +601,7 @@ public class TestAvroSink {
@Test
public void testSslSinkWithNonTrustedCert()
throws InterruptedException, InstantiationException,
IllegalAccessException {
- setUp();
+ setUpSink();
Server server = createSslServer(new MockAvroServer());
server.start();
@@ -683,9 +683,9 @@ public class TestAvroSink {
private void doRequest(boolean serverEnableCompression, boolean
clientEnableCompression, int compressionLevel)
throws InterruptedException, IOException, EventDeliveryException {
if (clientEnableCompression) {
- setUp("deflate", compressionLevel);
+ setUpSink("deflate", compressionLevel);
} else {
- setUp("none", compressionLevel);
+ setUpSink("none", compressionLevel);
}
boolean bound = false;
diff --git a/flume-rpc-thrift/pom.xml b/flume-rpc-thrift/pom.xml
index 533c55c..fe02b0d 100644
--- a/flume-rpc-thrift/pom.xml
+++ b/flume-rpc-thrift/pom.xml
@@ -21,39 +21,16 @@
<parent>
<groupId>org.apache.flume</groupId>
<artifactId>flume-rpc</artifactId>
- <version>2.0.0-SNAPSHOT</version>
- <relativePath>../pom.xml</relativePath>
+ <version>${revision}</version>
</parent>
- <groupId>org.apache.flume</groupId>
<artifactId>flume-rpc-thrift</artifactId>
<name>Flume RPC Thrift</name>
- <organization>
- <name>Apache Software Foundation</name>
- <url>http://www.apache.org</url>
- </organization>
-
- <developers>
- <developer>
- <id>rgoers</id>
- <name>Ralph Goers</name>
- <email>[email protected]</email>
- <organization>Nextiva</organization>
- </developer>
- </developers>
-
- <scm>
-
<connection>https://gitbox.apache.org/repos/asf/flume-spring-boot.git</connection>
-
<developerConnection>https://gitbox.apache.org/repos/asf/flume-spring-boot.git</developerConnection>
- <url>https://gitbox.apache.org/repos/asf/flume-spring-boot.git</url>
- </scm>
-
<properties>
- <thrift.version>0.14.2</thrift.version>
<module.name>org.apache.flume.rpc.thrift</module.name>
- <spotbugs.maxAllowedViolations>62</spotbugs.maxAllowedViolations>
- <pmd.maxAllowedViolations>121</pmd.maxAllowedViolations>
+ <spotbugs.maxAllowedViolations>26</spotbugs.maxAllowedViolations>
+ <pmd.maxAllowedViolations>88</pmd.maxAllowedViolations>
</properties>
<dependencies>
@@ -63,8 +40,7 @@
</dependency>
<dependency>
<groupId>org.apache.flume</groupId>
- <artifactId>flume-ng-sdk</artifactId>
- <classifier>tests</classifier>
+ <artifactId>flume-ng-sdk-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
@@ -78,13 +54,6 @@
<dependency>
<groupId>org.apache.thrift</groupId>
<artifactId>libthrift</artifactId>
- <version>${thrift.version}</version>
- <exclusions>
- <exclusion>
- <groupId>javax.servlet</groupId>
- <artifactId>servlet-api</artifactId>
- </exclusion>
- </exclusions>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
@@ -102,55 +71,6 @@
<scope>test</scope>
</dependency>
</dependencies>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.rat</groupId>
- <artifactId>apache-rat-plugin</artifactId>
- <version>${rat.version}</version>
- <configuration>
- <excludes>
- <exclude>**/.idea/</exclude>
- <exclude>**/*.iml</exclude>
- <exclude>src/main/resources/META-INF/services/**/*</exclude>
- <exclude>**/nb-configuration.xml</exclude>
- <exclude>.git/</exclude>
- <exclude>patchprocess/</exclude>
- <exclude>.gitignore</exclude>
- <exclude>**/*.yml</exclude>
- <exclude>**/*.yaml</exclude>
- <exclude>**/*.json</exclude>
- <!-- ASF jenkins box puts the Maven repo in our root directory. -->
- <exclude>.repository/</exclude>
- <exclude>**/*.diff</exclude>
- <exclude>**/*.patch</exclude>
- <exclude>**/*.avsc</exclude>
- <exclude>**/*.avro</exclude>
- <exclude>**/docs/**</exclude>
- <exclude>**/test/resources/**</exclude>
- <exclude>**/.settings/*</exclude>
- <exclude>**/.classpath</exclude>
- <exclude>**/.project</exclude>
- <exclude>**/target/**</exclude>
- <exclude>**/derby.log</exclude>
- <exclude>**/metastore_db/</exclude>
- <exclude>.mvn/**</exclude>
- <exclude>**/exclude-pmd.properties</exclude>
- </excludes>
- <consoleOutput>true</consoleOutput>
- </configuration>
- <executions>
- <execution>
- <id>verify.rat</id>
- <goals>
- <goal>check</goal>
- </goals>
- <phase>verify</phase>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
<profiles>
<profile>
<id>compileThrift</id>
diff --git
a/flume-rpc-thrift/src/main/java/org/apache/flume/rpc/thrift/ThriftFlumeEvent.java
b/flume-rpc-thrift/src/main/java/org/apache/flume/rpc/thrift/ThriftFlumeEvent.java
index 320cb1b..4948d68 100644
---
a/flume-rpc-thrift/src/main/java/org/apache/flume/rpc/thrift/ThriftFlumeEvent.java
+++
b/flume-rpc-thrift/src/main/java/org/apache/flume/rpc/thrift/ThriftFlumeEvent.java
@@ -31,7 +31,6 @@ import org.apache.thrift.scheme.IScheme;
import org.apache.thrift.scheme.SchemeFactory;
import org.apache.thrift.scheme.StandardScheme;
import org.apache.thrift.scheme.TupleScheme;
-import org.apache.thrift.server.AbstractNonblockingServer.*;
@SuppressWarnings({"cast", "rawtypes", "serial", "unchecked"})
@Generated(value = "Autogenerated by Thrift Compiler (0.9.3)", date =
"2017-09-01")
diff --git
a/flume-rpc-thrift/src/main/java/org/apache/flume/rpc/thrift/ThriftSourceProtocol.java
b/flume-rpc-thrift/src/main/java/org/apache/flume/rpc/thrift/ThriftSourceProtocol.java
index 1c44708..ec6b0a5 100644
---
a/flume-rpc-thrift/src/main/java/org/apache/flume/rpc/thrift/ThriftSourceProtocol.java
+++
b/flume-rpc-thrift/src/main/java/org/apache/flume/rpc/thrift/ThriftSourceProtocol.java
@@ -32,7 +32,7 @@ import org.apache.thrift.scheme.IScheme;
import org.apache.thrift.scheme.SchemeFactory;
import org.apache.thrift.scheme.StandardScheme;
import org.apache.thrift.scheme.TupleScheme;
-import org.apache.thrift.server.AbstractNonblockingServer.*;
+import org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git
a/flume-rpc-thrift/src/test/java/org/apache/flume/rpc/thrift/ThriftTestingSource.java
b/flume-rpc-thrift/src/test/java/org/apache/flume/rpc/thrift/ThriftTestingSource.java
index b74f2c7..7b64c72 100644
---
a/flume-rpc-thrift/src/test/java/org/apache/flume/rpc/thrift/ThriftTestingSource.java
+++
b/flume-rpc-thrift/src/test/java/org/apache/flume/rpc/thrift/ThriftTestingSource.java
@@ -59,7 +59,7 @@ import org.apache.flume.exception.ChannelException;
import org.apache.flume.instrumentation.SourceCounter;
import org.apache.flume.rpc.thrift.client.ThriftRpcClient;
import org.apache.flume.rpc.thrift.source.ThriftSource;
-import org.apache.flume.util.Whitebox;
+import org.apache.flume.sdk.test.Whitebox;
import org.apache.thrift.TException;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TCompactProtocol;
diff --git a/pom.xml b/pom.xml
index 7209053..ef4d62d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -26,46 +26,64 @@
</parent>
<artifactId>flume-rpc</artifactId>
- <version>2.0.0-SNAPSHOT</version>
+ <version>${revision}</version>
<packaging>pom</packaging>
<name>Flume RPC</name>
+ <inceptionYear>2026</inceptionYear>
+
<modules>
<module>flume-rpc-avro</module>
<module>flume-rpc-thrift</module>
<module>flume-embedded-agent</module>
</modules>
+ <scm child.scm.connection.inherit.append.path="false"
child.scm.developerConnection.inherit.append.path="false"
child.scm.url.inherit.append.path="false">
+
<connection>scm:git:https://gitbox.apache.org/repos/asf/logging-flume-rpc.git</connection>
+
<developerConnection>scm:git:https://gitbox.apache.org/repos/asf/logging-flume-rpc.git</developerConnection>
+ <tag>rel/${revision}</tag>
+ <url>https://gitbox.apache.org/repos/asf/logging-flume-rpc.git</url>
+ </scm>
+
<properties>
+
+ <revision>2.0.0-SNAPSHOT</revision>
+
+ <!-- These artifacts were never released before -->
+ <bnd.baseline.fail.on.missing>false</bnd.baseline.fail.on.missing>
+
+ <!-- The website is generated by Antora from `flume-project`: skip the
per-module `maven-site-plugin` sites. -->
+ <maven.site.skip>true</maven.site.skip>
+ <!-- Dummy value; overwritten by CI at release time. Do not edit manually.
-->
+
<project.build.outputTimestamp>2026-01-01T00:00:00Z</project.build.outputTimestamp>
+
+ <!-- Dependency versions -->
<avro.version>1.12.1</avro.version>
- <checksum-maven-plugin.version>1.11</checksum-maven-plugin.version>
- <findsecbugs-plugin.version>1.12.0</findsecbugs-plugin.version>
- <jackson.version>2.17.0</jackson.version>
- <netty-all.version>4.2.4.Final</netty-all.version>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <thrift.version>0.23.0</thrift.version>
+ <!--
+ ~ The sources under
`flume-rpc-thrift/src/main/java/org/apache/flume/rpc/thrift` were generated by
the Thrift 0.14 compiler
+ ~ and do not compile against newer `libthrift` versions: regenerate them
with the `compileThrift` profile before upgrading.
+ -->
+ <thrift.version>0.14.2</thrift.version>
</properties>
+
<dependencyManagement>
<dependencies>
+
<dependency>
<groupId>org.apache.avro</groupId>
<artifactId>avro</artifactId>
<version>${avro.version}</version>
</dependency>
- <dependency>
- <groupId>org.apache.avro</groupId>
- <artifactId>avro-compiler</artifactId>
- <version>${avro.version}</version>
- </dependency>
<dependency>
<groupId>org.apache.avro</groupId>
<artifactId>avro-ipc-netty</artifactId>
<version>${avro.version}</version>
<exclusions>
+ <!-- `flume-rpc-avro` depends on `netty-all`, managed by
`flume-parent`: skip the older Netty modules pulled in by Avro -->
<exclusion>
<groupId>io.netty</groupId>
- <artifactId>netty</artifactId>
+ <artifactId>*</artifactId>
</exclusion>
<exclusion>
<groupId>org.mortbay.jetty</groupId>
@@ -73,11 +91,7 @@
</exclusion>
</exclusions>
</dependency>
- <dependency>
- <groupId>io.netty</groupId>
- <artifactId>netty-all</artifactId>
- <version>${netty-all.version}</version>
- </dependency>
+
<dependency>
<groupId>org.apache.thrift</groupId>
<artifactId>libthrift</artifactId>
@@ -91,6 +105,7 @@
</dependency>
</dependencies>
</dependencyManagement>
+
<build>
<pluginManagement>
<plugins>
@@ -99,32 +114,39 @@
<artifactId>avro-maven-plugin</artifactId>
<version>${avro.version}</version>
</plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-surefire-plugin</artifactId>
- <version>${mvn-surefire-plugin.version}</version>
- <configuration>
- <argLine>-Djava.net.preferIPv4Stack=true</argLine>
- <!-- <argLine>
- - -add-opens java.base/java.lang=ALL-UNNAMED
- - -add-opens java.base/java.util=ALL-UNNAMED
- -Djava.net.preferIPv4Stack=true</argLine> -->
- <reuseForks>false</reuseForks>
- <forkCount>1</forkCount>
- <!--<rerunFailingTestsCount>10</rerunFailingTestsCount>-->
- <forkedProcessTimeoutInSeconds>900</forkedProcessTimeoutInSeconds>
-
<redirectTestOutputToFile>${redirectTestOutput}</redirectTestOutputToFile>
- <includes>
- <include>${test.include.pattern}</include>
- </includes>
- <excludes>
- <exclude>**/*$*</exclude>
- <exclude>${test.exclude.pattern}</exclude>
- </excludes>
- </configuration>
- </plugin>
</plugins>
</pluginManagement>
</build>
+ <profiles>
+ <!-- Temporary copy from org.apache:apache, until the parent POM is
released -->
+ <profile>
+ <id>use-apache-snapshots</id>
+ <activation>
+ <property>
+ <name>apache.snapshots</name>
+ </property>
+ </activation>
+ <repositories>
+ <repository>
+ <releases>
+ <enabled>false</enabled>
+ </releases>
+ <id>apache.snapshots</id>
+ <name>Apache Snapshot Repository</name>
+ <url>https://repository.apache.org/snapshots</url>
+ </repository>
+ </repositories>
+ <pluginRepositories>
+ <pluginRepository>
+ <releases>
+ <enabled>false</enabled>
+ </releases>
+ <id>apache.snapshots</id>
+ <name>Apache Snapshot Repository</name>
+ <url>https://repository.apache.org/snapshots</url>
+ </pluginRepository>
+ </pluginRepositories>
+ </profile>
+ </profiles>
</project>
diff --git a/src/changelog/.2.x.x/.release-notes.adoc.ftl
b/src/changelog/.2.x.x/.release-notes.adoc.ftl
new file mode 100644
index 0000000..decbaa6
--- /dev/null
+++ b/src/changelog/.2.x.x/.release-notes.adoc.ftl
@@ -0,0 +1,25 @@
+////
+ 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
+
+ https://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.
+////
+
+${"[#release-notes-" + release.version?replace("[^a-zA-Z0-9]", "-", "r") + "]"}
+== ${release.version}
+
+<#if release.date?has_content>Release date:: ${release.date}</#if>
+
+This is the first release of Apache Flume RPC, which contains the Avro and
Thrift RPC components and the embedded agent moved out of the main Flume
repository.
+
+<#include "../.changelog.adoc.ftl">
diff --git a/src/changelog/.2.x.x/add_rpc_modules.xml
b/src/changelog/.2.x.x/add_rpc_modules.xml
new file mode 100644
index 0000000..120311e
--- /dev/null
+++ b/src/changelog/.2.x.x/add_rpc_modules.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entry xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns="https://logging.apache.org/xml/ns"
+ xsi:schemaLocation="https://logging.apache.org/xml/ns
https://logging.apache.org/xml/ns/log4j-changelog-0.xsd"
+ type="added">
+ <issue id="431" link="https://github.com/apache/logging-flume/pull/431"/>
+ <description format="asciidoc">Add `flume-rpc-avro`, `flume-rpc-thrift` and
`flume-embedded-agent`, moved out of the main Flume repository</description>
+</entry>
diff --git a/src/changelog/.changelog.adoc.ftl
b/src/changelog/.changelog.adoc.ftl
new file mode 100644
index 0000000..b36ecf9
--- /dev/null
+++ b/src/changelog/.changelog.adoc.ftl
@@ -0,0 +1,27 @@
+<#--
+ ~ 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.
+ -->
+<#if entriesByType?size gt 0>
+<#list entriesByType as entryType, entries>
+
+${"[#release-notes-" + release.version?replace("[^a-zA-Z0-9]", "-", "r") + "-"
+ entryType?lower_case + "]"}
+=== ${entryType?capitalize}
+
+<#list entries as entry>
+* ${entry.description.text?replace("\\s+", " ", "r")}<#if
entry.issues?has_content> (<#list entry.issues as
issue>${issue.link}[${issue.id}]<#if issue?has_next>, </#if></#list>)</#if>
+</#list>
+</#list>
+</#if>
diff --git a/src/changelog/.index.adoc.ftl b/src/changelog/.index.adoc.ftl
new file mode 100644
index 0000000..c71482e
--- /dev/null
+++ b/src/changelog/.index.adoc.ftl
@@ -0,0 +1,42 @@
+////
+ 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.
+////
+
+////
+ ██ ██ █████ ██████ ███ ██ ██ ███ ██ ██████ ██
+ ██ ██ ██ ██ ██ ██ ████ ██ ██ ████ ██ ██ ██
+ ██ █ ██ ███████ ██████ ██ ██ ██ ██ ██ ██ ██ ██ ███ ██
+ ██ ███ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
+ ███ ███ ██ ██ ██ ██ ██ ████ ██ ██ ████ ██████ ██
+
+ IF THIS FILE IS CALLED `release-notes.adoc`, IT IS AUTO-GENERATED, DO NOT
EDIT IT!
+
+ The release notes page is generated from `src/changelog/.index.adoc.ftl`
during
+ the `pre-site` phase of the Maven build and is written to
+ `target/generated-site/antora/modules/ROOT/pages/release-notes.adoc`,
+ where the Antora site build picks it up.
+ Hence, you must always edit `.index.adoc.ftl` and never the generated file.
+////
+
+// Release notes index does not look nice with a deep sectioning, override it:
+:page-toclevels: 1
+
+${"[#release-notes]"}
+= Release notes
+<#list releases as release><#if release.changelogEntryCount gt 0>
+
+include::_release-notes/${release.version}.adoc[]
+</#if></#list>