imply-cheddar commented on code in PR #13564: URL: https://github.com/apache/druid/pull/13564#discussion_r1049207581
########## core/src/main/java/org/apache/druid/query/QueryException.java: ########## @@ -30,12 +29,126 @@ import java.util.function.Function; /** - * Base serializable error response - * + * Base serializable error response. + * <p> + * The Object Model that QueryException follows is a little non-intuitive as the primary way that a QueryException is + * generated is through a child class. However, those child classes are *not* equivalent to a QueryException, instead + * they act as a Factory of QueryException objects. This can be seen in two different places. + * <p> + * 1. When sanitize() is called, the response is a QueryException without any indication of which original exception + * occurred. + * 2. When these objects get serialized across the wire the recipient deserializes a QueryException. The client is + * never expected, and fundamentally is not allowed to, ever deserialize a child class of QueryException. + * <p> + * For this reason, QueryException must contain all potential state that any of its child classes could ever want to + * push across the wire. Additionally, any catch clauses expecting one of the child Exceptions must know that it is + * running inside of code where the exception has not traveled across the wire. If there is a chance that the + * exception could have been serialized across the wire, the code must catch a QueryException and check the errorCode + * instead. + * <p> + * As a correlary, adding new state or adjusting the logic of this class must always be done in a backwards-compatible Review Comment: Yes, I left a comment in the JsonParserIterator code to that effect. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected] --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
