Bug #86507 End of stream exception in combination with MySQL Router
Submitted: 30 May 2017 11:29 Modified: 22 Jun 2018 11:45
Reporter: Uwe Beierlein Email Updates:
Status: Can't repeat Impact on me:
None 
Category:MySQL Router Severity:S2 (Serious)
Version:2.1.3 OS:Windows
Assigned to: CPU Architecture:Any

[30 May 2017 11:29] Uwe Beierlein
Description:
When connecting through MySQL Router in a C# Application 
(via MySQL .NET Connector), an exception gets thrown,
when the query returns about 1000 Rows.

No exception appears, when exactly the same query gets executed 
from within HeidiSQL via MySQL Router.

I'm using .NET Connector with Version 6.9.8 but also tried it with version 6.9.9.

Excerpt of the MySQL Router log:

------------
2017-05-30 13:06:41 DEBUG   [2658] [routing:failover] TCP connection from 680 accepted at 127.0.0.1:3310
2017-05-30 13:06:41 DEBUG   [2fbc] [routing:failover] source [127.0.0.1]:51045 - dest [192.168.1.8]:3306
2017-05-30 13:06:43 DEBUG   [d18] Write error: SystemError: Ein nicht blockierender Socketvorgang konnte nicht sofort ausgeführt werden.
2017-05-30 13:06:43 DEBUG   [d18] [routing:failover] Routing stopped (up:1047513b;down:34890b) Copy server-client failed: SystemError: Ein nicht blockierender Socketvorgang konnte nicht sofort ausgeführt werden.
------------

I know that you will say that it must be a bug in MySQL-Router.
But why does the same query work with HeidiSQL via the same MySQL-Router instance?

How to repeat:
Create a Test-Table:
----------------------

CREATE TABLE `TEST_BUG` (
	`tb_id` INT(10) NOT NULL AUTO_INCREMENT,
	`tbv_num` INT(11) NOT NULL,
	`tb_rgnr_tmp` SMALLINT(6) NOT NULL,
	`tbd_id` TINYINT(4) NOT NULL DEFAULT '-1',
	`if_id` INT(11) NOT NULL,
	`tbt_id` SMALLINT(6) NOT NULL DEFAULT '100',
	`ev_id` SMALLINT(6) NOT NULL DEFAULT '1',
	`tb_condition` TINYINT(3) NOT NULL DEFAULT '0',
	`tb_condition_before` TINYINT(3) NOT NULL DEFAULT '0',
	`GERA_ABRG_NR` INT(10) UNSIGNED NULL DEFAULT NULL,
	`tb_id_orig` INT(10) NULL DEFAULT NULL,
	`tb_id_predecessor` INT(10) NULL DEFAULT NULL,
	`tb_rechnr` VARCHAR(15) NOT NULL DEFAULT '',
	`tb_lab_id` VARCHAR(20) NOT NULL DEFAULT '',
	`tb_num_staple` INT(11) NOT NULL DEFAULT '-1',
	`tb_case` VARCHAR(30) NOT NULL DEFAULT '',
	`mand_num` INT(11) NOT NULL,
	`tb_sub_account` VARCHAR(4) NOT NULL DEFAULT '',
	`tb_sub_doc` INT(10) UNSIGNED NOT NULL DEFAULT '0',
	`bene_id` INT(10) NULL DEFAULT NULL,
	`con_id_bene` INT(11) NULL DEFAULT NULL,
	`tb_mandant_hba_nr` VARCHAR(40) NOT NULL DEFAULT '',
	`tb_mandant_tax_id` VARCHAR(20) NOT NULL DEFAULT '',
	`tb_mandant_kzv_nr` INT(11) NOT NULL DEFAULT '0',
	`tb_kasse` TINYINT(4) NOT NULL DEFAULT '-1',
	`tb_kasse_long` INT(10) UNSIGNED NOT NULL DEFAULT '0',
	`tb_kasse_name` VARCHAR(30) NOT NULL DEFAULT '',
	`tb_ins_state` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0',
	`tb_ins_state_char` VARCHAR(5) NOT NULL DEFAULT '',
	`tb_isunfall` TINYINT(1) NOT NULL DEFAULT '0',
	`tb_cust` SMALLINT(6) NOT NULL DEFAULT '0',
	`tb_valuta` DATE NULL DEFAULT NULL,
	`tb_pos_amount_should` SMALLINT(6) NOT NULL DEFAULT '0',
	`tb_fee_doc` DECIMAL(9,2) NOT NULL DEFAULT '0.00',
	`tb_fee_common` DECIMAL(9,2) NOT NULL DEFAULT '0.00',
	`tb_fee_special` DECIMAL(9,2) NOT NULL DEFAULT '0.00',
	`tb_rbet` DECIMAL(11,2) NOT NULL DEFAULT '0.00',
	`tb_rbet_pas` DECIMAL(11,2) NOT NULL DEFAULT '0.00',
	`tb_value_brutto` DECIMAL(10,2) NOT NULL DEFAULT '0.00',
	`tb_anzahlung` DECIMAL(9,2) NOT NULL DEFAULT '0.00',
	`tb_nachlass` DECIMAL(9,2) NOT NULL DEFAULT '0.00',
	`tb_share_val` DECIMAL(9,2) NOT NULL DEFAULT '0.00',
	`tb_share_val_expected` DECIMAL(8,2) NOT NULL DEFAULT '0.00',
	`tb_share_percent` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0',
	`tb_share_own` DECIMAL(9,2) NOT NULL DEFAULT '0.00',
	`tb_share_type` TINYINT(3) UNSIGNED NOT NULL DEFAULT '1',
	`tb_sharer_id` INT(20) UNSIGNED NOT NULL DEFAULT '0',
	`tb_contraction_rate` DECIMAL(5,2) NOT NULL DEFAULT '0.00',
	`tb_remission_rate` DECIMAL(5,2) NOT NULL DEFAULT '0.00',
	`tb_pay_extra` DECIMAL(9,2) NOT NULL DEFAULT '0.00',
	`tb_pay_extra_note` CHAR(1) NOT NULL DEFAULT '0',
	`tb_insta_arranger` CHAR(1) NOT NULL DEFAULT 'P',
	`tb_insta_val_first` DECIMAL(9,2) NOT NULL DEFAULT '0.00',
	`tb_insta_amount` INT(3) UNSIGNED NOT NULL DEFAULT '0',
	`tb_insta_start` DATE NULL DEFAULT NULL,
	`tb_insta_duration` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0',
	`tb_insta_value` DECIMAL(8,2) NOT NULL DEFAULT '0.00',
	`tb_insta_type` CHAR(1) NOT NULL DEFAULT '',
	`tb_insta_mandate_reference` VARCHAR(40) NOT NULL DEFAULT '',
	`tb_creditor_id` VARCHAR(20) NOT NULL DEFAULT '',
	`tb_reb_num` VARCHAR(8) NOT NULL DEFAULT '',
	`tb_txt_abr_anw` MEDIUMTEXT NOT NULL,
	`tb_txt_diag` MEDIUMTEXT NOT NULL,
	`tb_txt_rg_anf` MEDIUMTEXT NOT NULL,
	`tb_txt_rg_end` MEDIUMTEXT NOT NULL,
	`tb_vertragsart` TINYINT(3) UNSIGNED NOT NULL DEFAULT '1',
	`tb_anlage_kz` CHAR(1) NOT NULL,
	`insu_id` INT(10) NULL DEFAULT NULL,
	`tb_cust_id` VARCHAR(10) NOT NULL DEFAULT '',
	`tb_cust_anrede` CHAR(1) NOT NULL DEFAULT '0',
	`tb_cust_titel` VARCHAR(20) NOT NULL DEFAULT '',
	`tb_cust_namensvorsatz` VARCHAR(50) NOT NULL DEFAULT '',
	`tb_cust_namenszusatz` VARCHAR(20) NOT NULL DEFAULT '',
	`tb_cust_name` VARCHAR(255) NOT NULL DEFAULT '',
	`tb_cust_vorname` VARCHAR(50) NOT NULL DEFAULT '',
	`tb_cust_nachname` VARCHAR(50) NOT NULL DEFAULT '',
	`tb_cust_name_birth` VARCHAR(40) NOT NULL DEFAULT '',
	`tb_cust_str` VARCHAR(50) NOT NULL DEFAULT '',
	`tb_cust_hausnr` VARCHAR(16) NOT NULL DEFAULT '',
	`tb_cust_lpo` VARCHAR(255) NOT NULL DEFAULT '',
	`tb_cust_land` VARCHAR(3) NOT NULL DEFAULT '',
	`tb_cust_plz` VARCHAR(10) NOT NULL DEFAULT '',
	`tb_cust_ort` VARCHAR(50) NOT NULL DEFAULT '',
	`tb_cust_an_zusatz` VARCHAR(255) NOT NULL DEFAULT '',
	`tb_cust_postfach` VARCHAR(10) NOT NULL DEFAULT '',
	`tb_cust_packstation` VARCHAR(10) NOT NULL DEFAULT '',
	`tb_cust_staat` VARCHAR(3) NOT NULL DEFAULT '',
	`tb_cust_gebdat` DATE NULL DEFAULT NULL,
	`tb_cust_geschlecht` CHAR(1) NOT NULL DEFAULT '0',
	`tb_cust_tel` VARCHAR(30) NOT NULL DEFAULT '',
	`tb_cust_email` VARCHAR(40) NOT NULL DEFAULT '',
	`tb_cust_blz` INT(10) UNSIGNED NOT NULL DEFAULT '0',
	`tb_cust_kto` BIGINT(20) UNSIGNED NOT NULL DEFAULT '0',
	`tb_cust_iban` VARCHAR(34) NOT NULL DEFAULT '',
	`tb_cust_bic` VARCHAR(12) NOT NULL DEFAULT '',
	`tb_cust_bank` VARCHAR(70) NOT NULL DEFAULT '',
	`tb_cust_bank_holder` VARCHAR(136) NOT NULL DEFAULT '',
	`tb_cust_elv_eve` TINYINT(1) NOT NULL DEFAULT '0',
	`con_id_minor` INT(10) NULL DEFAULT NULL,
	`tb_min_id` VARCHAR(10) NOT NULL DEFAULT '',
	`tb_min_anrede` CHAR(1) NOT NULL DEFAULT '0',
	`tb_min_name` VARCHAR(255) NOT NULL DEFAULT '',
	`tb_min_vorname` VARCHAR(50) NOT NULL DEFAULT '',
	`tb_min_nachname` VARCHAR(50) NOT NULL DEFAULT '',
	`tb_min_name_birth` VARCHAR(40) NOT NULL DEFAULT '',
	`tb_min_gebdat` DATE NULL DEFAULT NULL,
	`tb_min_geschlecht` CHAR(1) NOT NULL DEFAULT '',
	`tb_min_namensvorsatz` VARCHAR(20) NOT NULL DEFAULT '',
	`tb_min_namenszusatz` VARCHAR(20) NOT NULL DEFAULT '',
	`tb_min_titel` VARCHAR(20) NOT NULL DEFAULT '',
	`tb_min_str` VARCHAR(50) NOT NULL DEFAULT '',
	`tb_min_hausnr` VARCHAR(9) NOT NULL DEFAULT '',
	`tb_min_lpo` VARCHAR(255) NOT NULL DEFAULT '',
	`tb_min_land` VARCHAR(3) NOT NULL DEFAULT '',
	`tb_min_plz` VARCHAR(10) NOT NULL DEFAULT '',
	`tb_min_ort` VARCHAR(50) NOT NULL DEFAULT '',
	`tb_min_an_zusatz` VARCHAR(255) NOT NULL DEFAULT '',
	`tb_min_staat` VARCHAR(3) NOT NULL DEFAULT '',
	`tb_min_tel` VARCHAR(30) NOT NULL DEFAULT '',
	`tb_min_email` VARCHAR(40) NOT NULL DEFAULT '',
	`tb_min_relative` INT(1) UNSIGNED NOT NULL DEFAULT '0',
	`tb_k_vunr` VARCHAR(7) NOT NULL DEFAULT '',
	`tb_k_vnr` VARCHAR(12) NOT NULL DEFAULT '',
	`tb_k_pnr` VARCHAR(10) NOT NULL DEFAULT '',
	`tb_iknr` INT(9) UNSIGNED NOT NULL DEFAULT '0',
	`tb_stat_dat_aufn` DATE NULL DEFAULT NULL,
	`tb_stat_dat_entl` DATE NULL DEFAULT NULL,
	`tb_stat_tage` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0',
	`tb_stat_klasse` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0',
	`tb_stat_text_kz` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0',
	`tb_stat_abzug_kz` CHAR(1) NOT NULL DEFAULT '',
	`tb_dat_plan` DATE NULL DEFAULT NULL,
	`tb_dat_plan_ext` DATE NULL DEFAULT NULL,
	`tb_dat_start` DATETIME NULL DEFAULT NULL,
	`tb_dat_end` DATETIME NULL DEFAULT NULL,
	`tb_case_description` VARCHAR(60) NOT NULL DEFAULT '',
	`tb_case_diag_code` VARCHAR(6) NOT NULL DEFAULT '',
	`tb_case_diag_system` VARCHAR(6) NOT NULL DEFAULT '',
	`tb_case_diag_type` VARCHAR(255) NOT NULL DEFAULT '',
	`tb_case_diag_kind` CHAR(1) NOT NULL DEFAULT '',
	`tb_case_diag_date` DATE NULL DEFAULT NULL,
	`tb_case_diag_surety` CHAR(1) NOT NULL DEFAULT '',
	`tb_case_diag_loc` CHAR(1) NOT NULL DEFAULT '',
	`tb_rechnungstyp` CHAR(1) NOT NULL DEFAULT '',
	`tb_prozentsatz` DECIMAL(5,2) NOT NULL DEFAULT '0.00',
	`tb_waehrung` CHAR(3) NOT NULL DEFAULT '',
	`tb_mwst_proz` DECIMAL(4,2) NOT NULL DEFAULT '0.00',
	`tb_tax_val` DECIMAL(5,2) NOT NULL DEFAULT '0.00',
	`tb_druck_kz` CHAR(1) NOT NULL DEFAULT '',
	`tb_df_num_2` SMALLINT(6) NOT NULL DEFAULT '0',
	`tb_mandant_id` VARCHAR(16) NOT NULL DEFAULT '',
	`tb_zahlungsart` CHAR(1) NOT NULL DEFAULT '',
	`tb_abschlag` CHAR(1) NOT NULL DEFAULT '',
	`tb_no_dunning` TINYINT(1) NOT NULL DEFAULT '0',
	`tb_mahntage` INT(11) NOT NULL DEFAULT '0',
	`tb_info` VARCHAR(255) NOT NULL DEFAULT '',
	`tb_text` MEDIUMTEXT NOT NULL,
	`tb_changes` MEDIUMTEXT NOT NULL,
	`tb_val_edi` MEDIUMTEXT NOT NULL,
	`tb_val_cobol` MEDIUMTEXT NOT NULL,
	`tb_rule_message` VARCHAR(255) NOT NULL DEFAULT '',
	`tb_rule_info` VARCHAR(255) NOT NULL DEFAULT '',
	`tb_rule_warning` VARCHAR(255) NOT NULL DEFAULT '',
	`tb_rule_error` VARCHAR(255) NOT NULL DEFAULT '',
	`tb_options` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0',
	`tb_errcode` INT(11) NOT NULL DEFAULT '0',
	`tb_isdeleted` TINYINT(1) NOT NULL DEFAULT '0',
	`udat_id_create` INT(10) UNSIGNED NULL DEFAULT NULL,
	`tb_cdt` DATETIME NOT NULL,
	`udat_id_mod` INT(10) UNSIGNED NULL DEFAULT NULL,
	`tb_mdt` DATETIME NOT NULL,
	PRIMARY KEY (`tb_id`),
	UNIQUE INDEX `idx_tbv_num_tbd_id_tb_rgnr_tmp` (`tbv_num`, `tbd_id`, `tb_rgnr_tmp`) USING BTREE,
	INDEX `idx_tb_id_predecessor` (`tb_id_predecessor`),
	INDEX `idx_tb_id_orig` (`tb_id_orig`),
	INDEX `idx_if_id` (`if_id`),
	INDEX `idx_tb_rgnr_tmp` (`tb_rgnr_tmp`),
	INDEX `idx_tbd_id_mand_num_tb_condition` (`tbd_id`, `mand_num`, `tb_condition`),
	INDEX `idx_tb_cust_anrede_tb_cust_vorname_tbd_id` (`tb_cust_anrede`, `tb_cust_vorname`, `tbd_id`),
	INDEX `idx_tb_condition_ev_id_tbd_id_tb_isdeleted` (`tb_condition`, `ev_id`, `tbd_id`, `tb_isdeleted`),
	INDEX `idx_tbt_id` (`tbt_id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=1
;

----------------------

Create about 3000 rows.

Query all rows.
[30 May 2017 11:32] Uwe Beierlein
The exception gets thrown in MySQLStream.cs, Method "ReadFully".
[30 May 2017 11:45] Uwe Beierlein
Connection String (Port 3310 = MySQL-Router):

"server=localhost;port=3310;User Id=user;database=db;Connect Timeout=360000;Default Command Timeout=360000;Allow User Variables=True;Persist Security Info=False"

I will attach the MySQLRouter-Config, soon.
[30 May 2017 11:45] Uwe Beierlein
MySQL-Router Configuration File (Windows - under ProgramData)

Attachment: mysqlrouter.conf (application/octet-stream, text), 1.43 KiB.

[31 May 2017 12:39] Uwe Beierlein
Digging a bit deeper (in MySQL-Router Sources) I guess it is a MySQL-Router issue.

The error 10035 (WSAEWOULDBLOCK) appears in Method ClassicProtocol::copy_packets (Source-File classic_protocol.cc)
while trying to write an error-message to the receiver.

The root-cause seems to be a problem during handshake.
This could be a hint to improve implementation:
https://social.msdn.microsoft.com/Forums/vstudio/en-US/f29f93a4-fabb-443d-a599-37fb1ee281a...
[15 Aug 2017 14:30] Krish KM
Anyone found cure to this?
[22 Jun 2018 11:45] Chiranjeevi Battula
Hello Uwe Beierlein,

Thank you for the bug report.
I could not repeat the issue at our end using MySQL Router 8.0.11 version on Windows 10.
If you can provide more information, feel free to add it to this bug and change the status back to 'Open'.

Thank you for your interest in MySQL.

Thanks,
Chiranjeevi.