Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
6b780df
[SPARK-XXXXX][CORE] Concurrently schedule stages connected by a pipel…
jerrypeng Jul 10, 2026
0050318
[SPARK-XXXXX][CORE] Fail fast when a pipelined group cannot fit in cl…
jerrypeng Jul 11, 2026
b2c9d9e
[SPARK-XXXXX][CORE] Admit pipelined groups against free slots (spec S…
jerrypeng Jul 15, 2026
e85b735
[SPARK-XXXXX][CORE] Pipelined group admission: count enqueued demand,…
jerrypeng Jul 17, 2026
c136860
[SPARK-XXXXX][CORE] Defer completion of pipelined-group members until…
jerrypeng Jul 14, 2026
768c398
[SPARK-XXXXX][CORE] Fix pipelined-group admission: skip zombie attemp…
jerrypeng Jul 18, 2026
d3749e2
[SPARK-XXXXX][CORE] Document that isPipelinedGroupMember is consumed …
jerrypeng Jul 18, 2026
b63f9fe
[SPARK-XXXXX][CORE] Fix stale free-slots doc wording: outstanding = r…
jerrypeng Jul 18, 2026
f30bf13
[SPARK-XXXXX][CORE] Restrict pipelined jobs to all-regular-or-all-PG;…
jerrypeng Jul 19, 2026
ede07d2
[SPARK-XXXXX][CORE] Align pipelined deferred-completion naming with C…
jerrypeng Jul 19, 2026
3ea8e80
[SPARK-XXXXX][CORE] Review round 1: add dependentStageMap to the leak…
jerrypeng Jul 19, 2026
dfec9c8
[SPARK-XXXXX][CORE] Pipelined consumer deferral: defer only completio…
jerrypeng Jul 20, 2026
10dd37e
[SPARK-XXXXX][CORE] Fix isPipelinedGroupMember scaladoc: drop stale "…
jerrypeng Jul 20, 2026
e73d413
[SPARK-XXXXX][CORE] Tighten outstandingTasksForOtherWorkInProfile to …
jerrypeng Jul 20, 2026
c9f2bb0
[SPARK-XXXXX][CORE] Clarify pipelined admission vs. barrier: contrast…
jerrypeng Jul 20, 2026
fc10be3
[SPARK-XXXXX][CORE] Don't re-post TaskEnd for a finishOnly replay tha…
jerrypeng Jul 20, 2026
fd39ce3
[SPARK-XXXXX][CORE] Clarify the deferral drop-path comment: inline ac…
jerrypeng Jul 20, 2026
89b29a8
[SPARK-XXXXX][CORE] Remove internal jargon from pipelined-shuffle com…
jerrypeng Jul 21, 2026
43f50d0
[SPARK-XXXXX][CORE] Reject a pipelined job whose member uses a non-de…
jerrypeng Jul 23, 2026
061786f
[SPARK-XXXXX][CORE] Simplify pipelined-consumer deferral: defer the w…
jerrypeng Jul 23, 2026
148c5b3
[SPARK-XXXXX][CORE] Flush a buffered consumer's TaskEnds on job teard…
jerrypeng Jul 23, 2026
97f4152
[SPARK-58263][CORE] Address review nits: correct two scheduler comments
jerrypeng Jul 23, 2026
23a3be1
[SPARK-XXXXX][CORE] Fix scalastyle line-length in the teardown-flush …
jerrypeng Jul 24, 2026
8835aa8
[SPARK-XXXXX][CORE] Fail a pipelined group atomically on any member t…
jerrypeng Jul 11, 2026
d6de94c
[SPARK-XXXXX][CORE] Prevent cross-job/cross-time reuse of a pipelined…
jerrypeng Jul 11, 2026
7cbffef
[SPARK-XXXXX][CORE] Complete group-atomic failure (spec S6): fail a p…
jerrypeng Jul 11, 2026
5a30927
[SPARK-XXXXX][CORE] Test: group-atomic rerun resets per-partition com…
jerrypeng Jul 13, 2026
002460f
[SPARK-XXXXX][CORE] Realign group-failure tests with the all-regular-…
jerrypeng Jul 19, 2026
fbaf08e
[SPARK-XXXXX][CORE] Review round 1: make the SC-235532 executor-loss …
jerrypeng Jul 19, 2026
1aab7e4
[SPARK-XXXXX][CORE] Replace internal ticket/milestone references with…
jerrypeng Jul 20, 2026
b4be9a1
[SPARK-XXXXX][CORE] Gate the per-submit pipelined-group check on a ch…
jerrypeng Jul 20, 2026
5123237
[SPARK-XXXXX][CORE] Clarify that a pipelined shuffle's MapOutputTrack…
jerrypeng Jul 20, 2026
985a9d7
[SPARK-XXXXX][CORE] Test the finishOnly-replay-on-torn-down-stage gua…
jerrypeng Jul 20, 2026
5f4ceb2
[SPARK-XXXXX][CORE] Test: explicit job cancellation cleans up a buffe…
jerrypeng Jul 20, 2026
99f5009
[SPARK-XXXXX][CORE] Test: a consumer result task throwing aborts the …
jerrypeng Jul 20, 2026
1496df4
[SPARK-XXXXX][CORE] Remove internal jargon from pipelined-shuffle com…
jerrypeng Jul 21, 2026
e31bb7d
[SPARK-XXXXX][CORE] Remove the obsolete finishOnly-replay-on-torn-dow…
jerrypeng Jul 23, 2026
9104086
[SPARK-XXXXX][CORE] Fail fast on unsupported idioms in a pipelined group
jerrypeng Jul 13, 2026
7cf94e5
[SPARK-XXXXX][CORE] Reject reliable checkpoint in a pipelined CONSUME…
jerrypeng Jul 13, 2026
8ef3847
[SPARK-XXXXX][CORE] Test: multi-producer consumer drops buffered succ…
jerrypeng Jul 19, 2026
2745615
[SPARK-XXXXX][CORE] Review round 1: fix checkPipelinedProducerSupport…
jerrypeng Jul 19, 2026
91d3c1f
[SPARK-XXXXX][CORE] Test: a deferred consumer's TaskEnd fires inline,…
jerrypeng Jul 20, 2026
47d4284
[SPARK-XXXXX][CORE] Pipelined fail-fast: match a typed exception, and…
jerrypeng Jul 20, 2026
39e92c0
[SPARK-XXXXX][CORE] Reject any non-default resource profile in a pipe…
jerrypeng Jul 20, 2026
ab7ca1c
[SPARK-XXXXX][CORE] Enforce the v1 job==group admission invariant; de…
jerrypeng Jul 20, 2026
a8b961d
[SPARK-XXXXX][CORE] Make the job==group admission invariant fail-clos…
jerrypeng Jul 21, 2026
3c82423
[SPARK-XXXXX][CORE] Remove internal jargon from pipelined-shuffle com…
jerrypeng Jul 21, 2026
2da83a8
[SPARK-XXXXX][CORE] Supersede the pr3 resource-profile guard with the…
jerrypeng Jul 23, 2026
9238a4d
[SPARK-XXXXX][CORE] Realign the group-abort deferral test with the co…
jerrypeng Jul 23, 2026
8398a22
[SPARK-XXXXX][CORE] Gate the pipelined group-idiom check on hasPipeli…
jerrypeng Jul 23, 2026
7e6df6c
[SPARK-XXXXX][CORE] Fix scalastyle line-length in the RP-inertness te…
jerrypeng Jul 24, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions common/utils/src/main/resources/error/error-conditions.json
Original file line number Diff line number Diff line change
Expand Up @@ -1126,6 +1126,12 @@
],
"sqlState" : "0A000"
},
"CONCURRENT_SCHEDULER_INSUFFICIENT_SLOT" : {
"message" : [
"Cannot run the pipelined stage group: it needs <numTasks> concurrent task slots to run all its stages together, but only <numSlots> are currently free. The stages of a pipelined group must run concurrently, so the cluster must have enough free slots for all of them at once. Provision more executors, or reduce the parallelism of the query."
],
"sqlState" : "53000"
},
"CONCURRENT_STREAM_LOG_UPDATE" : {
"message" : [
"Concurrent update to the log. Multiple streaming jobs detected for <batchId>.",
Expand Down Expand Up @@ -6313,6 +6319,18 @@
],
"sqlState" : "42K03"
},
"PIPELINED_SHUFFLE_CROSS_JOB_REUSE" : {
"message" : [
"The pipelined shuffle <shuffleId> is being reused across jobs. A pipelined (incrementally-readable) shuffle is transient and has no retained output for another job to read, so its producer stage cannot be shared across jobs."
],
"sqlState" : "0A000"
},
"PIPELINED_SHUFFLE_UNSUPPORTED" : {
"message" : [
"A pipelined shuffle stage group cannot be scheduled because it uses an unsupported feature: <reason>. Pipelined (incrementally-readable) shuffles run their producer and consumer stages concurrently over a transient, once-through stream, which is incompatible with this feature in this version."
],
"sqlState" : "0A000"
},
"PIPELINE_DATASET_WITHOUT_FLOW" : {
"message" : [
"Pipeline dataset <identifier> does not have any defined flows. Please attach a query with the dataset's definition, or explicitly define at least one flow that writes to the dataset."
Expand Down
15 changes: 15 additions & 0 deletions core/src/main/scala/org/apache/spark/internal/config/package.scala
Original file line number Diff line number Diff line change
Expand Up @@ -2006,6 +2006,21 @@ package object config {
.checkValue(v => v > 0, "The max failures should be a positive value.")
.createWithDefault(40)

private[spark] val PIPELINED_GROUP_SLOT_CHECK_ENABLED =
ConfigBuilder("spark.scheduler.pipelinedGroup.slotCheck.enabled")
.internal()
.doc("When true, before co-scheduling a pipelined-shuffle stage group the DAGScheduler " +
"checks that the group's total task demand fits in the currently free slots of its " +
"resource profile (total capacity minus the outstanding -- running plus enqueued -- " +
"tasks of other work), and fails the job with CONCURRENT_SCHEDULER_INSUFFICIENT_SLOT " +
"rather than co-scheduling a group that cannot fit and deadlocking. Set to false for " +
"deployments that admit capacity out-of-band (e.g. a slot reservation), which then own " +
"admission. Only applies to jobs that use a pipelined shuffle dependency.")
.version("4.3.0")
.withBindingPolicy(ConfigBindingPolicy.NOT_APPLICABLE)
.booleanConf
.createWithDefault(true)

private[spark] val NUM_CANCELLED_JOB_GROUPS_TO_TRACK =
ConfigBuilder("spark.scheduler.numCancelledJobGroupsToTrack")
.doc("The maximum number of tracked job groups that are cancelled with " +
Expand Down
22 changes: 22 additions & 0 deletions core/src/main/scala/org/apache/spark/scheduler/ActiveJob.scala
Original file line number Diff line number Diff line change
Expand Up @@ -63,4 +63,26 @@ private[spark] class ActiveJob(
val finished = Array.fill[Boolean](numPartitions)(false)

var numFinished = 0

/**
* Whether this job's RDD graph uses a `PipelinedShuffleDependency` (set once at job submission).
* Every pipelined-group scheduling path -- co-scheduling, deferral, and the per-submit
* `TaskSet.isPipelined` tagging -- is inert for a job without one, so this flag lets those paths
* short-circuit the group-membership graph walk for the common regular job at no cost.
*/
var hasPipelinedDependency: Boolean = false

/**
* True once this job's pipelined group has passed up-front gang admission in
* `handleJobSubmitted` (or the slot check was disabled by config). This is a distinct fact from
* `hasPipelinedDependency` (which only says the job uses pipelining): the co-schedule path in
* `DAGScheduler.submitStage` gang-schedules a group's members with NO slot check, and checks this
* flag so that trust in up-front admission is enforced rather than merely commented.
*
* The whole job is a single pipelined group, so admission is a job-level fact. If a future change
* allows multiple groups per job, this job-level flag must be replaced by per-group admission
* state, and the check in `submitStage` replaced by that per-group gate -- NOT simply deleted, or
* an unadmitted group could be gang-scheduled and deadlock.
*/
var pipelinedGroupAdmitted: Boolean = false
}
Loading