Network problems in ES/EDS (if occur) does now allow: 1) delete attachment which initiated this ES; 2) shuttown DB (!) ----------------------------------------------------------------------------------------------------------------------
Key: CORE-5609 URL: http://tracker.firebirdsql.org/browse/CORE-5609 Project: Firebird Core Issue Type: Bug Components: Engine Affects Versions: 3.0.2, 2.5.7 Reporter: Pavel Zotov 1. Create following script (note that bogon IP = 192.0.2.2 is used as node that for sure will not be ever reached, so its using will always cause network trouble): === set list on; select current_timestamp as dts_beg from rdb$database; set term ^; execute block returns (c int) as begin execute statement 'select 1 from rdb$database' on external '192.0.2.2:' || rdb$get_context('SYSTEM', 'DB_NAME') as user 'SYSDBA' password 'masterkey' into c; suspend; end ^ set term ;^ select current_timestamp as dts_end from rdb$database; === 2. Run this script: C:\FB\25sC\bin\isql /:e25 -i ext-conn-test.sql You will see that both in 2.5 and 3.0 it will hangs approx. for ~45 seconds. Eventually console will contain output like this: === DTS_BEG 2017-09-11 00:51:58.1160 Statement failed, SQLSTATE = 42000 Execute statement error at attach : 335544721 : Unable to complete network request to host "192.0.2.2". 335544722 : Failed to establish a connection. Data source : Firebird::192.0.2.2:C:\FBTESTING\QA\FBT-REPO\TMP\E25.FDB -At block line: 3, col: 5 After line 3 in file ext-conn-test.sql DTS_END 2017-09-11 00:52:42.1500 === 3. Create another script that will be used to kill all attachments but show data of them (except his own and, for 3.0+, ecxept system connections created by cache writer and GC): === set list on; commit; select current_timestamp, 'Point #1. List of attachments that now are alive and should be killed:' msg from rdb$database; set term ^; execute block returns ( mon_attachment_id type of column mon$attachments.mon$attachment_id ,mon_server_pid type of column mon$attachments.mon$server_pid ,mon_state type of column mon$attachments.mon$state ,mon_attachment_name type of column mon$attachments.mon$attachment_name ,mon_user type of column mon$attachments.mon$user ,mon_role type of column mon$attachments.mon$role ,mon_remote_protocol type of column mon$attachments.mon$remote_protocol ,mon_remote_address type of column mon$attachments.mon$remote_address ,mon_remote_pid type of column mon$attachments.mon$remote_pid ,mon_character_set_id type of column mon$attachments.mon$character_set_id ,mon_timestamp type of column mon$attachments.mon$timestamp ,mon_garbage_collection type of column mon$attachments.mon$garbage_collection ,mon_remote_process type of column mon$attachments.mon$remote_process ,mon_stat_id type of column mon$attachments.mon$stat_id ) as declare v_id bigint; begin for select mon$attachment_id ,mon$server_pid ,mon$state ,mon$attachment_name ,mon$user ,mon$role ,mon$remote_protocol ,mon$remote_address ,mon$remote_pid ,mon$character_set_id ,mon$timestamp ,mon$garbage_collection ,mon$remote_process ,mon$stat_id from mon$attachments where mon$attachment_id != current_connection and mon$remote_protocol is not null into mon_attachment_id ,mon_server_pid ,mon_state ,mon_attachment_name ,mon_user ,mon_role ,mon_remote_protocol ,mon_remote_address ,mon_remote_pid ,mon_character_set_id ,mon_timestamp ,mon_garbage_collection ,mon_remote_process ,mon_stat_id as cursor c do begin delete from mon$attachments where current of c; suspend; end end ^ set term ;^ commit; -- !!! .C.O.M.M.I.T. !!! select current_timestamp, 'Point #2. Check that NO attachments appear below this message becaus they are already killed:' msg from rdb$database; set count on; select mon$attachment_id ,mon$server_pid ,mon$state ,mon$attachment_name ,mon$user ,mon$role ,mon$remote_protocol ,mon$remote_address ,mon$remote_pid ,mon$character_set_id ,mon$timestamp ,mon$garbage_collection ,mon$remote_process ,mon$stat_id from mon$attachments where mon$attachment_id != current_connection and mon$remote_protocol is not null ; set count off; select current_timestamp, 'Poing #3. ---------------------------------- end of script -------------------------------' msg from rdb$database; === 4. Now run again script from "1." and try to kill attaches - during it will hangs for ~45 seconds run another window and isql plus script from "3". You will see that attachment that is WAITING for reply from bogon IP can not be killed. Moreover, you even will not be able to SHUTDOWN (!) database until this problem will gone: attachment fields will be displayed after text "Point #2. Check that NO attachments appear below this message becaus they are already killed" but this should not be so. Checked on Win 8.1 Pro 64 bit, FB builds : WI-V3.0.3.32798 (25-aug-2017) - SC; SS WI-V2.5.8.27070 (23-aug-2017) - SC only. PS. Yet another note, about 2.5.x. Run script from "1." and terminate its work by pressing Ctrl-Break. Than (AFTER terminating and return to OS shell prompt) run script from "3". You will see that attachment still exists. This will be so about 60 seconds. No such effect on 3.0 (both SS and SC). -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://tracker.firebirdsql.org/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot Firebird-Devel mailing list, web interface at https://lists.sourceforge.net/lists/listinfo/firebird-devel