Konstantin Osipov
authored
Send error messages to the client. Before this patch, Tarantool would only send an error code to the client, but record all the details in its error log. This patch extends the client/server protocol and adds error text to it. This text can now contain not only a staple message that corresponds to the error, but problem-related additional information, such as namespace id, field number, etc. All errors still can be logged in the error log, but not all of them need to be. For errors, which are only sent to the client, this patch uses ClientError exception class. Errors which also need to be logged in the error log must use LoggedError exception class. To choose between the two, the following rule of thumb is applied: - client application errors, which, generally, can be non-errors at all, such as access to a non-existing namespace, index or field, or access to a locked tuple are not logged - execution and protocol errors, such as an error writing to disk, an message that doesn't follow the protocol format, is logged. For the most common error, ER_TUPLE_IS_RO, we do not use string template to reduce CPU cycles necessary to produce this error (on my machine one can raise ~200 000 exceptions per second, which is not too much). An addition to the above, this patch renames error codes, to make them shorter (ERR_CODE_* -> ER_*) and rewrites the iproto.m client connection loop to make it a trifle more efficient. This patch also fixes a couple of bugs: - in exception.m, [tnt_Exception alloc] when we reused the old exception class, we did not reset its 'isa' pointer, which could lead to a crash when a message with a different signature was sent to it. - in box_dispatch (renamed from box_dispach), when logging for slow commands was done, txn->op could already be overwritten by txn_commit()/txn_abort(). A comment on the naming scheme: prefixing every Tarantool piece of method/data structure with tnt_ would lead to very bloated code. So in this patch I decided to reduce the use this prefix to the client library code and some very generic names only.
Name | Last commit | Last update |
---|---|---|
.. | ||
developer | ||
user | ||
CMakeLists.txt | ||
box-protocol.txt | ||
coding-style.txt | ||
sql.txt | ||
tnt.ent.cmake |