cloud-fan commented on code in PR #43926:
URL: https://github.com/apache/spark/pull/43926#discussion_r1400179808


##########
core/src/test/scala/org/apache/spark/JobCancellationSuite.scala:
##########
@@ -153,6 +153,91 @@ class JobCancellationSuite extends SparkFunSuite with 
Matchers with BeforeAndAft
     assert(jobB.get() === 100)
   }
 
+  test("if cancel job group and future jobs, skip running jobs in the same job 
group") {
+    sc = new SparkContext("local[2]", "test")
+
+    val sem = new Semaphore(0)
+    sc.addSparkListener(new SparkListener {
+      override def onJobStart(jobStart: SparkListenerJobStart): Unit = {
+        sem.release()
+      }
+    })
+
+    val jobGroupName = "job-group"
+
+    val jobA = Future {
+      sc.setJobGroup(jobGroupName, "")
+      sc.parallelize(1 to 1000).map { i => Thread.sleep (100); i}.count()
+    }
+    // Block until jobA starts
+    sem.acquire(1)
+    // Cancel the job group and future jobs
+    sc.cancelJobGroupAndFutureJobs(jobGroupName)
+    ThreadUtils.awaitReady(jobA, Duration.Inf).failed.foreach { case e: 
SparkException =>
+      checkError(
+        exception = e,
+        errorClass = "SPARK_JOB_CANCELLED",
+        sqlState = "XXKDA",
+        parameters = scala.collection.immutable.Map(
+          "jobId" -> "0",
+          "reason" -> s"part of cancelled job group $jobGroupName")
+      )
+    }
+
+    // jobB in the same job group will not run
+    val jobB = Future {
+      sc.setJobGroup(jobGroupName, "")
+      sc.parallelize(1 to 100).count()
+    }
+    ThreadUtils.awaitReady(jobB, Duration.Inf).failed.foreach { case e: 
SparkException =>
+      checkError(
+        exception = e,
+        errorClass = "SPARK_JOB_CANCELLED",
+        sqlState = "XXKDA",
+        parameters = scala.collection.immutable.Map(
+          "jobId" -> "1",
+          "reason" -> s"part of cancelled job group $jobGroupName")
+      )
+    }
+
+    // jobC in a different job group should run
+    val jobC = Future {
+      sc.setJobGroup("another-job-group", "")
+      sc.parallelize(1 to 100).count()
+    }
+    assert(ThreadUtils.awaitResult(jobC, Duration.Inf) == 100)
+  }
+
+  test("only keeps limited number of cancelled job groups") {
+    sc = new SparkContext("local[2]", "test")

Review Comment:
   to make this test run faster, can we set `CANCELLED_JOB_GROUP_SET_SIZE` to a 
small numner?



##########
core/src/test/scala/org/apache/spark/JobCancellationSuite.scala:
##########
@@ -153,6 +153,91 @@ class JobCancellationSuite extends SparkFunSuite with 
Matchers with BeforeAndAft
     assert(jobB.get() === 100)
   }
 
+  test("if cancel job group and future jobs, skip running jobs in the same job 
group") {
+    sc = new SparkContext("local[2]", "test")
+
+    val sem = new Semaphore(0)
+    sc.addSparkListener(new SparkListener {
+      override def onJobStart(jobStart: SparkListenerJobStart): Unit = {
+        sem.release()
+      }
+    })
+
+    val jobGroupName = "job-group"
+
+    val jobA = Future {
+      sc.setJobGroup(jobGroupName, "")
+      sc.parallelize(1 to 1000).map { i => Thread.sleep (100); i}.count()
+    }
+    // Block until jobA starts
+    sem.acquire(1)
+    // Cancel the job group and future jobs
+    sc.cancelJobGroupAndFutureJobs(jobGroupName)
+    ThreadUtils.awaitReady(jobA, Duration.Inf).failed.foreach { case e: 
SparkException =>
+      checkError(
+        exception = e,
+        errorClass = "SPARK_JOB_CANCELLED",
+        sqlState = "XXKDA",
+        parameters = scala.collection.immutable.Map(
+          "jobId" -> "0",
+          "reason" -> s"part of cancelled job group $jobGroupName")
+      )
+    }
+
+    // jobB in the same job group will not run
+    val jobB = Future {
+      sc.setJobGroup(jobGroupName, "")
+      sc.parallelize(1 to 100).count()
+    }
+    ThreadUtils.awaitReady(jobB, Duration.Inf).failed.foreach { case e: 
SparkException =>
+      checkError(
+        exception = e,
+        errorClass = "SPARK_JOB_CANCELLED",
+        sqlState = "XXKDA",
+        parameters = scala.collection.immutable.Map(
+          "jobId" -> "1",
+          "reason" -> s"part of cancelled job group $jobGroupName")
+      )
+    }
+
+    // jobC in a different job group should run
+    val jobC = Future {
+      sc.setJobGroup("another-job-group", "")
+      sc.parallelize(1 to 100).count()
+    }
+    assert(ThreadUtils.awaitResult(jobC, Duration.Inf) == 100)
+  }
+
+  test("only keeps limited number of cancelled job groups") {
+    sc = new SparkContext("local[2]", "test")

Review Comment:
   to make this test run faster, can we set `CANCELLED_JOB_GROUP_SET_SIZE` to a 
small number?



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


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

Reply via email to