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>

Reply via email to