Skip to content

Commit a1b61bf

Browse files
xingchaozhGitHub Enterprise
authored andcommitted
[CARMEL-6006] Log stack trace to track the source of query cancelation (#962)
1 parent 6fc4fea commit a1b61bf

File tree

4 files changed

+12
-5
lines changed

4 files changed

+12
-5
lines changed

sql/hive-thriftserver/src/main/scala/org/apache/spark/sql/hive/thriftserver/SparkDownloadDataOperation.scala

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -577,7 +577,9 @@ private[hive] class SparkDownloadDataOperation(
577577

578578
override def cancel(): Unit = {
579579
if (statementId != null) {
580-
HiveThriftServer2.eventManager.onStatementCanceled(statementId)
580+
HiveThriftServer2.eventManager.onStatementCanceled(statementId,
581+
s"Canceling operation, stack trace:\n"
582+
+ Thread.currentThread().getStackTrace.mkString("\n"))
581583
}
582584
HiveThriftServer2.eventManager.onQueryExist(
583585
statementId,

sql/hive-thriftserver/src/main/scala/org/apache/spark/sql/hive/thriftserver/SparkExecuteStatementOperation.scala

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -588,7 +588,9 @@ private[hive] class SparkExecuteStatementOperation(
588588
// 'InterruptedException', which could be misleading, the query final state
589589
// should be canceled instead of failed. Hence we need guarantee that the
590590
// cancellation event is posted before the query execution is actually canceled.
591-
HiveThriftServer2.eventManager.onStatementCanceled(statementId)
591+
HiveThriftServer2.eventManager.onStatementCanceled(statementId,
592+
s"Canceling operation, stack trace:\n"
593+
+ Thread.currentThread().getStackTrace.mkString("\n"))
592594
cleanup()
593595
}
594596
}

sql/hive-thriftserver/src/main/scala/org/apache/spark/sql/hive/thriftserver/ui/HiveThriftServer2EventManager.scala

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,10 @@ private[thriftserver] class HiveThriftServer2EventManager(sc: SparkContext) {
6161
postLiveListenerBus(SparkListenerThriftServerOperationParsed(id, executionPlan))
6262
}
6363

64-
def onStatementCanceled(id: String): Unit = {
65-
postLiveListenerBus(SparkListenerThriftServerOperationCanceled(id, System.currentTimeMillis()))
64+
def onStatementCanceled(id: String, reason: String = ""): Unit = {
65+
postLiveListenerBus(SparkListenerThriftServerOperationCanceled(id,
66+
reason,
67+
System.currentTimeMillis()))
6668
}
6769

6870
def onStatementError(id: String, errorMsg: String, errorTrace: String): Unit = {
@@ -115,7 +117,7 @@ private[thriftserver] case class SparkListenerThriftServerOperationParsed(
115117
executionPlan: String) extends SparkListenerEvent
116118

117119
private[thriftserver] case class SparkListenerThriftServerOperationCanceled(
118-
id: String, finishTime: Long) extends SparkListenerEvent
120+
id: String, reason: String, finishTime: Long) extends SparkListenerEvent
119121

120122
private[thriftserver] case class SparkListenerThriftServerOperationError(
121123
id: String,

sql/hive-thriftserver/src/main/scala/org/apache/spark/sql/hive/thriftserver/ui/HiveThriftServer2Listener.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,7 @@ private[thriftserver] class HiveThriftServer2Listener(
278278
private def onOperationCanceled(e: SparkListenerThriftServerOperationCanceled): Unit = {
279279
executionList.get(e.id).finishTimestamp = e.finishTime
280280
executionList.get(e.id).state = ExecutionState.CANCELED
281+
executionList.get(e.id).detail = e.reason
281282
updateLiveStore(executionList.get(e.id))
282283
}
283284

0 commit comments

Comments
 (0)