Skip to content

Deduplicate Throwable cause-chain traversal in Comet tests #5223

Description

@peterxcli

What is the problem the feature request solves?

Several Comet test suites independently implement the same full Throwable.getCause traversal:

  • CometTemporalExpressionSuite defines causeChain for structured Spark exception checks added in fix: surface next_day and make_date ANSI errors as Spark exceptions #5167.
  • CometRegExpJvmSuite walks the chain to inspect exception class names.
  • ParquetReadSuite walks the chain to find SchemaColumnConvertNotSupportedException.
  • CometExecSuite contains two copies that inspect exception messages.

This duplicates null termination, ordering, and diagnostic behavior across five call sites in four suites.

Related code in CometExpressionSuite, CometDppFallbackRepro3949Suite, CometSQLQueryTestHelper, and CometCastSuite intentionally uses bounded, root-only, or one-level unwrapping semantics and should not be changed automatically.

Describe the potential solution

Add one protected causeChain(error: Throwable): Seq[Throwable] helper to CometTestBase and migrate the identical full-chain traversals to it.

Keep deepestSparkThrowable local to CometTemporalExpressionSuite because selecting the deepest structured Spark exception is currently unique policy; it can use the inherited causeChain helper. Do not introduce a universal structured-exception comparator or change tests that intentionally inspect only one cause level.

Validate that the migrated tests preserve outer-to-inner ordering and behavior across supported Spark versions.

Additional context

Raised while addressing review feedback on #5167.

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions