This is an automated email from the ASF dual-hosted git repository.
adoroszlai pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone.git
The following commit(s) were added to refs/heads/master by this push:
new a9c9caff033 HDDS-16084. Add ErrorProne to CI (#11056)
a9c9caff033 is described below
commit a9c9caff0330814f6009ecc40b47bed2f445568f
Author: Ivan Andika <[email protected]>
AuthorDate: Sat Sep 19 14:47:05 2026 +0800
HDDS-16084. Add ErrorProne to CI (#11056)
---
.github/ci.md | 1 +
dev-support/ci/errorprone.bats | 101 +++++++++++++++++++++
dev-support/ci/selective_ci_checks.bats | 36 ++++----
dev-support/ci/selective_ci_checks.sh | 20 ++++
.../scm/storage/TestBlockDataStreamOutput.java | 2 +-
.../ozone/client/io/TestECBlockInputStream.java | 2 +-
.../hadoop/hdds/conf/DelegatingProperties.java | 2 +-
.../balancer/ContainerBalancerConfiguration.java | 1 +
.../apache/hadoop/hdds/tracing/TracingUtil.java | 4 +
.../container/common/utils/ContainerCache.java | 4 +-
.../container/common/utils/ReferenceCountedDB.java | 2 +-
.../SCMSecurityProtocolClientSideTranslatorPB.java | 5 +-
.../SecretKeyProtocolClientSideTranslatorPB.java | 2 +-
.../apache/hadoop/hdds/scm/net/InnerNodeImpl.java | 2 -
...lockLocationProtocolClientSideTranslatorPB.java | 2 +-
.../certificate/client/SCMCertificateClient.java | 2 +-
.../exceptions/TestSCMExceptionResultCodes.java | 3 +-
.../TestSCMSecurityExceptionErrorCodes.java} | 34 +++----
.../org/apache/ozone/rocksdiff/CompactionDag.java | 2 +-
.../apache/ozone/rocksdiff/TestCompactionDag.java | 19 ++++
.../rocksdiff/TestRocksDBCheckpointDiffer.java | 62 +++++--------
.../apache/ozone/rocksdiff/TestRocksDiffUtils.java | 18 ++--
.../replication/ReplicationManagerMetrics.java | 37 ++++----
.../hdds/scm/server/TestSCMContainerMetrics.java | 21 ++---
.../ozone/admin/om/GetServiceRolesSubcommand.java | 8 +-
.../java/org/apache/ozone/TestPrintableGraph.java | 11 +--
.../hadoop/ozone/client/io/ECKeyOutputStream.java | 2 +-
.../hadoop/ozone/om/helpers/OmRangerSyncArgs.java | 3 -
...OzoneManagerProtocolClientSideTranslatorPB.java | 2 +-
.../ozone/om/exceptions/TestResultCodes.java | 2 +-
...doopRpcOMFollowerReadFailoverProxyProvider.java | 5 +-
.../grpc/TestClientAddressClientInterceptor.java | 1 +
.../grpc/TestClientAddressServerInterceptor.java | 14 ++-
hadoop-ozone/dev-support/checks/bats.sh | 1 +
hadoop-ozone/dev-support/checks/errorprone.sh | 53 +++++++++++
.../fs/contract/AbstractContractSafeModeTest.java | 2 +-
.../java/org/apache/hadoop/fs/ozone/TestHSync.java | 22 +++--
.../hadoop/hdds/scm/TestXceiverClientManager.java | 4 +-
.../ozone/client/rpc/TestECKeyOutputStream.java | 2 +-
.../commandhandler/TestBlockDeletion.java | 4 +-
.../hadoop/ozone/om/TestAddRemoveOzoneManager.java | 2 +-
.../hadoop/ozone/om/TestObjectStoreWithFSO.java | 2 +-
.../TestSnapshotDirectoryCleaningService.java | 15 +--
.../tools/contract/AbstractContractDistCpTest.java | 2 +-
.../hadoop/ozone/om/request/OMClientRequest.java | 2 +-
.../ozone/om/request/key/OMKeysDeleteRequest.java | 2 +-
.../ozone/om/snapshot/SnapshotDiffManager.java | 7 +-
.../hadoop/ozone/om/TestOMMetadataReader.java | 1 +
.../request/TestOMClientRequestWithUserInfo.java | 1 +
.../om/request/key/TestOMKeyCreateRequest.java | 27 +++---
.../key/TestOMKeyPurgeRequestAndResponse.java | 2 -
.../snapshot/TestOmSnapshotLocalDataManager.java | 3 +-
.../hadoop/ozone/recon/api/BucketEndpoint.java | 1 -
.../hadoop/ozone/recon/api/VolumeEndpoint.java | 1 -
.../ozone/recon/scm/ReconContainerManager.java | 8 +-
.../impl/ReconContainerMetadataManagerImpl.java | 7 --
.../hadoop/ozone/recon/api/TestEndpoints.java | 2 +-
.../ozone/recon/scm/TestReconContainerManager.java | 2 +-
.../recon/tasks/TestContainerKeyMapperTask.java | 21 +----
.../recon/tasks/TestContainerSizeCountTask.java | 2 +-
.../ozone/recon/tasks/TestOmTableInsightTask.java | 2 +-
.../s3/endpoint/TestMultipartUploadWithCopy.java | 6 +-
pom.xml | 43 +++++++++
63 files changed, 442 insertions(+), 239 deletions(-)
diff --git a/.github/ci.md b/.github/ci.md
index f354c7b80d0..f2bfb537cc5 100644
--- a/.github/ci.md
+++ b/.github/ci.md
@@ -43,6 +43,7 @@ Runs a subset of the following subjobs depending on what was
selected by build-i
- bats: [Checks](../hadoop-ozone/dev-support/checks/bats.sh) bash scripts,
(using the [Bash Automated Testing
System](https://github.com/bats-core/bats-core#bats-core-bash-automated-testing-system-2018))
- checkstyle: [Runs](../hadoop-ozone/dev-support/checks/checkstyle.sh) 'mvn
checkstyle' plugin to confirm Java source abides by Ozone coding conventions
- docs: [Builds](../hadoop-ozone/dev-support/checks/docs.sh) website with
[Hugo](https://gohugo.io/)
+- errorprone: [Runs](../hadoop-ozone/dev-support/checks/errorprone.sh) Error
Prone static analysis during Java compilation. All diagnostics go to
`diagnostics.txt`; `summary.txt` contains only errors or a fallback for a
non-diagnostic Maven failure.
- findbugs: [Runs](../hadoop-ozone/dev-support/checks/findbugs.sh) spotbugs
static analysis on bytecode
- pmd: [Runs](../hadoop-ozone/dev-support/checks/pmd.sh) PMD static analysis
on project's source code
- rat (release audit tool):
[Confirms](../hadoop-ozone/dev-support/checks/rat.sh) source files include
licenses
diff --git a/dev-support/ci/errorprone.bats b/dev-support/ci/errorprone.bats
new file mode 100644
index 00000000000..49f687b671e
--- /dev/null
+++ b/dev-support/ci/errorprone.bats
@@ -0,0 +1,101 @@
+#!/usr/bin/env bats
+# 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.
+
+setup() {
+ TEST_TMPDIR=$(mktemp -d)
+ export TEST_TMPDIR
+ export OUTPUT_DIR="${TEST_TMPDIR}/report"
+ mkdir -p "${TEST_TMPDIR}/bin" "${OUTPUT_DIR}"
+ echo 9 > "${OUTPUT_DIR}/failures"
+ export MAVEN_EXIT_CODE=1
+cat > "${TEST_TMPDIR}/bin/mvn" <<'EOF'
+#!/usr/bin/env bash
+rm -rf "${OUTPUT_DIR}"
+printf '%s\n' "$*" > "${TEST_TMPDIR}/mvn-args"
+printf '%s\n' \
+ "[WARNING] The following options were not recognized by any processor:
'[artifactId]'" \
+ "[WARNING] /src/Legacy.java:[1,1] [JdkObsolete] legacy finding" \
+ "[WARNING] /src/Custom.java:[3,1] [Custom-Rule_1] custom finding" \
+ "[ERROR] /src/Format.java:[2,1] [FormatString] error finding" \
+ "[ERROR] /src/Format.java:[2,1] [FormatString] error finding" \
+ "/src/Raw.java:4: warning: [RawWarning] raw warning" \
+ "[ERROR] Failed to execute goal example:example: failed"
+printf '%s\n' "/src/Raw.java:5: error: [RawError] raw error" >&2
+exit "${MAVEN_EXIT_CODE}"
+EOF
+ chmod +x "${TEST_TMPDIR}/bin/mvn"
+ export PATH="${TEST_TMPDIR}/bin:${PATH}"
+}
+
+teardown() {
+ rm -rf "${TEST_TMPDIR}"
+}
+
+@test "Error Prone reports Maven and javac findings and fails for errors" {
+ run hadoop-ozone/dev-support/checks/errorprone.sh
+
+ [ "$status" -eq 1 ]
+ grep -q -- '-DskipTests clean package' "${TEST_TMPDIR}/mvn-args"
+ ! grep -q -- '-DskipShade' "${TEST_TMPDIR}/mvn-args"
+ [ "$(wc -l < "${OUTPUT_DIR}/diagnostics.txt")" -eq 5 ]
+ grep -q '^\[WARNING\].*\[JdkObsolete\]' "${OUTPUT_DIR}/diagnostics.txt"
+ grep -q '^\[ERROR\].*\[FormatString\]' "${OUTPUT_DIR}/diagnostics.txt"
+ grep -q '^\[WARNING\].*\[Custom-Rule_1\]' "${OUTPUT_DIR}/diagnostics.txt"
+ grep -q '^/src/Raw.java:4: warning: \[RawWarning\]'
"${OUTPUT_DIR}/diagnostics.txt"
+ grep -q '^/src/Raw.java:5: error: \[RawError\]'
"${OUTPUT_DIR}/diagnostics.txt"
+ ! grep -q 'Failed to execute goal' "${OUTPUT_DIR}/diagnostics.txt"
+ [ "$(wc -l < "${OUTPUT_DIR}/summary.txt")" -eq 2 ]
+ grep -q '^\[ERROR\].*\[FormatString\]' "${OUTPUT_DIR}/summary.txt"
+ grep -q '^/src/Raw.java:5: error: \[RawError\]' "${OUTPUT_DIR}/summary.txt"
+ [ "$(< "${OUTPUT_DIR}/failures")" -eq 2 ]
+}
+
+@test "Error Prone warnings do not fail the check" {
+ export MAVEN_EXIT_CODE=0
+ cat > "${TEST_TMPDIR}/bin/mvn" <<'EOF'
+#!/usr/bin/env bash
+rm -rf "${OUTPUT_DIR}"
+printf '%s\n' \
+ "[WARNING] /src/Legacy.java:[1,1] [JdkObsolete] legacy finding" \
+ "/src/Raw.java:4: warning: [RawWarning] raw warning"
+exit "${MAVEN_EXIT_CODE}"
+EOF
+ chmod +x "${TEST_TMPDIR}/bin/mvn"
+
+ run hadoop-ozone/dev-support/checks/errorprone.sh
+
+ [ "$status" -eq 0 ]
+ [ "$(wc -l < "${OUTPUT_DIR}/diagnostics.txt")" -eq 2 ]
+ [ "$(< "${OUTPUT_DIR}/failures")" -eq 0 ]
+ [ ! -s "${OUTPUT_DIR}/summary.txt" ]
+}
+
+@test "Error Prone reports an unknown Maven failure" {
+ cat > "${TEST_TMPDIR}/bin/mvn" <<'EOF'
+#!/usr/bin/env bash
+rm -rf "${OUTPUT_DIR}"
+echo "[ERROR] Failed to execute goal example:example: failed"
+exit "${MAVEN_EXIT_CODE}"
+EOF
+ chmod +x "${TEST_TMPDIR}/bin/mvn"
+
+ run hadoop-ozone/dev-support/checks/errorprone.sh
+
+ [ "$status" -eq 1 ]
+ [ ! -s "${OUTPUT_DIR}/diagnostics.txt" ]
+ [ "$(< "${OUTPUT_DIR}/summary.txt")" = "Unknown failure, check output.log" ]
+ [ "$(< "${OUTPUT_DIR}/failures")" -eq 1 ]
+}
diff --git a/dev-support/ci/selective_ci_checks.bats
b/dev-support/ci/selective_ci_checks.bats
index 891e0450608..a2579dec369 100644
--- a/dev-support/ci/selective_ci_checks.bats
+++ b/dev-support/ci/selective_ci_checks.bats
@@ -102,7 +102,7 @@ load bats-assert/load.bash
@test "java test + pmd change" {
run dev-support/ci/selective_ci_checks.sh 250bd5f317
- assert_output -p
'basic-checks=["rat","author","checkstyle","findbugs","pmd"]'
+ assert_output -p
'basic-checks=["rat","author","checkstyle","errorprone","findbugs","pmd"]'
assert_output -p needs-build=true
assert_output -p needs-compile=true
assert_output -p needs-compose-tests=false
@@ -113,7 +113,7 @@ load bats-assert/load.bash
@test "integration and unit: java change" {
run dev-support/ci/selective_ci_checks.sh 9aebf6e25
- assert_output -p
'basic-checks=["rat","author","checkstyle","findbugs","pmd"]'
+ assert_output -p
'basic-checks=["rat","author","checkstyle","errorprone","findbugs","pmd"]'
assert_output -p needs-build=true
assert_output -p needs-compile=true
assert_output -p needs-compose-tests=false
@@ -157,7 +157,7 @@ load bats-assert/load.bash
@test "unit only" {
run dev-support/ci/selective_ci_checks.sh 1dd1d0ba3
- assert_output -p
'basic-checks=["rat","author","checkstyle","findbugs","pmd"]'
+ assert_output -p
'basic-checks=["rat","author","checkstyle","errorprone","findbugs","pmd"]'
assert_output -p needs-build=true
assert_output -p needs-compile=true
assert_output -p needs-compose-tests=false
@@ -168,7 +168,7 @@ load bats-assert/load.bash
@test "unit helper" {
run dev-support/ci/selective_ci_checks.sh 88383d1d5
- assert_output -p
'basic-checks=["rat","author","checkstyle","findbugs","pmd"]'
+ assert_output -p
'basic-checks=["rat","author","checkstyle","errorprone","findbugs","pmd"]'
assert_output -p needs-build=true
assert_output -p needs-compile=true
assert_output -p needs-compose-tests=false
@@ -179,7 +179,7 @@ load bats-assert/load.bash
@test "integration only" {
run dev-support/ci/selective_ci_checks.sh 61396ba9f
- assert_output -p
'basic-checks=["rat","author","checkstyle","findbugs","pmd"]'
+ assert_output -p
'basic-checks=["rat","author","checkstyle","errorprone","findbugs","pmd"]'
assert_output -p needs-build=true
assert_output -p needs-compile=true
assert_output -p needs-compose-tests=false
@@ -190,7 +190,7 @@ load bats-assert/load.bash
@test "mini-cluster" {
run dev-support/ci/selective_ci_checks.sh
f0388a195411e68aac360de8ab95735b2eb295de
- assert_output -p
'basic-checks=["rat","author","checkstyle","findbugs","pmd"]'
+ assert_output -p
'basic-checks=["rat","author","checkstyle","errorprone","findbugs","pmd"]'
assert_output -p needs-build=true
assert_output -p needs-compile=true
assert_output -p needs-compose-tests=false
@@ -201,7 +201,7 @@ load bats-assert/load.bash
@test "test-utils" {
run dev-support/ci/selective_ci_checks.sh
60e4ab121853c182e1272b04fd1a93d55b12cfc7
- assert_output -p
'basic-checks=["rat","author","checkstyle","findbugs","pmd"]'
+ assert_output -p
'basic-checks=["rat","author","checkstyle","errorprone","findbugs","pmd"]'
assert_output -p needs-build=true
assert_output -p needs-compile=true
assert_output -p needs-compose-tests=false
@@ -212,7 +212,7 @@ load bats-assert/load.bash
@test "native only" {
run dev-support/ci/selective_ci_checks.sh 5b1319a8c2
- assert_output -p
'basic-checks=["rat","author","checkstyle","findbugs","pmd"]'
+ assert_output -p
'basic-checks=["rat","author","checkstyle","errorprone","findbugs","pmd"]'
assert_output -p needs-build=true
assert_output -p needs-compile=true
assert_output -p needs-compose-tests=true
@@ -223,7 +223,7 @@ load bats-assert/load.bash
@test "native test in other module" {
run dev-support/ci/selective_ci_checks.sh 822c0dee1a
- assert_output -p
'basic-checks=["rat","author","checkstyle","findbugs","pmd"]'
+ assert_output -p
'basic-checks=["rat","author","checkstyle","errorprone","findbugs","pmd"]'
assert_output -p needs-build=true
assert_output -p needs-compile=true
assert_output -p needs-compose-tests=false
@@ -256,7 +256,7 @@ load bats-assert/load.bash
@test "main/java change" {
run dev-support/ci/selective_ci_checks.sh 86a771dfe
- assert_output -p
'basic-checks=["rat","author","checkstyle","findbugs","pmd"]'
+ assert_output -p
'basic-checks=["rat","author","checkstyle","errorprone","findbugs","pmd"]'
assert_output -p needs-build=true
assert_output -p needs-compile=true
assert_output -p needs-compose-tests=true
@@ -267,7 +267,7 @@ load bats-assert/load.bash
@test "..../java change" {
run dev-support/ci/selective_ci_checks.sh 01c616536
- assert_output -p
'basic-checks=["rat","author","checkstyle","findbugs","pmd"]'
+ assert_output -p
'basic-checks=["rat","author","checkstyle","errorprone","findbugs","pmd"]'
assert_output -p needs-build=true
assert_output -p needs-compile=true
assert_output -p needs-compose-tests=true
@@ -278,7 +278,7 @@ load bats-assert/load.bash
@test "java and compose change" {
run dev-support/ci/selective_ci_checks.sh d0f0f806e
- assert_output -p
'basic-checks=["rat","author","checkstyle","findbugs","pmd"]'
+ assert_output -p
'basic-checks=["rat","author","checkstyle","errorprone","findbugs","pmd"]'
assert_output -p needs-build=true
assert_output -p needs-compile=true
assert_output -p needs-compose-tests=true
@@ -289,7 +289,7 @@ load bats-assert/load.bash
@test "java and docs change" {
run dev-support/ci/selective_ci_checks.sh 2c0adac26
- assert_output -p
'basic-checks=["rat","author","checkstyle","docs","findbugs","pmd"]'
+ assert_output -p
'basic-checks=["rat","author","checkstyle","docs","errorprone","findbugs","pmd"]'
assert_output -p needs-build=true
assert_output -p needs-compile=true
assert_output -p needs-compose-tests=true
@@ -300,7 +300,7 @@ load bats-assert/load.bash
@test "pom change" {
run dev-support/ci/selective_ci_checks.sh 9129424a9
- assert_output -p 'basic-checks=["rat","checkstyle","findbugs","pmd"]'
+ assert_output -p
'basic-checks=["rat","checkstyle","errorprone","findbugs","pmd"]'
assert_output -p needs-build=true
assert_output -p needs-compile=true
assert_output -p needs-compose-tests=true
@@ -311,7 +311,7 @@ load bats-assert/load.bash
@test "CI lib change" {
run dev-support/ci/selective_ci_checks.sh ceb79acaa
- assert_output -p
'basic-checks=["author","bats","checkstyle","docs","findbugs","pmd","rat"]'
+ assert_output -p
'basic-checks=["author","bats","checkstyle","docs","errorprone","findbugs","pmd","rat"]'
assert_output -p needs-build=true
assert_output -p needs-compile=true
assert_output -p needs-compose-tests=true
@@ -322,7 +322,7 @@ load bats-assert/load.bash
@test "CI workflow change" {
run dev-support/ci/selective_ci_checks.sh 90a8d7c01
- assert_output -p
'basic-checks=["author","bats","checkstyle","docs","findbugs","pmd","rat"]'
+ assert_output -p
'basic-checks=["author","bats","checkstyle","docs","errorprone","findbugs","pmd","rat"]'
assert_output -p needs-build=true
assert_output -p needs-compile=true
assert_output -p needs-compose-tests=true
@@ -345,7 +345,7 @@ load bats-assert/load.bash
@test "CI workflow change (check.yml)" {
run dev-support/ci/selective_ci_checks.sh
1468af02067ec75b255f605816c32f8bf4dfaabf
- assert_output -p
'basic-checks=["author","bats","checkstyle","docs","findbugs","pmd","rat"]'
+ assert_output -p
'basic-checks=["author","bats","checkstyle","docs","errorprone","findbugs","pmd","rat"]'
assert_output -p needs-build=true
assert_output -p needs-compile=true
assert_output -p needs-compose-tests=true
@@ -356,7 +356,7 @@ load bats-assert/load.bash
@test "CI workflow change (ci.yaml)" {
run dev-support/ci/selective_ci_checks.sh 90fd5f2adc
- assert_output -p
'basic-checks=["author","bats","checkstyle","docs","findbugs","pmd","rat"]'
+ assert_output -p
'basic-checks=["author","bats","checkstyle","docs","errorprone","findbugs","pmd","rat"]'
assert_output -p needs-build=true
assert_output -p needs-compile=true
assert_output -p needs-compose-tests=true
diff --git a/dev-support/ci/selective_ci_checks.sh
b/dev-support/ci/selective_ci_checks.sh
index 57e86347077..b45ef77179f 100755
--- a/dev-support/ci/selective_ci_checks.sh
+++ b/dev-support/ci/selective_ci_checks.sh
@@ -404,6 +404,25 @@ function check_needs_docs() {
fi
}
+function check_needs_errorprone() {
+ start_end::group_start "Check if Error Prone is needed"
+ local pattern_array=(
+ "^hadoop-ozone/dev-support/checks/errorprone.sh"
+ "pom.xml"
+ "src/..../java"
+ )
+ local ignore_array=(
+ "^hadoop-ozone/dist"
+ )
+ filter_changed_files
+
+ if [[ ${match_count} != "0" ]]; then
+ add_basic_check errorprone
+ fi
+
+ start_end::group_end
+}
+
function check_needs_findbugs() {
start_end::group_start "Check if findbugs is needed"
local pattern_array=(
@@ -580,6 +599,7 @@ check_needs_author
check_needs_bats
check_needs_checkstyle
check_needs_docs
+check_needs_errorprone
check_needs_findbugs
check_needs_pmd
calculate_test_types_to_run
diff --git
a/hadoop-hdds/client/src/test/java/org/apache/hadoop/hdds/scm/storage/TestBlockDataStreamOutput.java
b/hadoop-hdds/client/src/test/java/org/apache/hadoop/hdds/scm/storage/TestBlockDataStreamOutput.java
index a45032edcee..c66d7006c37 100644
---
a/hadoop-hdds/client/src/test/java/org/apache/hadoop/hdds/scm/storage/TestBlockDataStreamOutput.java
+++
b/hadoop-hdds/client/src/test/java/org/apache/hadoop/hdds/scm/storage/TestBlockDataStreamOutput.java
@@ -219,7 +219,7 @@ void closeAfterWriteFailureThrows() throws Exception {
}
assertTrue(foundExpectedCause);
} else {
- assertThat(e.getMessage().contains("chunk write failed due to injected
failure"));
+ assertThat(e.getMessage()).contains("chunk write failed due to injected
failure");
}
}
diff --git
a/hadoop-hdds/client/src/test/java/org/apache/hadoop/ozone/client/io/TestECBlockInputStream.java
b/hadoop-hdds/client/src/test/java/org/apache/hadoop/ozone/client/io/TestECBlockInputStream.java
index c0a2985b47d..97f9230b471 100644
---
a/hadoop-hdds/client/src/test/java/org/apache/hadoop/ozone/client/io/TestECBlockInputStream.java
+++
b/hadoop-hdds/client/src/test/java/org/apache/hadoop/ozone/client/io/TestECBlockInputStream.java
@@ -85,7 +85,7 @@ keyInfo, null, null, new TestBlockInputStreamFactory(),
}
// EC-3-2, very large block, so all 3 data locations are needed
- keyInfo = ECStreamTestUtil.createKeyInfo(repConfig, 5, 5000 * ONEMB);
+ keyInfo = ECStreamTestUtil.createKeyInfo(repConfig, 5, 5000L * ONEMB);
try (ECBlockInputStream ecb = new ECBlockInputStream(repConfig,
keyInfo, null, null, new TestBlockInputStreamFactory(),
clientConfig)) {
diff --git
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/conf/DelegatingProperties.java
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/conf/DelegatingProperties.java
index 5a924c88738..a0ce09a3ea4 100644
---
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/conf/DelegatingProperties.java
+++
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/conf/DelegatingProperties.java
@@ -121,7 +121,7 @@ public Set<Object> keySet() {
@Override
public boolean contains(Object value) {
- return properties.contains(value);
+ return properties.containsValue(value);
}
@Override
diff --git
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/scm/container/balancer/ContainerBalancerConfiguration.java
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/scm/container/balancer/ContainerBalancerConfiguration.java
index 65acb9da8e1..3e73eb5bccd 100644
---
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/scm/container/balancer/ContainerBalancerConfiguration.java
+++
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/scm/container/balancer/ContainerBalancerConfiguration.java
@@ -485,6 +485,7 @@ public String toString() {
"%-50s %s%n" +
"%-50s %s%n" +
"%-50s %s%n" +
+ "%-50s %s%n" +
"%-50s %s%n", "Key", "Value", "Threshold",
threshold, "Max Datanodes to Involve per Iteration(percent)",
maxDatanodesPercentageToInvolvePerIteration,
diff --git
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/tracing/TracingUtil.java
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/tracing/TracingUtil.java
index 3684775d019..810555ca3e4 100644
---
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/tracing/TracingUtil.java
+++
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/tracing/TracingUtil.java
@@ -518,9 +518,11 @@ public static TraceCloseable createActivatedSpan(String
spanName) {
return createActivatedSpan(spanName, SpanKind.INTERNAL);
}
+ @SuppressWarnings("MustBeClosedChecker")
public static TraceCloseable createActivatedSpan(String spanName, SpanKind
spanKind) {
Span span = buildSpan(spanName, spanKind);
Scope scope = span.makeCurrent();
+ // The returned TraceCloseable closes the Scope and ends the Span.
return () -> {
scope.close();
span.end();
@@ -616,6 +618,7 @@ public String get(Function<String, String> carrier, String
key) {
}
}
+ @SuppressWarnings("MustBeClosedChecker")
public static TraceCloseable createActivatedSpanFromW3cHttpHeaders(
String spanName, Function<String, String> getHeader, ConfigurationSource
conf) {
if (conf == null || !isTracingActive(conf)) {
@@ -639,6 +642,7 @@ public static TraceCloseable
createActivatedSpanFromW3cHttpHeaders(
Scope scope = span.makeCurrent();
+ // The returned TraceCloseable closes the Scope and ends the Span.
return () -> {
scope.close();
span.end();
diff --git
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/utils/ContainerCache.java
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/utils/ContainerCache.java
index 6fa6e1f10ec..ea0c9cc1e3a 100644
---
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/utils/ContainerCache.java
+++
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/utils/ContainerCache.java
@@ -91,7 +91,7 @@ public void shutdownCache() {
while (iterator.hasNext()) {
iterator.next();
ReferenceCountedDB db = (ReferenceCountedDB) iterator.getValue();
- Preconditions.checkArgument(cleanupDb(db), "refCount:",
+ Preconditions.checkArgument(cleanupDb(db), "refCount: %s",
db.getReferenceCount());
}
// reset the cache
@@ -203,7 +203,7 @@ public void removeDB(String containerDBPath) {
if (db != null) {
boolean cleaned = cleanupDb(db);
if (!db.isClosed()) {
- Preconditions.checkArgument(cleaned, "refCount:",
+ Preconditions.checkArgument(cleaned, "refCount: %s",
db.getReferenceCount());
}
}
diff --git
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/utils/ReferenceCountedDB.java
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/utils/ReferenceCountedDB.java
index f32184421c7..046648a0d14 100644
---
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/utils/ReferenceCountedDB.java
+++
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/utils/ReferenceCountedDB.java
@@ -56,7 +56,7 @@ public void incrementReference() {
public void decrementReference() {
int refCount = this.referenceCount.decrementAndGet();
- Preconditions.checkArgument(refCount >= 0, "refCount:", refCount);
+ Preconditions.checkArgument(refCount >= 0, "refCount: %s", refCount);
if (LOG.isTraceEnabled()) {
LOG.trace("DecRef {} to refCnt {}, stackTrace: {}", getContainerDBPath(),
referenceCount.get(), ExceptionUtils.getStackTrace(new Throwable()));
diff --git
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/protocolPB/SCMSecurityProtocolClientSideTranslatorPB.java
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/protocolPB/SCMSecurityProtocolClientSideTranslatorPB.java
index 9b08f306701..2bf06e86d24 100644
---
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/protocolPB/SCMSecurityProtocolClientSideTranslatorPB.java
+++
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/protocolPB/SCMSecurityProtocolClientSideTranslatorPB.java
@@ -110,7 +110,10 @@ private SCMSecurityResponse
handleError(SCMSecurityResponse resp)
throws SCMSecurityException {
if (resp.getStatus() != SCMSecurityProtocolProtos.Status.OK) {
throw new SCMSecurityException(resp.getMessage(),
- SCMSecurityException.ErrorCode.values()[resp.getStatus().ordinal()]);
+ // The protocol status was introduced with a longer name than the
existing error code.
+ resp.getStatus() ==
SCMSecurityProtocolProtos.Status.GET_ROOT_CA_CERTIFICATE_FAILED
+ ? SCMSecurityException.ErrorCode.GET_ROOT_CA_CERT_FAILED
+ :
SCMSecurityException.ErrorCode.valueOf(resp.getStatus().name()));
}
return resp;
}
diff --git
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/protocolPB/SecretKeyProtocolClientSideTranslatorPB.java
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/protocolPB/SecretKeyProtocolClientSideTranslatorPB.java
index add4da85317..317c8344617 100644
---
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/protocolPB/SecretKeyProtocolClientSideTranslatorPB.java
+++
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/protocolPB/SecretKeyProtocolClientSideTranslatorPB.java
@@ -98,7 +98,7 @@ private SCMSecretKeyResponse handleError(SCMSecretKeyResponse
resp)
throws SCMSecretKeyException {
if (resp.getStatus() != SCMSecretKeyProtocolProtos.Status.OK) {
throw new SCMSecretKeyException(resp.getMessage(),
-
SCMSecretKeyException.ErrorCode.values()[resp.getStatus().ordinal()]);
+ SCMSecretKeyException.ErrorCode.valueOf(resp.getStatus().name()));
}
return resp;
}
diff --git
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/scm/net/InnerNodeImpl.java
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/scm/net/InnerNodeImpl.java
index c38a8800b5d..7b523a3115a 100644
---
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/scm/net/InnerNodeImpl.java
+++
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/scm/net/InnerNodeImpl.java
@@ -481,8 +481,6 @@ public HddsProtos.NetworkNode toProtobuf(
}
}
}
- innerNode.build();
-
HddsProtos.NetworkNode networkNode =
HddsProtos.NetworkNode.newBuilder()
.setInnerNode(innerNode).build();
diff --git
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/scm/protocolPB/ScmBlockLocationProtocolClientSideTranslatorPB.java
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/scm/protocolPB/ScmBlockLocationProtocolClientSideTranslatorPB.java
index 717b6db2c93..297b0062c19 100644
---
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/scm/protocolPB/ScmBlockLocationProtocolClientSideTranslatorPB.java
+++
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/scm/protocolPB/ScmBlockLocationProtocolClientSideTranslatorPB.java
@@ -151,7 +151,7 @@ private SCMBlockLocationResponse
handleError(SCMBlockLocationResponse resp)
throws SCMException {
if (resp.getStatus() != OK) {
throw new SCMException(resp.getMessage(),
- SCMException.ResultCodes.values()[resp.getStatus().ordinal()]);
+ SCMException.ResultCodes.valueOf(resp.getStatus().name()));
}
return resp;
}
diff --git
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/security/x509/certificate/client/SCMCertificateClient.java
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/security/x509/certificate/client/SCMCertificateClient.java
index 64c16ba2823..9df7443dd3e 100644
---
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/security/x509/certificate/client/SCMCertificateClient.java
+++
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/security/x509/certificate/client/SCMCertificateClient.java
@@ -386,7 +386,7 @@ public CertificateServer initializeRootCertificateServer(
SecurityConfig config, CertificateStore scmCertStore,
BigInteger rootCertId, PKIProfile pkiProfile, String component)
throws IOException {
- String subject = String.format(SCM_ROOT_CA_PREFIX, rootCertId) +
+ String subject = SCM_ROOT_CA_PREFIX +
InetAddress.getLocalHost().getHostName();
DefaultCAServer rootCAServer = new DefaultCAServer(subject,
diff --git
a/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/scm/exceptions/TestSCMExceptionResultCodes.java
b/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/scm/exceptions/TestSCMExceptionResultCodes.java
index 269ab295aa3..436036941e6 100644
---
a/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/scm/exceptions/TestSCMExceptionResultCodes.java
+++
b/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/scm/exceptions/TestSCMExceptionResultCodes.java
@@ -40,10 +40,9 @@ public void codeMapping() {
assertEquals(codeValue.name(), protoBufValue.name(),
String.format("Protobuf/Enum constant name mismatch %s %s",
codeValue, protoBufValue));
- ResultCodes converted = ResultCodes.values()[protoBufValue.ordinal()];
+ ResultCodes converted = ResultCodes.valueOf(protoBufValue.name());
assertEquals(codeValue, converted);
}
}
}
-
diff --git
a/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/scm/exceptions/TestSCMExceptionResultCodes.java
b/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/security/exception/TestSCMSecurityExceptionErrorCodes.java
similarity index 50%
copy from
hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/scm/exceptions/TestSCMExceptionResultCodes.java
copy to
hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/security/exception/TestSCMSecurityExceptionErrorCodes.java
index 269ab295aa3..5fa4a89ba24 100644
---
a/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/scm/exceptions/TestSCMExceptionResultCodes.java
+++
b/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/security/exception/TestSCMSecurityExceptionErrorCodes.java
@@ -15,35 +15,31 @@
* limitations under the License.
*/
-package org.apache.hadoop.hdds.scm.exceptions;
+package org.apache.hadoop.hdds.security.exception;
import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
-import
org.apache.hadoop.hdds.protocol.proto.ScmBlockLocationProtocolProtos.Status;
-import org.apache.hadoop.hdds.scm.exceptions.SCMException.ResultCodes;
+import org.apache.hadoop.hdds.protocol.proto.SCMSecurityProtocolProtos.Status;
+import
org.apache.hadoop.hdds.security.exception.SCMSecurityException.ErrorCode;
import org.junit.jupiter.api.Test;
/**
- * Test Result code mappping between SCMException and the protobuf definitions.
+ * Test error code mapping between SCM security protocol and exception
definitions.
*/
-public class TestSCMExceptionResultCodes {
+public class TestSCMSecurityExceptionErrorCodes {
@Test
public void codeMapping() {
- // ResultCode = SCMException definition
- // Status = protobuf definition
- assertEquals(ResultCodes.values().length,
- Status.values().length);
- for (int i = 0; i < ResultCodes.values().length; i++) {
- ResultCodes codeValue = ResultCodes.values()[i];
- Status protoBufValue = Status.values()[i];
- assertEquals(codeValue.name(), protoBufValue.name(),
- String.format("Protobuf/Enum constant name mismatch %s %s",
- codeValue, protoBufValue));
- ResultCodes converted = ResultCodes.values()[protoBufValue.ordinal()];
- assertEquals(codeValue, converted);
+ for (Status status : Status.values()) {
+ if (status != Status.GET_ROOT_CA_CERTIFICATE_FAILED
+ && status != Status.REVOKE_CERTIFICATE_FAILED) {
+ assertEquals(status.name(), ErrorCode.valueOf(status.name()).name());
+ }
}
+ assertEquals(ErrorCode.GET_ROOT_CA_CERT_FAILED,
+ ErrorCode.valueOf("GET_ROOT_CA_CERT_FAILED"));
+ assertThrows(IllegalArgumentException.class,
+ () -> ErrorCode.valueOf(Status.REVOKE_CERTIFICATE_FAILED.name()));
}
-
}
-
diff --git
a/hadoop-hdds/rocksdb-checkpoint-differ/src/main/java/org/apache/ozone/rocksdiff/CompactionDag.java
b/hadoop-hdds/rocksdb-checkpoint-differ/src/main/java/org/apache/ozone/rocksdiff/CompactionDag.java
index a7d78d16a86..3f5cbd42f50 100644
---
a/hadoop-hdds/rocksdb-checkpoint-differ/src/main/java/org/apache/ozone/rocksdiff/CompactionDag.java
+++
b/hadoop-hdds/rocksdb-checkpoint-differ/src/main/java/org/apache/ozone/rocksdiff/CompactionDag.java
@@ -83,7 +83,7 @@ public Set<String> pruneNodesFromDag(Set<CompactionNode>
nodesToRemove) {
Set<String> sstFilesPruned = pruneForwardDag(forwardCompactionDAG,
nodesToRemove);
// Remove SST file nodes from compactionNodeMap too,
// since those nodes won't be needed after clean up.
- nodesToRemove.forEach(compactionNodeMap::remove);
+ nodesToRemove.forEach(node ->
compactionNodeMap.remove(node.getFileName()));
return sstFilesPruned;
}
diff --git
a/hadoop-hdds/rocksdb-checkpoint-differ/src/test/java/org/apache/ozone/rocksdiff/TestCompactionDag.java
b/hadoop-hdds/rocksdb-checkpoint-differ/src/test/java/org/apache/ozone/rocksdiff/TestCompactionDag.java
index 2fde23bb376..023b3886487 100644
---
a/hadoop-hdds/rocksdb-checkpoint-differ/src/test/java/org/apache/ozone/rocksdiff/TestCompactionDag.java
+++
b/hadoop-hdds/rocksdb-checkpoint-differ/src/test/java/org/apache/ozone/rocksdiff/TestCompactionDag.java
@@ -68,11 +68,13 @@
import org.apache.hadoop.hdds.utils.db.managed.ManagedDBOptions;
import org.apache.hadoop.hdds.utils.db.managed.ManagedRocksDB;
import org.apache.hadoop.hdds.utils.db.managed.ManagedRocksIterator;
+import org.apache.ozone.compaction.log.CompactionFileInfo;
import org.apache.ozone.compaction.log.CompactionLogEntry;
import org.apache.ozone.test.GenericTestUtils;
import org.apache.ratis.util.UncheckedAutoCloseable;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
@@ -438,6 +440,23 @@ public void testPruneForwardDag(String description,
assertEquals(actualFileNodesRemoved, expectedFileNodesRemoved);
}
+ @Test
+ public void testPruneNodesRemovesNodesFromCompactionMap() {
+ CompactionDag compactionDag = new CompactionDag();
+ CompactionFileInfo inputFile =
+ new CompactionFileInfo("input", "a", "b", "keyTable");
+ CompactionFileInfo outputFile =
+ new CompactionFileInfo("output", "a", "b", "keyTable");
+ compactionDag.populateCompactionDAG(
+ Collections.singletonList(inputFile),
Collections.singletonList(outputFile), 1L);
+
+ compactionDag.pruneNodesFromDag(
+ Collections.singleton(compactionDag.getCompactionNode("input")));
+
+ assertFalse(compactionDag.getCompactionMap().containsKey("input"));
+ assertTrue(compactionDag.getCompactionMap().containsKey("output"));
+ }
+
@SuppressWarnings("methodlength")
private static Stream<Arguments> compactionDagPruningScenarios() {
long currentTimeMillis = System.currentTimeMillis();
diff --git
a/hadoop-hdds/rocksdb-checkpoint-differ/src/test/java/org/apache/ozone/rocksdiff/TestRocksDBCheckpointDiffer.java
b/hadoop-hdds/rocksdb-checkpoint-differ/src/test/java/org/apache/ozone/rocksdiff/TestRocksDBCheckpointDiffer.java
index 5c98e190669..fff123043e9 100644
---
a/hadoop-hdds/rocksdb-checkpoint-differ/src/test/java/org/apache/ozone/rocksdiff/TestRocksDBCheckpointDiffer.java
+++
b/hadoop-hdds/rocksdb-checkpoint-differ/src/test/java/org/apache/ozone/rocksdiff/TestRocksDBCheckpointDiffer.java
@@ -251,34 +251,22 @@ public class TestRocksDBCheckpointDiffer {
);
private static TablePrefixInfo columnFamilyToPrefixMap1 =
- new TablePrefixInfo(new HashMap<String, String>() {
- {
- put("keyTable", "/volume/bucket1/");
- // Simply using bucketName instead of ID for the test.
- put("directoryTable", "/volume/bucket1/");
- put("fileTable", "/volume/bucket1/");
- }
- });
+ new TablePrefixInfo(ImmutableMap.of(
+ "keyTable", "/volume/bucket1/",
+ "directoryTable", "/volume/bucket1/",
+ "fileTable", "/volume/bucket1/"));
private static TablePrefixInfo columnFamilyToPrefixMap2 =
- new TablePrefixInfo(new HashMap<String, String>() {
- {
- put("keyTable", "/volume/bucket2/");
- // Simply using bucketName instead of ID for the test.
- put("directoryTable", "/volume/bucket2/");
- put("fileTable", "/volume/bucket2/");
- }
- });
+ new TablePrefixInfo(ImmutableMap.of(
+ "keyTable", "/volume/bucket2/",
+ "directoryTable", "/volume/bucket2/",
+ "fileTable", "/volume/bucket2/"));
private static TablePrefixInfo columnFamilyToPrefixMap3 =
- new TablePrefixInfo(new HashMap<String, String>() {
- {
- put("keyTable", "/volume/bucket3/");
- // Simply using bucketName instead of ID for the test.
- put("directoryTable", "/volume/bucket3/");
- put("fileTable", "/volume/bucket3/");
- }
- });
+ new TablePrefixInfo(ImmutableMap.of(
+ "keyTable", "/volume/bucket3/",
+ "directoryTable", "/volume/bucket3/",
+ "fileTable", "/volume/bucket3/"));
private static final int NUM_ROW = 250000;
private static final int SNAPSHOT_EVERY_SO_MANY_KEYS = 49999;
@@ -820,19 +808,19 @@ private static Stream<Arguments>
casesGetSSTDiffListWithoutDB() {
Arguments.of("Test 13: Compaction log to test filtering logic based on
range and column family",
null,
getPrunedCompactionEntries(false,
- new HashMap<String, SstFileInfo>() {{
- put("1", new SstFileInfo("1", "a", "c", "col1"));
- put("3", new SstFileInfo("3", "a", "d", "col2"));
- put("13", new SstFileInfo("13", "a", "c", "col13"));
- put("14", new SstFileInfo("14", "a", "c", "col1"));
- put("2", new SstFileInfo("2", "a", "c", "col1"));
- put("4", new SstFileInfo("4", "a", "b", "col1"));
- put("5", new SstFileInfo("5", "b", "b", "col1"));
- put("10", new SstFileInfo("10", "a", "b", "col1"));
- put("8", new SstFileInfo("8", "a", "b", "col1"));
- put("6", new SstFileInfo("6", "a", "z", "col13"));
- put("7", new SstFileInfo("7", "a", "z", "col13"));
- }}),
+ ImmutableMap.<String, SstFileInfo>builder()
+ .put("1", new SstFileInfo("1", "a", "c", "col1"))
+ .put("3", new SstFileInfo("3", "a", "d", "col2"))
+ .put("13", new SstFileInfo("13", "a", "c", "col13"))
+ .put("14", new SstFileInfo("14", "a", "c", "col1"))
+ .put("2", new SstFileInfo("2", "a", "c", "col1"))
+ .put("4", new SstFileInfo("4", "a", "b", "col1"))
+ .put("5", new SstFileInfo("5", "b", "b", "col1"))
+ .put("10", new SstFileInfo("10", "a", "b", "col1"))
+ .put("8", new SstFileInfo("8", "a", "b", "col1"))
+ .put("6", new SstFileInfo("6", "a", "z", "col13"))
+ .put("7", new SstFileInfo("7", "a", "z", "col13"))
+ .build()),
snapshotInfo6,
snapshotInfo5,
ImmutableSet.of("10", "11", "8", "9", "12", "15"),
diff --git
a/hadoop-hdds/rocksdb-checkpoint-differ/src/test/java/org/apache/ozone/rocksdiff/TestRocksDiffUtils.java
b/hadoop-hdds/rocksdb-checkpoint-differ/src/test/java/org/apache/ozone/rocksdiff/TestRocksDiffUtils.java
index 08ff90ab6cc..e276c728fdd 100644
---
a/hadoop-hdds/rocksdb-checkpoint-differ/src/test/java/org/apache/ozone/rocksdiff/TestRocksDiffUtils.java
+++
b/hadoop-hdds/rocksdb-checkpoint-differ/src/test/java/org/apache/ozone/rocksdiff/TestRocksDiffUtils.java
@@ -17,7 +17,6 @@
package org.apache.ozone.rocksdiff;
-import static
org.apache.hadoop.hdds.StringUtils.getLexicographicallyHigherString;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.params.provider.Arguments.arguments;
@@ -74,10 +73,10 @@ public void testFilterFunction() {
public static Stream<Arguments> values() {
return Stream.of(
- arguments("validColumnFamily", "validColumnFamily", "a", "d", "e",
"g"),
- arguments("validColumnFamily", "validColumnFamily", "e", "g", "a",
"d"),
- arguments("validColumnFamily", "validColumnFamily", "b", "b", "e",
"g"),
- arguments("validColumnFamily", "validColumnFamily", "a", "d", "e", "e")
+ arguments("validColumnFamily", "invalidColumnFamily", "a", "d", "e",
"g"),
+ arguments("validColumnFamily", "invalidColumnFamily", "e", "g", "a",
"d"),
+ arguments("validColumnFamily", "invalidColumnFamily", "b", "b", "e",
"g"),
+ arguments("validColumnFamily", "invalidColumnFamily", "a", "d", "e",
"e")
);
}
@@ -97,6 +96,9 @@ validSstFile, new SstFileInfo(validSstFile,
validSSTFileStartRange, validSSTFile
invalidSSTFileEndRange, invalidColumnFamilyName), untrackedSstFile,
new SstFileInfo(untrackedSstFile, null, null, null));
Map<String, SstFileInfo> inputSstFiles = new HashMap<>();
+ Map<String, String> prefixes = new HashMap<>();
+ prefixes.put(invalidColumnFamilyName, invalidSSTFileEndRange + "z");
+ prefixes.put(validSSTColumnFamilyName, expectedPrefix);
List<Set<String>> tablesToLookupSet =
Arrays.asList(ImmutableSet.of(validSSTColumnFamilyName),
ImmutableSet.of(invalidColumnFamilyName),
ImmutableSet.of(validSSTColumnFamilyName, invalidColumnFamilyName),
Collections.emptySet());
@@ -105,11 +107,7 @@ validSstFile, new SstFileInfo(validSstFile,
validSSTFileStartRange, validSSTFile
inputSstFiles.putAll(sstFile);
RocksDiffUtils.filterRelevantSstFiles(inputSstFiles,
tablesToLookup,
- new TablePrefixInfo(
- new HashMap<String, String>() {{
- put(invalidColumnFamilyName,
getLexicographicallyHigherString(invalidSSTFileEndRange));
- put(validSSTColumnFamilyName, expectedPrefix);
- }}));
+ new TablePrefixInfo(prefixes));
if (tablesToLookup.contains(validSSTColumnFamilyName)) {
Assertions.assertEquals(Sets.newTreeSet(validSstFile,
untrackedSstFile), inputSstFiles.keySet(),
"Failed for " + tablesToLookup);
diff --git
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/ReplicationManagerMetrics.java
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/ReplicationManagerMetrics.java
index 84c13231b19..ccfee933c25 100644
---
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/ReplicationManagerMetrics.java
+++
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/ReplicationManagerMetrics.java
@@ -88,27 +88,28 @@ public final class ReplicationManagerMetrics implements
MetricsSource {
"Number of containers currently in the over replicated queue");
// Setup metric names and descriptions for Container Lifecycle states
- private static final Map<LifeCycleState, MetricsInfo> LIFECYCLE_STATE_METRICS
- = Collections.unmodifiableMap(
- new LinkedHashMap<LifeCycleState, MetricsInfo>() {{
- for (LifeCycleState s : LifeCycleState.values()) {
- String name = CaseFormat.UPPER_UNDERSCORE
- .to(CaseFormat.UPPER_CAMEL, s.toString());
- String metric = name + "Containers";
- String description = "Current count of Containers in " + name +
- " state";
- put(s, Interns.info(metric, description));
- }
- }});
+ private static final Map<LifeCycleState, MetricsInfo>
LIFECYCLE_STATE_METRICS;
// Setup metric names and descriptions for
private static final Map<ContainerHealthState, MetricsInfo>
- CONTAINER_HEALTH_STATE_METRICS = Collections.unmodifiableMap(
- new LinkedHashMap<ContainerHealthState, MetricsInfo>() {{
- for (ContainerHealthState s : ContainerHealthState.values()) {
- put(s, Interns.info(s.getMetricName(), s.getDescription()));
- }
- }});
+ CONTAINER_HEALTH_STATE_METRICS;
+
+ static {
+ Map<LifeCycleState, MetricsInfo> lifecycleStateMetrics = new
LinkedHashMap<>();
+ for (LifeCycleState state : LifeCycleState.values()) {
+ String name = CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL,
state.toString());
+ String metric = name + "Containers";
+ String description = "Current count of Containers in " + name + " state";
+ lifecycleStateMetrics.put(state, Interns.info(metric, description));
+ }
+ LIFECYCLE_STATE_METRICS =
Collections.unmodifiableMap(lifecycleStateMetrics);
+
+ Map<ContainerHealthState, MetricsInfo> containerHealthStateMetrics = new
LinkedHashMap<>();
+ for (ContainerHealthState state : ContainerHealthState.values()) {
+ containerHealthStateMetrics.put(state,
Interns.info(state.getMetricName(), state.getDescription()));
+ }
+ CONTAINER_HEALTH_STATE_METRICS =
Collections.unmodifiableMap(containerHealthStateMetrics);
+ }
@Metric("Number of replication commands sent.")
private MutableCounterLong replicationCmdsSentTotal;
diff --git
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/server/TestSCMContainerMetrics.java
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/server/TestSCMContainerMetrics.java
index dea3d514c9c..4ab807e251f 100644
---
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/server/TestSCMContainerMetrics.java
+++
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/server/TestSCMContainerMetrics.java
@@ -25,7 +25,7 @@
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-import java.util.HashMap;
+import com.google.common.collect.ImmutableMap;
import java.util.Map;
import org.apache.hadoop.hdds.protocol.proto.HddsProtos;
import org.apache.hadoop.metrics2.MetricsCollector;
@@ -42,16 +42,15 @@ public class TestSCMContainerMetrics {
public void testSCMContainerMetrics() {
SCMMXBean scmmxBean = mock(SCMMXBean.class);
- Map<String, Integer> stateInfo = new HashMap<String, Integer>() {{
- put(HddsProtos.LifeCycleState.OPEN.toString(), 2);
- put(HddsProtos.LifeCycleState.CLOSING.toString(), 3);
- put(HddsProtos.LifeCycleState.QUASI_CLOSED.toString(), 4);
- put(HddsProtos.LifeCycleState.CLOSED.toString(), 5);
- put(HddsProtos.LifeCycleState.DELETING.toString(), 6);
- put(HddsProtos.LifeCycleState.DELETED.toString(), 7);
- put(HddsProtos.LifeCycleState.RECOVERING.toString(), 8);
- }};
-
+ Map<String, Integer> stateInfo = ImmutableMap.<String, Integer>builder()
+ .put(HddsProtos.LifeCycleState.OPEN.toString(), 2)
+ .put(HddsProtos.LifeCycleState.CLOSING.toString(), 3)
+ .put(HddsProtos.LifeCycleState.QUASI_CLOSED.toString(), 4)
+ .put(HddsProtos.LifeCycleState.CLOSED.toString(), 5)
+ .put(HddsProtos.LifeCycleState.DELETING.toString(), 6)
+ .put(HddsProtos.LifeCycleState.DELETED.toString(), 7)
+ .put(HddsProtos.LifeCycleState.RECOVERING.toString(), 8)
+ .build();
when(scmmxBean.getContainerStateCount()).thenReturn(stateInfo);
diff --git
a/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/ozone/admin/om/GetServiceRolesSubcommand.java
b/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/ozone/admin/om/GetServiceRolesSubcommand.java
index 9b4da46e880..eefb49402ba 100644
---
a/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/ozone/admin/om/GetServiceRolesSubcommand.java
+++
b/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/ozone/admin/om/GetServiceRolesSubcommand.java
@@ -17,6 +17,7 @@
package org.apache.hadoop.ozone.admin.om;
+import com.google.common.collect.ImmutableMap;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
@@ -108,10 +109,9 @@ private void printOmServerRolesAsJson(List<ServiceInfo>
serviceList)
serviceInfo.getNodeType() == HddsProtos.NodeType.OM) {
Map<String, Map<String, String>> omService = new HashMap<>();
omService.put(omRoleInfo.getNodeId(),
- new HashMap<String, String>() {{
- put("serverRole", omRoleInfo.getServerRole());
- put("hostname", serviceInfo.getHostname());
- }});
+ ImmutableMap.of(
+ "serverRole", omRoleInfo.getServerRole(),
+ "hostname", serviceInfo.getHostname()));
omServiceList.add(omService);
}
}
diff --git
a/hadoop-ozone/cli-debug/src/test/java/org/apache/ozone/TestPrintableGraph.java
b/hadoop-ozone/cli-debug/src/test/java/org/apache/ozone/TestPrintableGraph.java
index fb7dbe31999..3e4c2d227f4 100644
---
a/hadoop-ozone/cli-debug/src/test/java/org/apache/ozone/TestPrintableGraph.java
+++
b/hadoop-ozone/cli-debug/src/test/java/org/apache/ozone/TestPrintableGraph.java
@@ -19,8 +19,8 @@
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
-import static org.mockito.Mockito.when;
+import com.google.common.graph.GraphBuilder;
import com.google.common.graph.MutableGraph;
import java.io.IOException;
import java.nio.file.Files;
@@ -29,24 +29,19 @@
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.apache.ozone.rocksdiff.CompactionNode;
-import org.junit.jupiter.api.extension.ExtendWith;
import org.junit.jupiter.api.io.TempDir;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.EnumSource;
-import org.mockito.Mock;
-import org.mockito.junit.jupiter.MockitoExtension;
/**
* This class is used for testing the PrintableGraph class.
* It contains methods to test the generation and printing of graphs with
different types.
*/
-@ExtendWith(MockitoExtension.class)
public class TestPrintableGraph {
@TempDir
private Path dir;
- @Mock
- private MutableGraph<CompactionNode> mutableGraph;
+ private final MutableGraph<CompactionNode> mutableGraph =
GraphBuilder.directed().build();
@ParameterizedTest
@EnumSource(PrintableGraph.GraphType.class)
@@ -68,7 +63,7 @@ void testPrintActualGraph(PrintableGraph.GraphType graphType)
throws IOException
new CompactionNode("fileName3", 300, null, "endKey3", "columnFamily3"),
new CompactionNode("fileName4", 400, "startKey4", null,
"columnFamily4")
).collect(Collectors.toSet());
- when(mutableGraph.nodes()).thenReturn(nodes);
+ nodes.forEach(mutableGraph::addNode);
PrintableGraph graph = new PrintableGraph(mutableGraph, graphType);
graph.generateImage(dir.resolve(graphType.name()).toString());
diff --git
a/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/io/ECKeyOutputStream.java
b/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/io/ECKeyOutputStream.java
index d757256aeef..91055a3962f 100644
---
a/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/io/ECKeyOutputStream.java
+++
b/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/io/ECKeyOutputStream.java
@@ -283,7 +283,7 @@ private void generateParityCells() throws IOException {
}
for (int i = firstNonFullIndex + 1; i < dataBuffers.length; i++) {
Preconditions.checkState(dataBuffers[i].position() == 0,
- "Illegal stripe state: cell {} is not full while cell {} has data",
+ "Illegal stripe state: cell %s is not full while cell %s has data",
firstNonFullIndex, i);
}
diff --git
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/helpers/OmRangerSyncArgs.java
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/helpers/OmRangerSyncArgs.java
index 8d91ec3c04b..7bfb8c8febc 100644
---
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/helpers/OmRangerSyncArgs.java
+++
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/helpers/OmRangerSyncArgs.java
@@ -17,8 +17,6 @@
package org.apache.hadoop.ozone.om.helpers;
-import java.util.Objects;
-
/**
* This class is used for storing Ranger Sync request args.
*/
@@ -59,7 +57,6 @@ public Builder setNewSyncServiceVersion(long version) {
}
public OmRangerSyncArgs build() {
- Objects.requireNonNull(newServiceVersion, "newServiceVersion == null");
return new OmRangerSyncArgs(newServiceVersion);
}
}
diff --git
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/protocolPB/OzoneManagerProtocolClientSideTranslatorPB.java
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/protocolPB/OzoneManagerProtocolClientSideTranslatorPB.java
index bce59dd6d10..79f2d3900c2 100644
---
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/protocolPB/OzoneManagerProtocolClientSideTranslatorPB.java
+++
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/protocolPB/OzoneManagerProtocolClientSideTranslatorPB.java
@@ -798,7 +798,7 @@ public OpenKeySession openKey(OmKeyArgs args) throws
IOException {
private OMResponse handleError(OMResponse resp) throws OMException {
if (resp.getStatus() != OK) {
throw new OMException(resp.getMessage(),
- ResultCodes.values()[resp.getStatus().ordinal()]);
+ ResultCodes.valueOf(resp.getStatus().name()));
}
return resp;
}
diff --git
a/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/om/exceptions/TestResultCodes.java
b/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/om/exceptions/TestResultCodes.java
index 0af741a081e..e0807c165b0 100644
---
a/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/om/exceptions/TestResultCodes.java
+++
b/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/om/exceptions/TestResultCodes.java
@@ -39,7 +39,7 @@ public void codeMapping() {
assertTrue(sameName(codeValue.name(), protoBufValue.name()),
String.format("Protobuf/Enum constant name mismatch %s %s",
codeValue,
protoBufValue));
- ResultCodes converted = ResultCodes.values()[protoBufValue.ordinal()];
+ ResultCodes converted = ResultCodes.valueOf(protoBufValue.name());
assertEquals(codeValue, converted);
}
}
diff --git
a/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/om/ha/TestHadoopRpcOMFollowerReadFailoverProxyProvider.java
b/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/om/ha/TestHadoopRpcOMFollowerReadFailoverProxyProvider.java
index d3275d22be6..403dfe8ef3c 100644
---
a/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/om/ha/TestHadoopRpcOMFollowerReadFailoverProxyProvider.java
+++
b/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/om/ha/TestHadoopRpcOMFollowerReadFailoverProxyProvider.java
@@ -26,6 +26,7 @@
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertThrows;
@@ -306,8 +307,8 @@ void testObjectMethodsOnProxy() throws Exception {
setupProxyProvider(2);
assertNotNull(retryProxy.toString());
- retryProxy.hashCode();
- retryProxy.equals(retryProxy);
+ assertEquals(retryProxy.hashCode(), retryProxy.hashCode());
+ assertNotEquals((Object) retryProxy, new Object());
}
@Test
diff --git
a/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/om/protocolPB/grpc/TestClientAddressClientInterceptor.java
b/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/om/protocolPB/grpc/TestClientAddressClientInterceptor.java
index 0a862c2eff0..eba5950c52e 100644
---
a/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/om/protocolPB/grpc/TestClientAddressClientInterceptor.java
+++
b/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/om/protocolPB/grpc/TestClientAddressClientInterceptor.java
@@ -39,6 +39,7 @@
public class TestClientAddressClientInterceptor {
@Test
+ @SuppressWarnings("CheckReturnValue")
public void testClientAddressEntriesInRequestHeaders() {
try (MockedStatic<Context> grpcContextStaticMock =
mockStatic(Context.class)) {
diff --git
a/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/om/protocolPB/grpc/TestClientAddressServerInterceptor.java
b/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/om/protocolPB/grpc/TestClientAddressServerInterceptor.java
index 240c1db6520..fba6ad21ea7 100644
---
a/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/om/protocolPB/grpc/TestClientAddressServerInterceptor.java
+++
b/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/om/protocolPB/grpc/TestClientAddressServerInterceptor.java
@@ -66,11 +66,15 @@ public void testClientAddressEntriesInHeaders() {
}
);
Context context = contextArgumentCaptor.getValue();
- context.attach();
- assertEquals("host.example.com",
- GrpcClientConstants.CLIENT_HOSTNAME_CTX_KEY.get());
- assertEquals("173.56.23.4",
- GrpcClientConstants.CLIENT_IP_ADDRESS_CTX_KEY.get());
+ Context previous = context.attach();
+ try {
+ assertEquals("host.example.com",
+ GrpcClientConstants.CLIENT_HOSTNAME_CTX_KEY.get());
+ assertEquals("173.56.23.4",
+ GrpcClientConstants.CLIENT_IP_ADDRESS_CTX_KEY.get());
+ } finally {
+ context.detach(previous);
+ }
}
}
diff --git a/hadoop-ozone/dev-support/checks/bats.sh
b/hadoop-ozone/dev-support/checks/bats.sh
index 41f41723ecd..caffc8f2e2a 100755
--- a/hadoop-ozone/dev-support/checks/bats.sh
+++ b/hadoop-ozone/dev-support/checks/bats.sh
@@ -32,6 +32,7 @@ rm -f "${REPORT_DIR}/output.log"
find * \( \
-path '*/src/test/shell/*' -name '*.bats' \
+ -or -path dev-support/ci/errorprone.bats \
-or -path dev-support/ci/selective_ci_checks.bats \
-or -path dev-support/ci/pr_title_check.bats \
-or -path dev-support/ci/find_test_class_project.bats \
diff --git a/hadoop-ozone/dev-support/checks/errorprone.sh
b/hadoop-ozone/dev-support/checks/errorprone.sh
new file mode 100755
index 00000000000..5d9fd362d54
--- /dev/null
+++ b/hadoop-ozone/dev-support/checks/errorprone.sh
@@ -0,0 +1,53 @@
+#!/usr/bin/env bash
+# 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.
+
+#checks:basic
+
+set -u -o pipefail
+
+DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
+cd "$DIR/../../.." || exit 1
+
+REPORT_DIR=${OUTPUT_DIR:-"$DIR/../../../target/errorprone"}
+REPORT_FILE="$REPORT_DIR/summary.txt"
+DIAGNOSTIC_FILE="$REPORT_DIR/diagnostics.txt"
+OUTPUT_LOG=$(mktemp)
+
+MAVEN_OPTIONS='-B -fae --no-transfer-progress -Perrorprone -DskipDocs
-DskipRecon -DskipTests'
+MAVEN_DIAGNOSTIC_PATTERN='^\[(ERROR|WARNING)\] .*:\[[0-9]+,[0-9]+\] \[[^]]+\]'
+JAVAC_DIAGNOSTIC_PATTERN='^.*:[0-9]+: (error|warning): \[[^]]+\]'
+MAVEN_ERROR_PATTERN='^\[ERROR\] .*:\[[0-9]+,[0-9]+\] \[[^]]+\]'
+JAVAC_ERROR_PATTERN='^.*:[0-9]+: error: \[[^]]+\]'
+ERROR_DIAGNOSTIC_PATTERN="${MAVEN_ERROR_PATTERN}|${JAVAC_ERROR_PATTERN}"
+
+declare -i rc
+
+trap 'rm -f "$OUTPUT_LOG"' EXIT
+
+#shellcheck disable=SC2086
+mvn $MAVEN_OPTIONS clean package "$@" 2>&1 | tee "$OUTPUT_LOG"
+rc=$?
+
+mkdir -p "$REPORT_DIR"
+mv "$OUTPUT_LOG" "${REPORT_DIR}/output.log"
+trap - EXIT
+
+grep -E "${MAVEN_DIAGNOSTIC_PATTERN}|${JAVAC_DIAGNOSTIC_PATTERN}"
"${REPORT_DIR}/output.log" \
+ | awk '!seen[$0]++' > "$DIAGNOSTIC_FILE"
+
+grep -E "$ERROR_DIAGNOSTIC_PATTERN" "$DIAGNOSTIC_FILE" > "$REPORT_FILE" || true
+
+source "${DIR}/_post_process.sh"
diff --git
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/fs/contract/AbstractContractSafeModeTest.java
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/fs/contract/AbstractContractSafeModeTest.java
index ae427eb519a..a971bfdb597 100644
---
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/fs/contract/AbstractContractSafeModeTest.java
+++
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/fs/contract/AbstractContractSafeModeTest.java
@@ -45,7 +45,7 @@ public void testSafeMode() throws Throwable {
private SafeMode verifyAndGetSafeModeInstance(FileSystem fs) {
Assertions.assertThat(fs)
- .describedAs("File system %s must be an instance of %s", fs,
SafeMode.class.getClass())
+ .describedAs("File system %s must be an instance of %s", fs,
SafeMode.class)
.isInstanceOf(SafeMode.class);
return (SafeMode) fs;
}
diff --git
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/fs/ozone/TestHSync.java
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/fs/ozone/TestHSync.java
index 02fa289c023..0abae8bfa51 100644
---
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/fs/ozone/TestHSync.java
+++
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/fs/ozone/TestHSync.java
@@ -493,9 +493,14 @@ public void testHSyncOpenKeyCommitAfterExpiry() throws
Exception {
try (FSDataOutputStream os1 = fs.create(key2, true)) {
os1.write(1);
// There should be 2 key in openFileTable
- assertThat(2 == getOpenKeyInfo(BUCKET_LAYOUT).size());
- // One key will be in fileTable as hsynced
- assertThat(1 == getKeyInfo(BUCKET_LAYOUT).size());
+ assertThat(getOpenKeyInfo(BUCKET_LAYOUT))
+ .extracting(OmKeyInfo::getKeyName)
+ .contains(key1.getName(), key2.getName());
+ // key1 will be in fileTable as hsynced, but key2 will not.
+ assertThat(getKeyInfo(BUCKET_LAYOUT))
+ .extracting(OmKeyInfo::getKeyName)
+ .contains(key1.getName())
+ .doesNotContain(key2.getName());
// Resume openKeyCleanupService
openKeyCleanupService.resume();
@@ -503,8 +508,11 @@ public void testHSyncOpenKeyCommitAfterExpiry() throws
Exception {
// Key without hsync is deleted
GenericTestUtils.waitFor(() ->
getOpenKeyInfo(BUCKET_LAYOUT).isEmpty(), 1000, 12000);
- // Verify only one key is still present in fileTable
- assertThat(1 == getKeyInfo(BUCKET_LAYOUT).size());
+ // Verify key1 remains in fileTable and key2 is absent.
+ assertThat(getKeyInfo(BUCKET_LAYOUT))
+ .extracting(OmKeyInfo::getKeyName)
+ .contains(key1.getName())
+ .doesNotContain(key2.getName());
// Clean up
assertTrue(fs.delete(key1, false));
@@ -579,7 +587,9 @@ public void testHSyncOpenKeyDeletionWhileDeleteDirectory()
throws Exception {
os.write(1);
os.hsync();
// There should be 1 key in openFileTable
- assertThat(1 == getOpenKeyInfo(BUCKET_LAYOUT).size());
+ assertThat(getOpenKeyInfo(BUCKET_LAYOUT))
+ .extracting(OmKeyInfo::getKeyName)
+ .contains("dir1/dir2/hsync-key");
// Delete directory recursively
fs.delete(new Path(OZONE_ROOT + bucket.getVolumeName() +
OZONE_URI_DELIMITER +
bucket.getName() + OZONE_URI_DELIMITER + "dir1/"), true);
diff --git
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/hdds/scm/TestXceiverClientManager.java
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/hdds/scm/TestXceiverClientManager.java
index d92e896c8c4..391cfc96095 100644
---
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/hdds/scm/TestXceiverClientManager.java
+++
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/hdds/scm/TestXceiverClientManager.java
@@ -90,7 +90,7 @@ public void testCaching(boolean securityEnabled, @TempDir
Path metaDir) throws I
assertEquals(1, client1.getRefcount());
// although allowShortCircuit true when calling acquireClientForReadData,
// XceiverClientGrpc client will be allocated since short-circuit is by
default disabled.
- assertThat(client1 instanceof XceiverClientGrpc);
+ assertThat(client1).isInstanceOf(XceiverClientGrpc.class);
ContainerWithPipeline container2 = storageContainerLocationClient
.allocateContainer(
@@ -100,7 +100,7 @@ public void testCaching(boolean securityEnabled, @TempDir
Path metaDir) throws I
XceiverClientSpi client2 = clientManager
.acquireClient(container2.getPipeline());
assertEquals(1, client2.getRefcount());
- assertThat(client2 instanceof XceiverClientGrpc);
+ assertThat(client2).isInstanceOf(XceiverClientGrpc.class);
XceiverClientSpi client3 = clientManager
.acquireClient(container1.getPipeline());
diff --git
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/TestECKeyOutputStream.java
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/TestECKeyOutputStream.java
index 097a1cf84e9..d8ddc20931c 100644
---
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/TestECKeyOutputStream.java
+++
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/TestECKeyOutputStream.java
@@ -405,7 +405,7 @@ private void testMultipleChunksInSingleWriteOp(int offset,
final OzoneBucket bucket = getOzoneBucket();
String keyName =
String.format("testMultipleChunksInSingleWriteOpOffset" +
- "%dBufferChunks%dNumChunks", offset, bufferChunks,
+ "%dBufferChunks%dNumChunks%d", offset, bufferChunks,
numChunks);
try (OzoneOutputStream out = bucket.createKey(keyName, 4096,
new ECReplicationConfig(3, 2, ECReplicationConfig.EcCodec.RS,
diff --git
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/container/common/statemachine/commandhandler/TestBlockDeletion.java
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/container/common/statemachine/commandhandler/TestBlockDeletion.java
index 4b716a56500..00aef86e3bb 100644
---
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/container/common/statemachine/commandhandler/TestBlockDeletion.java
+++
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/container/common/statemachine/commandhandler/TestBlockDeletion.java
@@ -676,9 +676,9 @@ public void testContainerDeleteWithInvalidKeyCount()
containerStateManager.updateContainerReplica(replicaOne);
// Check replica updated with wrong keyCount
- scm.getContainerManager().getContainerReplicas(
+ assertTrue(scm.getContainerManager().getContainerReplicas(
ContainerID.valueOf(containerInfos.get(0).getContainerID()))
- .stream().anyMatch(replica -> replica.getKeyCount() == 10);
+ .stream().anyMatch(replica -> replica.getKeyCount() == 10));
// Process delete container in SCM, ensure containers gets deleted,
// even though keyCount is invalid in one of the replica
diff --git
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestAddRemoveOzoneManager.java
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestAddRemoveOzoneManager.java
index 5f5dfea4fd5..113b9d30b41 100644
---
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestAddRemoveOzoneManager.java
+++
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestAddRemoveOzoneManager.java
@@ -489,7 +489,7 @@ private void decommissionOM(String decommNodeId) throws
Exception {
// Verify decomm node is removed from the HA ring
GenericTestUtils.waitFor(() -> {
for (OzoneManager om : activeOMs) {
- if (om.getPeerNodes().contains(decommNodeId)) {
+ if (om.getPeerNodes().stream().anyMatch(node ->
node.getNodeId().equals(decommNodeId))) {
return false;
}
}
diff --git
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestObjectStoreWithFSO.java
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestObjectStoreWithFSO.java
index 025a472e9a6..3bf4f7b8aee 100644
---
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestObjectStoreWithFSO.java
+++
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestObjectStoreWithFSO.java
@@ -575,7 +575,7 @@ private void readKey(OzoneBucket ozoneBucket, String key,
int length, byte[] inp
// Read using filesystem.
String rootPath = String.format("%s://%s.%s/", OZONE_URI_SCHEME,
- bucketName, volumeName, StandardCharsets.UTF_8);
+ bucketName, volumeName);
OzoneFileSystem o3fs = (OzoneFileSystem) FileSystem.get(new URI(rootPath),
conf);
try (InputStream fsDataInputStream = o3fs.open(new Path(key))) {
diff --git
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/snapshot/TestSnapshotDirectoryCleaningService.java
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/snapshot/TestSnapshotDirectoryCleaningService.java
index d68d6f990d1..373bf51ab7b 100644
---
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/snapshot/TestSnapshotDirectoryCleaningService.java
+++
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/snapshot/TestSnapshotDirectoryCleaningService.java
@@ -25,9 +25,9 @@
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertEquals;
+import com.google.common.collect.ImmutableMap;
import java.io.IOException;
import java.util.Arrays;
-import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
@@ -235,15 +235,10 @@ public void testExclusiveSizeWithDirectoryDeepClean()
throws Exception {
long prevRunCount = directoryDeletingService.getRunCount().get();
GenericTestUtils.waitFor(() -> directoryDeletingService.getRunCount().get()
> prevRunCount + 1, 100, 10000);
- Map<String, Long> expectedSize = new HashMap<String, Long>() {{
- // /v/b/snapDir/appRoot0/parentDir0-2/childFile contribute
- // exclusive size, /v/b/snapDir/appRoot0/parentDir0-2/childFile0-4
- // are deep cleaned and hence don't contribute to size.
- put("snap1", 3L);
- // Only testKey5-9 contribute to the exclusive size
- put("snap2", 5L);
- put("snap3", 0L);
- }};
+ // /v/b/snapDir/appRoot0/parentDir0-2/childFile contribute exclusive size,
+ // /v/b/snapDir/appRoot0/parentDir0-2/childFile0-4 are deep cleaned and
hence don't contribute to size.
+ // Only testKey5-9 contribute to the exclusive size of snap2.
+ Map<String, Long> expectedSize = ImmutableMap.of("snap1", 3L, "snap2", 5L,
"snap3", 0L);
try (Table.KeyValueIterator<String, SnapshotInfo>
iterator = snapshotInfoTable.iterator()) {
diff --git
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/tools/contract/AbstractContractDistCpTest.java
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/tools/contract/AbstractContractDistCpTest.java
index 35360004c9d..4560b521fc5 100644
---
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/tools/contract/AbstractContractDistCpTest.java
+++
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/tools/contract/AbstractContractDistCpTest.java
@@ -283,7 +283,7 @@ void assertCounterInRange(Job job, Enum<?> counter, long
min, long max)
Counter c = job.getCounters().findCounter(counter);
long value = c.getValue();
String description =
- String.format("%s value %s", c.getDisplayName(), value, false);
+ String.format("%s value %s", c.getDisplayName(), value);
if (min >= 0) {
assertThat(value)
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/OMClientRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/OMClientRequest.java
index d63baf6d4d0..a3da6ab7e6e 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/OMClientRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/OMClientRequest.java
@@ -268,7 +268,7 @@ public OzoneManagerProtocolProtos.UserInfo getUserInfo()
throws IOException {
GrpcClientConstants.CLIENT_HOSTNAME_CTX_KEY.get();
if (remoteAddress != null) {
userInfo.setHostName(remoteAddress.getHostName());
- userInfo.setRemoteAddress(remoteAddress.getHostAddress()).build();
+ userInfo.setRemoteAddress(remoteAddress.getHostAddress());
} else if (grpcContextClientHostname != null
&& grpcContextClientIpAddress != null) {
userInfo.setHostName(grpcContextClientHostname);
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeysDeleteRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeysDeleteRequest.java
index 0d7ff10251d..b0d3d3c42fa 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeysDeleteRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeysDeleteRequest.java
@@ -290,7 +290,7 @@ public OMClientResponse validateAndUpdateCache(OzoneManager
ozoneManager, Execut
omResponse.setDeleteKeysResponse(
DeleteKeysResponse.newBuilder().setStatus(false)
- .setUnDeletedKeys(unDeletedKeys).build()).build();
+ .setUnDeletedKeys(unDeletedKeys).build());
omClientResponse =
new OMKeysDeleteResponse(omResponse.build(), getBucketLayout());
long endNanosDeleteKeyFailureLatencyNs = Time.monotonicNowNanos();
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/snapshot/SnapshotDiffManager.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/snapshot/SnapshotDiffManager.java
index d120973eaef..1452999bb5c 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/snapshot/SnapshotDiffManager.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/snapshot/SnapshotDiffManager.java
@@ -715,9 +715,10 @@ SnapshotDiffReportOzone createPageResponse(
final int pageSize
) throws IOException {
if (!isBlank(index)) {
-
DIFF_TYPE_STRING_MAP.values().stream().filter(index::startsWith).findFirst()
- .orElseThrow(() -> new IOException("Token " + index + " has invalid
prefix. Valid prefixes: "
- +
DIFF_TYPE_STRING_MAP.values().stream().map(String::valueOf).collect(Collectors.joining(","))));
+ if (DIFF_TYPE_STRING_MAP.values().stream().noneMatch(index::startsWith))
{
+ throw new IOException("Token " + index + " has invalid prefix. Valid
prefixes: "
+ +
DIFF_TYPE_STRING_MAP.values().stream().map(String::valueOf).collect(Collectors.joining(",")));
+ }
}
int idx;
diff --git
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/TestOMMetadataReader.java
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/TestOMMetadataReader.java
index 547ce05e09b..99b4c861c19 100644
---
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/TestOMMetadataReader.java
+++
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/TestOMMetadataReader.java
@@ -86,6 +86,7 @@ public void clearOmThreadLocals() {
}
@Test
+ @SuppressWarnings("CheckReturnValue")
public void testGetClientAddress() throws Exception {
try (MockedStatic<Server> ipcServerStaticMock = mockStatic(Server.class)) {
// given
diff --git
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/TestOMClientRequestWithUserInfo.java
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/TestOMClientRequestWithUserInfo.java
index c2666804d57..3dd695ee8ff 100644
---
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/TestOMClientRequestWithUserInfo.java
+++
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/TestOMClientRequestWithUserInfo.java
@@ -145,6 +145,7 @@ public void testUserInfoInCaseOfHadoopTransport() throws
Exception {
}
@Test
+ @SuppressWarnings("CheckReturnValue")
public void testUserInfoInCaseOfGrpcTransport() throws Exception {
OMRequest s3SignedOMRequest = createRequestWithS3Credentials("AccessId",
"Signature", "StringToSign");
diff --git
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyCreateRequest.java
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyCreateRequest.java
index 353b04656e7..60a765a5510 100644
---
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyCreateRequest.java
+++
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyCreateRequest.java
@@ -49,6 +49,7 @@
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import com.google.common.collect.ImmutableMap;
import java.io.IOException;
import java.nio.file.Path;
import java.util.ArrayList;
@@ -1214,21 +1215,15 @@ public void testKeyCreateWithFileSystemPathsEnabled(
@Test
public void testPreExecuteWithInvalidKeyPrefix() throws Exception {
- Map<String, String> invalidKeyScenarios = new HashMap<String, String>() {
- {
- put(OM_SNAPSHOT_INDICATOR + "/" + keyName,
- "Cannot create key under path reserved for snapshot: "
- + OM_SNAPSHOT_INDICATOR + OM_KEY_PREFIX);
- put(OM_SNAPSHOT_INDICATOR + "/a/" + keyName,
- "Cannot create key under path reserved for snapshot: "
- + OM_SNAPSHOT_INDICATOR + OM_KEY_PREFIX);
- put(OM_SNAPSHOT_INDICATOR + "/a/b" + keyName,
- "Cannot create key under path reserved for snapshot: "
- + OM_SNAPSHOT_INDICATOR + OM_KEY_PREFIX);
- put(OM_SNAPSHOT_INDICATOR,
- "Cannot create key with reserved name: " + OM_SNAPSHOT_INDICATOR);
- }
- };
+ Map<String, String> invalidKeyScenarios = ImmutableMap.of(
+ OM_SNAPSHOT_INDICATOR + "/" + keyName,
+ "Cannot create key under path reserved for snapshot: " +
OM_SNAPSHOT_INDICATOR + OM_KEY_PREFIX,
+ OM_SNAPSHOT_INDICATOR + "/a/" + keyName,
+ "Cannot create key under path reserved for snapshot: " +
OM_SNAPSHOT_INDICATOR + OM_KEY_PREFIX,
+ OM_SNAPSHOT_INDICATOR + "/a/b" + keyName,
+ "Cannot create key under path reserved for snapshot: " +
OM_SNAPSHOT_INDICATOR + OM_KEY_PREFIX,
+ OM_SNAPSHOT_INDICATOR,
+ "Cannot create key with reserved name: " + OM_SNAPSHOT_INDICATOR);
for (Map.Entry<String, String> entry : invalidKeyScenarios.entrySet()) {
String invalidKeyName = entry.getKey();
@@ -1332,7 +1327,7 @@ public void testAtomicRewrite(
// Retrieve the committed key info
OmKeyInfo existingKeyInfo =
omMetadataManager.getKeyTable(getBucketLayout()).get(getOzoneKey());
List<OzoneAcl> existingAcls = existingKeyInfo.getAcls();
- assertThat(existingAcls.containsAll(acls));
+ assertThat(existingAcls.containsAll(acls)).isTrue();
// Create a request with a generation which doesn't match the current key
omRequest = createKeyRequest(false, 0, 100,
diff --git
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyPurgeRequestAndResponse.java
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyPurgeRequestAndResponse.java
index 3d6a58dc1bd..ce60ee3ab6c 100644
---
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyPurgeRequestAndResponse.java
+++
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyPurgeRequestAndResponse.java
@@ -120,8 +120,6 @@ private OMRequest createPurgeKeysRequest(List<String>
deletedKeys, List<String>
if (snapshotDbKey != null) {
purgeKeysRequest.setSnapshotTableKey(snapshotDbKey);
}
- purgeKeysRequest.build();
-
return OMRequest.newBuilder()
.setPurgeKeysRequest(purgeKeysRequest)
.setCmdType(Type.PurgeKeys)
diff --git
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/snapshot/TestOmSnapshotLocalDataManager.java
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/snapshot/TestOmSnapshotLocalDataManager.java
index 9aecb7b1f28..ef081c08873 100644
---
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/snapshot/TestOmSnapshotLocalDataManager.java
+++
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/snapshot/TestOmSnapshotLocalDataManager.java
@@ -709,7 +709,8 @@ public void testNeedsDefrag(int previousVersion) throws
IOException {
}
addVersionsToLocalData(localDataManager, snapshotIds.get(1),
ImmutableMap.of(1, 3, 2, previousVersion));
try (ReadableOmSnapshotLocalDataProvider snap =
localDataManager.getOmSnapshotLocalData(snapshotIds.get(1))) {
- assertEquals(previousVersion <
snap.getPreviousSnapshotLocalData().orElse(null).getVersion(),
snap.needsDefrag());
+ assertEquals(previousVersion <
snap.getPreviousSnapshotLocalData().orElseThrow(AssertionError::new).getVersion(),
+ snap.needsDefrag());
}
}
diff --git
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/BucketEndpoint.java
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/BucketEndpoint.java
index 0eb324e41bd..dc41298a4ca 100644
---
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/BucketEndpoint.java
+++
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/BucketEndpoint.java
@@ -46,7 +46,6 @@
@Produces(MediaType.APPLICATION_JSON)
public class BucketEndpoint {
- @Inject
private ReconOMMetadataManager omMetadataManager;
@Inject
diff --git
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/VolumeEndpoint.java
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/VolumeEndpoint.java
index 8df4b2b5a44..322db29a236 100644
---
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/VolumeEndpoint.java
+++
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/VolumeEndpoint.java
@@ -45,7 +45,6 @@
@Produces(MediaType.APPLICATION_JSON)
public class VolumeEndpoint {
- @Inject
private ReconOMMetadataManager omMetadataManager;
@Inject
diff --git
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/scm/ReconContainerManager.java
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/scm/ReconContainerManager.java
index 25d8543ab27..230ed8a5f7d 100644
---
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/scm/ReconContainerManager.java
+++
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/scm/ReconContainerManager.java
@@ -328,11 +328,9 @@ public void updateContainerReplica(ContainerID containerID,
// If replica doesn't exist in in-memory map, add to DB and add to map
if (replicaLastSeenMap == null) {
// putIfAbsent to avoid TOCTOU
- replicaHistoryMap.putIfAbsent(cid,
- new ConcurrentHashMap<DatanodeID, ContainerReplicaHistory>() {{
- put(id, new ContainerReplicaHistory(id, currTime, currTime,
- bcsId, state, checksums));
- }});
+ Map<DatanodeID, ContainerReplicaHistory> newReplicaHistoryMap = new
ConcurrentHashMap<>();
+ newReplicaHistoryMap.put(id, new ContainerReplicaHistory(id, currTime,
currTime, bcsId, state, checksums));
+ replicaHistoryMap.putIfAbsent(cid, newReplicaHistoryMap);
flushToDB = true;
} else {
// ContainerID exists, update timestamp in memory
diff --git
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/ReconContainerMetadataManagerImpl.java
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/ReconContainerMetadataManagerImpl.java
index e4a43a925ef..0e7510d5777 100644
---
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/ReconContainerMetadataManagerImpl.java
+++
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/ReconContainerMetadataManagerImpl.java
@@ -513,13 +513,6 @@ private List<Pipeline> getPipelines(ContainerKeyPrefix
containerKeyPrefix)
.getSkipCache(containerKeyPrefix.getKeyPrefix());
}
List<Pipeline> pipelines = new ArrayList<>();
- if (null != omKeyInfo) {
- omKeyInfo.getKeyLocationVersions().stream().map(
- omKeyLocationInfoGroup ->
- omKeyLocationInfoGroup.createLocationList()
- .stream().map(omKeyLocationInfo -> pipelines.add(
- omKeyLocationInfo.getPipeline())));
- }
return pipelines;
}
diff --git
a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestEndpoints.java
b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestEndpoints.java
index db9301e4795..b7d2f4bf71a 100644
---
a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestEndpoints.java
+++
b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestEndpoints.java
@@ -580,7 +580,7 @@ public void setUp() throws Exception {
9L, 8L, 7L, 21L);
// Truncate global stats table before running each test
- dslContext.truncate(GLOBAL_STATS);
+ dslContext.truncate(GLOBAL_STATS).execute();
}
private void testDatanodeResponse(DatanodeMetadata datanodeMetadata)
diff --git
a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/scm/TestReconContainerManager.java
b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/scm/TestReconContainerManager.java
index 89ad99d77a3..a7faa2d64b2 100644
---
a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/scm/TestReconContainerManager.java
+++
b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/scm/TestReconContainerManager.java
@@ -233,7 +233,7 @@ public void
testOpenContainerNotUpdatedFromUnhealthyReplicaReports()
for (State replicaState : new State[] {
State.UNHEALTHY, State.INVALID, State.DELETED}) {
ContainerWithPipeline containerWithPipeline =
- getTestContainer(120L + replicaState.ordinal(), LifeCycleState.OPEN);
+ getTestContainer(120L + replicaState.getNumber(),
LifeCycleState.OPEN);
ContainerID containerID =
containerWithPipeline.getContainerInfo().containerID();
getContainerManager().addNewContainer(containerWithPipeline);
diff --git
a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/tasks/TestContainerKeyMapperTask.java
b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/tasks/TestContainerKeyMapperTask.java
index ce8ab5ce216..09a45ac9f3e 100644
---
a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/tasks/TestContainerKeyMapperTask.java
+++
b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/tasks/TestContainerKeyMapperTask.java
@@ -30,6 +30,7 @@
import java.io.IOException;
import java.nio.file.Path;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
@@ -312,11 +313,8 @@ public void testKeyTableProcess() throws IOException {
.setTable(omMetadataManager.getKeyTable(getBucketLayout()).getName())
.build();
- OMUpdateEventBatch omUpdateEventBatch = new OMUpdateEventBatch(new
- ArrayList<OMDBUpdateEvent>() {{
- add(keyEvent1);
- add(keyEvent2);
- }}, 0L);
+ OMUpdateEventBatch omUpdateEventBatch = new OMUpdateEventBatch(
+ new ArrayList<>(Arrays.asList(keyEvent1, keyEvent2)), 0L);
ContainerKeyMapperTaskOBS containerKeyMapperTaskOBS =
new ContainerKeyMapperTaskOBS(reconContainerMetadataManager,
@@ -423,12 +421,7 @@ public void testFileTableProcess() throws Exception {
.build();
OMUpdateEventBatch omUpdateEventBatch =
- new OMUpdateEventBatch(new ArrayList<OMDBUpdateEvent>() {
- {
- add(keyEvent1);
- add(keyEvent2);
- }
- }, 0L);
+ new OMUpdateEventBatch(new ArrayList<>(Arrays.asList(keyEvent1,
keyEvent2)), 0L);
// Process PUT event for both the keys
containerKeyMapperTaskFSO.process(omUpdateEventBatch,
Collections.emptyMap());
@@ -457,11 +450,7 @@ public void testFileTableProcess() throws Exception {
.getName())
.build();
OMUpdateEventBatch omUpdateEventBatch2 =
- new OMUpdateEventBatch(new ArrayList<OMDBUpdateEvent>() {
- {
- add(keyEvent3);
- }
- }, 0L);
+ new OMUpdateEventBatch(new
ArrayList<>(Collections.singletonList(keyEvent3)), 0L);
// Process DELETE event for key2
containerKeyMapperTaskFSO.process(omUpdateEventBatch2,
Collections.emptyMap());
diff --git
a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/tasks/TestContainerSizeCountTask.java
b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/tasks/TestContainerSizeCountTask.java
index de00a73af7c..e666f4f7c85 100644
---
a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/tasks/TestContainerSizeCountTask.java
+++
b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/tasks/TestContainerSizeCountTask.java
@@ -77,7 +77,7 @@ public void setUp() {
utilizationSchemaDefinition,
reconTaskStatusUpdaterManager);
// Truncate table before running each test
- dslContext.truncate(CONTAINER_COUNT_BY_SIZE);
+ dslContext.truncate(CONTAINER_COUNT_BY_SIZE).execute();
}
@Test
diff --git
a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/tasks/TestOmTableInsightTask.java
b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/tasks/TestOmTableInsightTask.java
index 9b5f3b0c1f9..cab1041efb4 100644
---
a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/tasks/TestOmTableInsightTask.java
+++
b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/tasks/TestOmTableInsightTask.java
@@ -177,7 +177,7 @@ public void setUp() throws IOException {
}
MockitoAnnotations.openMocks(this);
// Truncate table before running each test
- dslContext.truncate(GLOBAL_STATS);
+ dslContext.truncate(GLOBAL_STATS).execute();
}
/**
diff --git
a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestMultipartUploadWithCopy.java
b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestMultipartUploadWithCopy.java
index 8bb2cf3fa62..2ae0f50df9a 100644
---
a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestMultipartUploadWithCopy.java
+++
b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestMultipartUploadWithCopy.java
@@ -35,6 +35,7 @@
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
+import com.google.common.collect.ImmutableMap;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
@@ -94,9 +95,8 @@ public static void setUp() throws Exception {
.createKey(EXISTING_KEY, keyContent.length,
ReplicationConfig.fromTypeAndFactor(ReplicationType.RATIS,
ReplicationFactor.THREE),
- new HashMap<String, String>() {{
- put(OzoneConsts.ETAG, DigestUtils.md5Hex(EXISTING_KEY_CONTENT));
- }}
+ ImmutableMap.of(OzoneConsts.ETAG,
+ DigestUtils.md5Hex(EXISTING_KEY_CONTENT))
)) {
stream.write(keyContent);
}
diff --git a/pom.xml b/pom.xml
index c9a93ac3de2..1506a8c92b4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -78,6 +78,7 @@
<dropwizard-metrics.version>3.2.6</dropwizard-metrics.version>
<enforced.maven.version>[3.6.3,)</enforced.maven.version>
<errorprone-annotations.version>2.29.2</errorprone-annotations.version>
+ <errorprone.version>2.42.0</errorprone.version>
<!-- test groups excluded by default (without any manual profile
activation) -->
<excluded-test-groups>unhealthy | benchmark</excluded-test-groups>
<exec-maven-plugin.version>3.6.3</exec-maven-plugin.version>
@@ -2576,6 +2577,48 @@
</distributionManagement>
<profiles>
+ <profile>
+ <id>errorprone</id>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <fork>true</fork>
+ <annotationProcessorPaths combine.children="append">
+ <path>
+ <groupId>com.google.errorprone</groupId>
+ <artifactId>error_prone_core</artifactId>
+ <version>${errorprone.version}</version>
+ </path>
+ </annotationProcessorPaths>
+ <compilerArgs combine.children="append">
+ <arg>-XDaddTypeAnnotationsToSymbol=true</arg>
+ <arg>-XDcompilePolicy=simple</arg>
+ <arg>--should-stop=ifError=FLOW</arg>
+ <arg>-Xplugin:ErrorProne -XepDisableWarningsInGeneratedCode
-XepExcludedPaths:^(?!.*ozonefs-hadoop2/target/generated-sources/java/).*/target/generated(-test)?-sources/.*</arg>
+
<arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED</arg>
+
<arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED</arg>
+
<arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED</arg>
+
<arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED</arg>
+
<arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED</arg>
+
<arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED</arg>
+
<arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED</arg>
+
<arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED</arg>
+
<arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED</arg>
+
<arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED</arg>
+
<arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED</arg>
+
<arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED</arg>
+ <!-- Forces the compiler process to output in English -->
+ <arg>-J-Duser.language=en</arg>
+ <arg>-J-Duser.country=US</arg>
+ </compilerArgs>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
<profile>
<id>dist</id>
<build>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]