@@ -180,11 +180,7 @@ trait ProgressReporter extends Logging {
180180 currentStatus = currentStatus.copy(isTriggerActive = false )
181181 }
182182
183- /**
184- * Extract statistics about stateful operators from the executed query plan.
185- * SPARK-19378: Still report stateOperator metrics even though no data was processed while
186- * reporting progress.
187- */
183+ /** Extract statistics about stateful operators from the executed query plan. */
188184 private def extractStateOperatorMetrics (hasNewData : Boolean ): Seq [StateOperatorProgress ] = {
189185 if (lastExecution == null ) return Nil
190186 // lastExecution could belong to one of the previous triggers if `!hasNewData`.
@@ -204,32 +200,31 @@ trait ProgressReporter extends Logging {
204200 }
205201 }
206202
207- /**
208- * Extract statistics about event time from the executed query plan.
209- * SPARK-19378: Still report eventTime metrics even though no data was processed while
210- * reporting progress.
211- */
212- private def extractEventTimeStats (watermarkTs : Map [String , String ]): Map [String , String ] = {
213- if (lastExecution == null ) return watermarkTs
203+ /** Extract statistics about event time from the executed query plan. */
204+ private def extractEventTimeStats (): Map [String , String ] = {
205+ val hasEventTime = logicalPlan.collect { case e : EventTimeWatermark => e }.nonEmpty
206+ val watermarkTimestamp =
207+ if (hasEventTime) Map (" watermark" -> formatTimestamp(offsetSeqMetadata.batchWatermarkMs))
208+ else Map .empty[String , String ]
209+
210+ if (lastExecution == null || ! hasEventTime) return watermarkTimestamp
211+
214212 lastExecution.executedPlan.collect {
215213 case e : EventTimeWatermarkExec if e.eventTimeStats.value.count > 0 =>
216214 val stats = e.eventTimeStats.value
217215 Map (
218216 " max" -> stats.max,
219217 " min" -> stats.min,
220218 " avg" -> stats.avg).mapValues(formatTimestamp)
221- }.headOption.getOrElse(Map .empty) ++ watermarkTs
219+ }.headOption.getOrElse(Map .empty)
222220 }
223221
224222 /** Extracts statistics from the most recent query execution. */
225223 private def extractExecutionStats (hasNewData : Boolean ): ExecutionStats = {
226- val hasEventTime = logicalPlan.collect { case e : EventTimeWatermark => e }.nonEmpty
227- val watermarkTimestamp =
228- if (hasEventTime) Map (" watermark" -> formatTimestamp(offsetSeqMetadata.batchWatermarkMs))
229- else Map .empty[String , String ]
230224
225+ // SPARK-19378: Still report metrics even though no data was processed while reporting progress.
231226 val stateOperators = extractStateOperatorMetrics(hasNewData)
232- val eventTimeStats = extractEventTimeStats(watermarkTimestamp )
227+ val eventTimeStats = extractEventTimeStats()
233228
234229 if (! hasNewData) {
235230 return ExecutionStats (Map .empty, stateOperators, eventTimeStats)
0 commit comments