You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spark.apache.org by do...@apache.org on 2026/03/30 19:52:59 UTC

(spark-kubernetes-operator) branch main updated: [SPARK-56293] Make `BaseAppDriverObserver` abstract class `sealed`

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 cd8fcf9  [SPARK-56293] Make `BaseAppDriverObserver` abstract class `sealed`
cd8fcf9 is described below

commit cd8fcf945e5f72fde839139999dae743835146c1
Author: Dongjoon Hyun <do...@apache.org>
AuthorDate: Mon Mar 30 12:52:53 2026 -0700

    [SPARK-56293] Make `BaseAppDriverObserver` abstract class `sealed`
    
    ### What changes were proposed in this pull request?
    
    This PR makes `BaseAppDriverObserver` a `sealed` class with `permits AppDriverReadyObserver, AppDriverRunningObserver, AppDriverStartObserver, AppDriverTimeoutObserver`. All four subclasses are marked `final`.
    
    ### Why are the changes needed?
    
    Using a `sealed` class explicitly restricts the permitted implementations, improving type safety and enabling exhaustive pattern matching in `switch` expressions with Java 21.
    
    ### Does this PR introduce _any_ user-facing change?
    
    No.
    
    ### How was this patch tested?
    
    Pass the CIs with the existing tests.
    
    ### Was this patch authored or co-authored using generative AI tooling?
    
    Generated-by: Claude Code (Claude Opus 4.6)
    
    Closes #607 from dongjoon-hyun/SPARK-56293.
    
    Authored-by: Dongjoon Hyun <do...@apache.org>
    Signed-off-by: Dongjoon Hyun <do...@apache.org>
---
 .../k8s/operator/reconciler/observers/AppDriverReadyObserver.java | 2 +-
 .../operator/reconciler/observers/AppDriverRunningObserver.java   | 2 +-
 .../k8s/operator/reconciler/observers/AppDriverStartObserver.java | 2 +-
 .../operator/reconciler/observers/AppDriverTimeoutObserver.java   | 2 +-
 .../k8s/operator/reconciler/observers/BaseAppDriverObserver.java  | 8 ++++++--
 5 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/spark-operator/src/main/java/org/apache/spark/k8s/operator/reconciler/observers/AppDriverReadyObserver.java b/spark-operator/src/main/java/org/apache/spark/k8s/operator/reconciler/observers/AppDriverReadyObserver.java
index d587dec..a50f1cb 100644
--- a/spark-operator/src/main/java/org/apache/spark/k8s/operator/reconciler/observers/AppDriverReadyObserver.java
+++ b/spark-operator/src/main/java/org/apache/spark/k8s/operator/reconciler/observers/AppDriverReadyObserver.java
@@ -32,7 +32,7 @@ import org.apache.spark.k8s.operator.status.ApplicationStatus;
 import org.apache.spark.k8s.operator.utils.PodUtils;
 
 /** Observes whether driver is ready. */
-public class AppDriverReadyObserver extends BaseAppDriverObserver {
+public final class AppDriverReadyObserver extends BaseAppDriverObserver {
   /**
    * Observes the driver pod to determine if it is ready.
    *
diff --git a/spark-operator/src/main/java/org/apache/spark/k8s/operator/reconciler/observers/AppDriverRunningObserver.java b/spark-operator/src/main/java/org/apache/spark/k8s/operator/reconciler/observers/AppDriverRunningObserver.java
index c5a779e..40d934f 100644
--- a/spark-operator/src/main/java/org/apache/spark/k8s/operator/reconciler/observers/AppDriverRunningObserver.java
+++ b/spark-operator/src/main/java/org/apache/spark/k8s/operator/reconciler/observers/AppDriverRunningObserver.java
@@ -32,7 +32,7 @@ import org.apache.spark.k8s.operator.status.ApplicationStatus;
  * scheduled). Note that this means `DriverStarted` and we need to wait `DriverReady` as a next
  * step.
  */
-public class AppDriverRunningObserver extends BaseAppDriverObserver {
+public final class AppDriverRunningObserver extends BaseAppDriverObserver {
   /**
    * Observes the driver pod to determine if it is running.
    *
diff --git a/spark-operator/src/main/java/org/apache/spark/k8s/operator/reconciler/observers/AppDriverStartObserver.java b/spark-operator/src/main/java/org/apache/spark/k8s/operator/reconciler/observers/AppDriverStartObserver.java
index 21542a7..4cddaa5 100644
--- a/spark-operator/src/main/java/org/apache/spark/k8s/operator/reconciler/observers/AppDriverStartObserver.java
+++ b/spark-operator/src/main/java/org/apache/spark/k8s/operator/reconciler/observers/AppDriverStartObserver.java
@@ -32,7 +32,7 @@ import org.apache.spark.k8s.operator.status.ApplicationStatus;
 import org.apache.spark.k8s.operator.utils.PodUtils;
 
 /** Observes whether the driver pod has started. */
-public class AppDriverStartObserver extends BaseAppDriverObserver {
+public final class AppDriverStartObserver extends BaseAppDriverObserver {
   /**
    * Observes the driver pod to determine if it has started.
    *
diff --git a/spark-operator/src/main/java/org/apache/spark/k8s/operator/reconciler/observers/AppDriverTimeoutObserver.java b/spark-operator/src/main/java/org/apache/spark/k8s/operator/reconciler/observers/AppDriverTimeoutObserver.java
index 3633840..bb1a56f 100644
--- a/spark-operator/src/main/java/org/apache/spark/k8s/operator/reconciler/observers/AppDriverTimeoutObserver.java
+++ b/spark-operator/src/main/java/org/apache/spark/k8s/operator/reconciler/observers/AppDriverTimeoutObserver.java
@@ -32,7 +32,7 @@ import org.apache.spark.k8s.operator.status.ApplicationStatus;
 import org.apache.spark.k8s.operator.utils.SparkAppStatusUtils;
 
 /** Observes driver status and time-out as configured in app spec. */
-public class AppDriverTimeoutObserver extends BaseAppDriverObserver {
+public final class AppDriverTimeoutObserver extends BaseAppDriverObserver {
 
   /**
    * Observes the driver status and applies timeouts as configured in the application specification.
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 d360300..4a4c54b 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
@@ -42,14 +42,18 @@ import org.apache.spark.k8s.operator.utils.PodUtils;
 
 /** Observes driver pod status and update Application status as needed. */
 @Slf4j
-public abstract class BaseAppDriverObserver
+public abstract sealed class BaseAppDriverObserver
     extends BaseSecondaryResourceObserver<
         ApplicationStateSummary,
         ApplicationAttemptSummary,
         ApplicationState,
         ApplicationSpec,
         ApplicationStatus,
-        Pod> {
+        Pod>
+    permits AppDriverReadyObserver,
+        AppDriverRunningObserver,
+        AppDriverStartObserver,
+        AppDriverTimeoutObserver {
 
   /**
    * Check whether the driver pod (and thus the application) has actually terminated This would be


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@spark.apache.org
For additional commands, e-mail: commits-help@spark.apache.org