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 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.
  • CometExpressionSuite defines arithmeticError, which independently walks the chain to find a SparkArithmeticException.

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

Other 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 these cause-chain walks 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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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