[ 
https://issues.apache.org/jira/browse/CASSANDRA-9202?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Sylvain Lebresne updated CASSANDRA-9202:
----------------------------------------
    Assignee:     (was: Benjamin Lerer)

> Introduce CQL Error Codes
> -------------------------
>
>                 Key: CASSANDRA-9202
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-9202
>             Project: Cassandra
>          Issue Type: Improvement
>            Reporter: Michaël Figuière
>             Fix For: 3.x
>
>
> As features have been added or modified over the past years, the constraints 
> applied on the CQL language itself have evolved rapidly, making it 
> challenging for users, but also for documentation writers, testers and 
> developers tools developers to keep up with what's possible or not, but also 
> to understand the meaning of each error message and the rule behind it.
> Besides it, as error messages for any single error may change over time to 
> fix a typo or to rephrase it, they cannot be used as a stable reference of 
> errors.
> It feels like the right time to make error handling more formal in Cassandra, 
> by introducing a very classic mechanism in the database world: error codes. 
> The purpose of this ticket is to introduce these codes, but *does not* cover 
> the way they should then be exposed. Bellow is my proposition along with the 
> strategy I used:
> *Gathering Cassandra errors*
> I've walked through the source of all the past releases of Cassandra its git 
> repo using a script in order to capture all the CQL related 
> {{InvalidRequestException}} that are thrown. Considering it represents most 
> of the CQL errors that may be returned by Cassandra.
> Bellow is the list of all errors that have been introduced and modified 
> between Cassandra 1.2.0 and the current trunk:
> https://gist.github.com/mfiguiere/3036c2a54af016bbeb58
> The complete list of CQL errors declared in each Cassandra source file, along 
> with the range of versions in which they appeared is as follow:
> https://gist.github.com/mfiguiere/42166586647c34b1a41c
> That's a lot of them... Clearly we can only focus on Cassandra 3.0+ here, 
> that is on the current trunk.
> *Categorizing errors*
> It's common for database to categorize errors in order to make it simpler for 
> the user to understand its nature or to walk through a list of them:
> * PostgreSQL 
> (http://www.postgresql.org/docs/9.4/static/errcodes-appendix.html)
> * MySQL (http://dev.mysql.com/doc/refman/5.6/en/error-messages-server.html)
> * Oracle (http://docs.oracle.com/cd/B28359_01/server.111/b28278/toc.htm)
> One issue that can be observed in these 3 examples is that the codes they use 
> are fairly cryptic and not really readable.
> It felt to me that a categorization by feature would be helpful for 
> Cassandra. And rather than building hexadecimal prefixes, let's use readable 
> string ones. We then end up with the following list of CQL error codes:
> https://gist.github.com/mfiguiere/7a19f8368b3ab4fbef3a
> That's about 260 errors overall for the current trunk, but broken into 
> categories it feels to me that it remains very easy to browse and review.
> *Native Protocol Error Codes vs. CQL Error Codes*
> We actually already introduced the concept of error codes into the Native 
> Protocol specification. These codes represent execution exceptions and are 
> used by the clients to understand the kind of problem that occurred.
> I propose to rename these error codes to "Execution Error Codes" and to 
> introduce with this ticket "CQL Error Codes", as they address two different 
> kind of issues and audiences.
> *Introducing CQL Error Codes*
> Once an agreement will be reached on the list of error the strategy to 
> introduce them into the codebase would be as follow:
> 1. We have to wait until CASSANDRA-8099 is merged, as it'll significantly 
> change the way Exceptions are manipulated in the CQL codebase.
> 2. We introduce a {{cql_errors.spec}} file that defines the list of all CQL 
> errors that may be thrown by Cassandra.
> 3. We modify the sources to introduce the appropriate cqlErrorCode along with 
> any error that is declared.
> 4. Once merged, any subsequent addition or modification of an error in the 
> sources in the future should lead to the appropriate mutation of the 
> {{cql_errors.spec}} file in order to keep it in sync.
> *Benefits*
> I see several benefits in this approach:
> * Provides an immediate, comprehensive documentation of the CQL Errors (and 
> thus the corresponding rules and constraints).
> * Easy to maintain. Easy to repair in case of missed update through some 
> greps in the codebase.
> * Being guaranteed to be maintained, it can serve as a solid reference for 
> any of the more detailed documentation that are produced (CQL spec, Cassandra 
> doc,...).
> * Provides a clear summary of the errors thrown by each features of 
> Cassandra, making it simple to catch inconsistencies, lack of normalization, 
> and duplicates.
> * Will enable easier implementation of sophisticated features in monitoring 
> and developer tools such as counters of error codes, help for errors sent by 
> Cassandra, external CQL validation, ...
> * SEO / StackOverflow friendly.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to