MXS-852: Handle one-way session commands
Session commands that will not return a response can be completed immediately. This requires some special code in the readwritesplit Backend class implementation as well as a small addition to the Backend class itself. Since not all commands expect a response from the server, the queued query routing function needs some adjustment. The routing of queued queries should be attempted until a command which expects a response is found or the queue is empty. By properly handling these types of session commands, the router can enable the execution of COM_STMT_CLOSE and COM_STMT_RESET on all servers. This will prevent resource leakages in the server and allow proper handling of COM_STMT type command.
This commit is contained in:
		| @ -104,27 +104,6 @@ is_packet_a_query(int packet_type) | ||||
|     return (packet_type == MYSQL_COM_QUERY); | ||||
| } | ||||
|  | ||||
| /* | ||||
|  * This looks MySQL specific | ||||
|  */ | ||||
| /** | ||||
|  * @brief Determine if a packet contains a one way message | ||||
|  * | ||||
|  * Packet type tells us this, but in a DB specific way. This function is | ||||
|  * provided so that code that is not DB specific can find out whether a packet | ||||
|  * contains a one way messsage. Clearly, to be effective different functions must be | ||||
|  * called for different DB types. | ||||
|  * | ||||
|  * @param packet_type   Type of packet (integer) | ||||
|  * @return bool indicating whether packet contains a one way message | ||||
|  */ | ||||
| bool command_will_respond(uint8_t packet_type) | ||||
| { | ||||
|     return packet_type != MYSQL_COM_STMT_SEND_LONG_DATA && | ||||
|            packet_type != MYSQL_COM_QUIT && | ||||
|            packet_type != MYSQL_COM_STMT_CLOSE; | ||||
| } | ||||
|  | ||||
| /* | ||||
|  * This one is problematic because it is MySQL specific, but also router | ||||
|  * specific. | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Markus Mäkelä
					Markus Mäkelä