Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ class ErrorClassesJsonReader(jsonFileURLs: Seq[URL]) {
errorClasses match {
case Array(mainClass) => errorInfoMap.contains(mainClass)
case Array(mainClass, subClass) => errorInfoMap.get(mainClass).exists { info =>
info.subClass.get.contains(subClass)
info.subClass.exists(_.contains(subClass))
}
case _ => false
}
Expand Down
44 changes: 44 additions & 0 deletions core/src/test/scala/org/apache/spark/SparkThrowableSuite.scala
Original file line number Diff line number Diff line change
Expand Up @@ -503,6 +503,50 @@ class SparkThrowableSuite extends SparkFunSuite {
}
}

test("isValidErrorClass with a main class that has no sub-classes") {
withTempDir { dir =>
val json = new File(dir, "errors.json")
Files.writeString(json.toPath(),
"""
|{
| "MAIN_NO_SUBCLASS" : {
| "message" : [
| "abc"
| ]
| },
| "MAIN_WITH_SUBCLASS" : {
| "message" : [
| "abc"
| ],
| "subClass" : {
| "VALID_SUB" : {
| "message" : [
| "def"
| ]
| }
| }
| }
|}
|""".stripMargin, StandardCharsets.UTF_8)
val reader = new ErrorClassesJsonReader(Seq(errorJsonFilePath.toUri.toURL, json.toURI.toURL))
// A main class with no sub-classes is valid on its own, but querying it with a sub-class
// must return false rather than throw NoSuchElementException (reachable from user SQL).
assert(reader.isValidErrorClass("MAIN_NO_SUBCLASS"))
assert(!reader.isValidErrorClass("MAIN_NO_SUBCLASS.NON_EXISTENT"))
// A main class that does define sub-classes: main-only and a valid sub are valid; an
// unknown sub is not.
assert(reader.isValidErrorClass("MAIN_WITH_SUBCLASS"))
assert(reader.isValidErrorClass("MAIN_WITH_SUBCLASS.VALID_SUB"))
assert(!reader.isValidErrorClass("MAIN_WITH_SUBCLASS.NON_EXISTENT_SUB"))
// Unknown main class: well-formed but not registered.
assert(!reader.isValidErrorClass("NON_EXISTENT"))
assert(!reader.isValidErrorClass("NON_EXISTENT.SUB"))
// Malformed: empty string or more than two parts.
assert(!reader.isValidErrorClass(""))
assert(!reader.isValidErrorClass("MAIN_NO_SUBCLASS.X.Y"))
}
}

test("breaking changes info") {
assert(SparkThrowableHelper.getBreakingChangeInfo(null).isEmpty)

Expand Down