This is an automated email from the ASF dual-hosted git repository.

dongjoon pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/spark-kubernetes-operator.git


The following commit(s) were added to refs/heads/main by this push:
     new 26111cf  [SPARK-54677] Upgrade `pmd` to 7.19.0 and apply 
`EnumComparison` rules
26111cf is described below

commit 26111cfb60c428234558928b8c76f896ffffce14
Author: Dongjoon Hyun <[email protected]>
AuthorDate: Wed Dec 10 15:14:47 2025 -0800

    [SPARK-54677] Upgrade `pmd` to 7.19.0 and apply `EnumComparison` rules
    
    ### What changes were proposed in this pull request?
    
    This PR aims to upgrade `pmd` to 7.19.0 and apply `EnumComparison` rules.
    
    ### Why are the changes needed?
    
    To prevent a bug like
    - #426
    
    ### Does this PR introduce _any_ user-facing change?
    
    No behavior change.
    
    ### How was this patch tested?
    
    Pass the CIs.
    
    ### Was this patch authored or co-authored using generative AI tooling?
    
    No.
    
    Closes #428 from dongjoon-hyun/SPARK-54677.
    
    Authored-by: Dongjoon Hyun <[email protected]>
    Signed-off-by: Dongjoon Hyun <[email protected]>
---
 config/pmd/ruleset.xml                                    |  4 ++--
 gradle/libs.versions.toml                                 |  2 +-
 .../k8s/operator/status/ApplicationStateSummary.java      |  4 ++--
 .../spark/k8s/operator/status/ApplicationStatus.java      |  8 ++++----
 .../spark/k8s/operator/status/ClusterStateSummary.java    |  8 ++++----
 .../reconciler/observers/BaseAppDriverObserver.java       |  4 ++--
 .../reconciler/reconcilesteps/AppCleanUpStep.java         | 15 +++++++--------
 .../reconciler/reconcilesteps/AppRunningStep.java         |  2 +-
 .../reconciler/reconcilesteps/AppValidateStep.java        |  2 +-
 .../org/apache/spark/k8s/operator/utils/PodUtils.java     |  2 +-
 10 files changed, 25 insertions(+), 26 deletions(-)

diff --git a/config/pmd/ruleset.xml b/config/pmd/ruleset.xml
index f071c83..40cb52d 100644
--- a/config/pmd/ruleset.xml
+++ b/config/pmd/ruleset.xml
@@ -45,7 +45,7 @@
   </rule>
   <rule ref="category/java/design.xml">
     <exclude name="AbstractClassWithoutAnyMethod" />
-    <exclude name="AvoidCatchingGenericException" />
+    <exclude name="AvoidDeeplyNestedIfStmts" />
     <exclude name="CognitiveComplexity" />
     <exclude name="CouplingBetweenObjects" />
     <exclude name="CyclomaticComplexity" />
@@ -60,7 +60,7 @@
   </rule>
   <rule ref="category/java/errorprone.xml">
     <exclude name="AssignmentInOperand" />
-    <exclude name="AvoidCatchingThrowable" />
+    <exclude name="AvoidCatchingGenericException" />
     <exclude name="AvoidDuplicateLiterals" />
     <exclude name="AvoidFieldNameMatchingMethodName" />
     <exclude name="AvoidLiteralsInIfCondition" />
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 73d31f3..9e7ce8f 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -30,7 +30,7 @@ mockito = "5.21.0"
 
 # Build Analysis
 checkstyle = "10.23.1"
-pmd = "7.17.0"
+pmd = "7.19.0"
 spotbugs-tool = "4.9.6"
 spotbugs-plugin = "6.4.2"
 spotless-plugin = "8.1.0"
diff --git 
a/spark-operator-api/src/main/java/org/apache/spark/k8s/operator/status/ApplicationStateSummary.java
 
b/spark-operator-api/src/main/java/org/apache/spark/k8s/operator/status/ApplicationStateSummary.java
index 77a7700..bd5c2b9 100644
--- 
a/spark-operator-api/src/main/java/org/apache/spark/k8s/operator/status/ApplicationStateSummary.java
+++ 
b/spark-operator-api/src/main/java/org/apache/spark/k8s/operator/status/ApplicationStateSummary.java
@@ -117,7 +117,7 @@ public enum ApplicationStateSummary implements 
BaseStateSummary {
    * @return True if the state is Submitted or ScheduledToRestart, false 
otherwise.
    */
   public boolean isInitializing() {
-    return Submitted.equals(this) || ScheduledToRestart.equals(this);
+    return this == Submitted || this == ScheduledToRestart;
   }
 
   /**
@@ -139,7 +139,7 @@ public enum ApplicationStateSummary implements 
BaseStateSummary {
    *     TerminatedWithoutReleaseResources), false otherwise.
    */
   public boolean isTerminated() {
-    return ResourceReleased.equals(this) || 
TerminatedWithoutReleaseResources.equals(this);
+    return this == ResourceReleased || this == 
TerminatedWithoutReleaseResources;
   }
 
   /**
diff --git 
a/spark-operator-api/src/main/java/org/apache/spark/k8s/operator/status/ApplicationStatus.java
 
b/spark-operator-api/src/main/java/org/apache/spark/k8s/operator/status/ApplicationStatus.java
index 52a5e8c..17901cc 100644
--- 
a/spark-operator-api/src/main/java/org/apache/spark/k8s/operator/status/ApplicationStatus.java
+++ 
b/spark-operator-api/src/main/java/org/apache/spark/k8s/operator/status/ApplicationStatus.java
@@ -107,8 +107,8 @@ public class ApplicationStatus
       // no restart configured
       ApplicationState state =
           new ApplicationState(ApplicationStateSummary.ResourceReleased, 
stateMessageOverride);
-      if (ResourceRetainPolicy.Always.equals(resourceRetainPolicy)
-          || ResourceRetainPolicy.OnFailure.equals(resourceRetainPolicy)
+      if (ResourceRetainPolicy.Always == resourceRetainPolicy
+          || ResourceRetainPolicy.OnFailure == resourceRetainPolicy
               && currentState.currentStateSummary.isFailure()) {
         state = terminateAppWithoutReleaseResource(stateMessageOverride);
       }
@@ -139,8 +139,8 @@ public class ApplicationStatus
       // max number of restart attempt reached
       ApplicationState state =
           new ApplicationState(ApplicationStateSummary.ResourceReleased, 
stateMessage);
-      if (ResourceRetainPolicy.Always.equals(resourceRetainPolicy)
-          || ResourceRetainPolicy.OnFailure.equals(resourceRetainPolicy)
+      if (ResourceRetainPolicy.Always == resourceRetainPolicy
+          || ResourceRetainPolicy.OnFailure == resourceRetainPolicy
               && currentState.currentStateSummary.isFailure()) {
         state = terminateAppWithoutReleaseResource(stateMessage);
       }
diff --git 
a/spark-operator-api/src/main/java/org/apache/spark/k8s/operator/status/ClusterStateSummary.java
 
b/spark-operator-api/src/main/java/org/apache/spark/k8s/operator/status/ClusterStateSummary.java
index 074a21a..c614624 100644
--- 
a/spark-operator-api/src/main/java/org/apache/spark/k8s/operator/status/ClusterStateSummary.java
+++ 
b/spark-operator-api/src/main/java/org/apache/spark/k8s/operator/status/ClusterStateSummary.java
@@ -41,7 +41,7 @@ public enum ClusterStateSummary implements BaseStateSummary {
    * @return True if the state is Submitted, false otherwise.
    */
   public boolean isInitializing() {
-    return Submitted.equals(this);
+    return this == Submitted;
   }
 
   /**
@@ -60,7 +60,7 @@ public enum ClusterStateSummary implements BaseStateSummary {
    *     otherwise.
    */
   public boolean isTerminated() {
-    return ResourceReleased.equals(this);
+    return this == ResourceReleased;
   }
 
   /**
@@ -70,7 +70,7 @@ public enum ClusterStateSummary implements BaseStateSummary {
    */
   @Override
   public boolean isFailure() {
-    return SchedulingFailure.equals(this) || Failed.equals(this);
+    return this == SchedulingFailure || this == Failed;
   }
 
   /**
@@ -80,6 +80,6 @@ public enum ClusterStateSummary implements BaseStateSummary {
    */
   @Override
   public boolean isInfrastructureFailure() {
-    return SchedulingFailure.equals(this);
+    return this == SchedulingFailure;
   }
 }
diff --git 
a/spark-operator/src/main/java/org/apache/spark/k8s/operator/reconciler/observers/BaseAppDriverObserver.java
 
b/spark-operator/src/main/java/org/apache/spark/k8s/operator/reconciler/observers/BaseAppDriverObserver.java
index 5bb909c..d360300 100644
--- 
a/spark-operator/src/main/java/org/apache/spark/k8s/operator/reconciler/observers/BaseAppDriverObserver.java
+++ 
b/spark-operator/src/main/java/org/apache/spark/k8s/operator/reconciler/observers/BaseAppDriverObserver.java
@@ -86,7 +86,7 @@ public abstract class BaseAppDriverObserver
       return Optional.empty();
     }
 
-    if (PodPhase.FAILED.equals(PodPhase.getPhase(driverPod))) {
+    if (PodPhase.FAILED == PodPhase.getPhase(driverPod)) {
       ApplicationState state = new ApplicationState(Failed, 
DRIVER_FAILED_MESSAGE);
       if ("Evicted".equalsIgnoreCase(status.getReason())) {
         state = new ApplicationState(ApplicationStateSummary.DriverEvicted, 
DRIVER_FAILED_MESSAGE);
@@ -95,7 +95,7 @@ public abstract class BaseAppDriverObserver
       return Optional.of(state);
     }
 
-    if (PodPhase.SUCCEEDED.equals(PodPhase.getPhase(driverPod))) {
+    if (PodPhase.SUCCEEDED == PodPhase.getPhase(driverPod)) {
       ApplicationState state;
       if (driverReady) {
         state = new ApplicationState(Succeeded, DRIVER_COMPLETED_MESSAGE);
diff --git 
a/spark-operator/src/main/java/org/apache/spark/k8s/operator/reconciler/reconcilesteps/AppCleanUpStep.java
 
b/spark-operator/src/main/java/org/apache/spark/k8s/operator/reconciler/reconcilesteps/AppCleanUpStep.java
index 9cfc0ed..4bfa76b 100644
--- 
a/spark-operator/src/main/java/org/apache/spark/k8s/operator/reconciler/reconcilesteps/AppCleanUpStep.java
+++ 
b/spark-operator/src/main/java/org/apache/spark/k8s/operator/reconciler/reconcilesteps/AppCleanUpStep.java
@@ -112,7 +112,7 @@ public class AppCleanUpStep extends AppReconcileStep {
       if (retainReleaseResourceForPolicyAndState(
           tolerations.getResourceRetainPolicy(), currentState)) {
         if (tolerations.getRestartConfig() != null
-            && 
!RestartPolicy.Never.equals(tolerations.getRestartConfig().getRestartPolicy())) 
{
+            && RestartPolicy.Never != 
tolerations.getRestartConfig().getRestartPolicy()) {
           stateUpdateMessage =
               "Application is configured to restart, resources created in 
current "
                   + "attempt would be force released.";
@@ -182,8 +182,8 @@ public class AppCleanUpStep extends AppReconcileStep {
               
SparkOperatorConf.TRIM_ATTEMPT_STATE_TRANSITION_HISTORY.getValue());
       long requeueAfterMillis =
           
tolerations.getApplicationTimeoutConfig().getTerminationRequeuePeriodMillis();
-      if (ApplicationStateSummary.ScheduledToRestart.equals(
-          updatedStatus.getCurrentState().getCurrentStateSummary())) {
+      if (ApplicationStateSummary.ScheduledToRestart ==
+          updatedStatus.getCurrentState().getCurrentStateSummary()) {
         requeueAfterMillis = 
tolerations.getRestartConfig().getRestartBackoffMillis();
       }
       return updateStatusAndRequeueAfter(
@@ -223,7 +223,7 @@ public class AppCleanUpStep extends AppReconcileStep {
     ApplicationState currentState = currentStatus.getCurrentState();
     ApplicationTolerations tolerations = 
application.getSpec().getApplicationTolerations();
     Instant now = Instant.now();
-    if 
(ApplicationStateSummary.ResourceReleased.equals(currentState.getCurrentStateSummary()))
 {
+    if (ApplicationStateSummary.ResourceReleased == 
currentState.getCurrentStateSummary()) {
       // Perform TTL check after removing all secondary resources, if enabled
       if (isOnDemandCleanup() || !tolerations.isTTLEnabled()) {
         // all secondary resources have been released, no more reconciliations 
needed
@@ -251,8 +251,8 @@ public class AppCleanUpStep extends AppReconcileStep {
     if (isOnDemandCleanup()) {
       return Optional.empty();
     }
-    if (ApplicationStateSummary.TerminatedWithoutReleaseResources.equals(
-        currentState.getCurrentStateSummary())) {
+    if (ApplicationStateSummary.TerminatedWithoutReleaseResources ==
+        currentState.getCurrentStateSummary()) {
       if (tolerations.isRetainDurationEnabled()) {
         if (tolerations.exceedRetainDurationAtInstant(currentState, now)) {
           log.info("Garbage collecting secondary resources for application");
@@ -312,8 +312,7 @@ public class AppCleanUpStep extends AppReconcileStep {
   protected boolean isReleasingResourcesForSchedulingFailureAttempt(
       final ApplicationStatus status) {
     ApplicationState lastObservedState = 
getLastObservedStateBeforeTermination(status);
-    return ApplicationStateSummary.SchedulingFailure.equals(
-        lastObservedState.getCurrentStateSummary());
+    return ApplicationStateSummary.SchedulingFailure == 
lastObservedState.getCurrentStateSummary();
   }
 
   /**
diff --git 
a/spark-operator/src/main/java/org/apache/spark/k8s/operator/reconciler/reconcilesteps/AppRunningStep.java
 
b/spark-operator/src/main/java/org/apache/spark/k8s/operator/reconciler/reconcilesteps/AppRunningStep.java
index 47a45d6..bab1499 100644
--- 
a/spark-operator/src/main/java/org/apache/spark/k8s/operator/reconciler/reconcilesteps/AppRunningStep.java
+++ 
b/spark-operator/src/main/java/org/apache/spark/k8s/operator/reconciler/reconcilesteps/AppRunningStep.java
@@ -84,7 +84,7 @@ public class AppRunningStep extends AppReconcileStep {
         }
       }
     }
-    if (proposedStateSummary.equals(prevStateSummary)) {
+    if (proposedStateSummary == prevStateSummary) {
       return observeDriver(context, statusRecorder, List.of(new 
AppDriverRunningObserver()));
     } else {
       ApplicationStatus updatedStatus =
diff --git 
a/spark-operator/src/main/java/org/apache/spark/k8s/operator/reconciler/reconcilesteps/AppValidateStep.java
 
b/spark-operator/src/main/java/org/apache/spark/k8s/operator/reconciler/reconcilesteps/AppValidateStep.java
index 73466e9..9cefd67 100644
--- 
a/spark-operator/src/main/java/org/apache/spark/k8s/operator/reconciler/reconcilesteps/AppValidateStep.java
+++ 
b/spark-operator/src/main/java/org/apache/spark/k8s/operator/reconciler/reconcilesteps/AppValidateStep.java
@@ -50,7 +50,7 @@ public class AppValidateStep extends AppReconcileStep {
       log.warn("Spark application found with empty status. Resetting to 
initial state.");
       return attemptStatusUpdate(context, statusRecorder, new 
ApplicationStatus(), proceed());
     }
-    if 
(ClientMode.equals(context.getResource().getSpec().getDeploymentMode())) {
+    if (ClientMode == context.getResource().getSpec().getDeploymentMode()) {
       ApplicationState failure =
           new ApplicationState(ApplicationStateSummary.Failed, "Client mode is 
not supported yet.");
       return attemptStatusUpdate(
diff --git 
a/spark-operator/src/main/java/org/apache/spark/k8s/operator/utils/PodUtils.java
 
b/spark-operator/src/main/java/org/apache/spark/k8s/operator/utils/PodUtils.java
index b71576a..6ac163c 100644
--- 
a/spark-operator/src/main/java/org/apache/spark/k8s/operator/utils/PodUtils.java
+++ 
b/spark-operator/src/main/java/org/apache/spark/k8s/operator/utils/PodUtils.java
@@ -42,7 +42,7 @@ public final class PodUtils {
    * @return True if the pod is running and ready, false otherwise.
    */
   public static boolean isPodReady(final Pod pod) {
-    if (!PodPhase.RUNNING.equals(PodPhase.getPhase(pod))) {
+    if (PodPhase.RUNNING != PodPhase.getPhase(pod)) {
       return false;
     }
     if (pod == null


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to