Firebird is returninig the wrong information from database after waiting on a 
lock
----------------------------------------------------------------------------------

                 Key: CORE-3764
                 URL: http://tracker.firebirdsql.org/browse/CORE-3764
             Project: Firebird Core
          Issue Type: Bug
    Affects Versions: 2.5.0
         Environment: Windows 7 32 bits.
Firebird 2.5.0.26074.
            Reporter: Nataniel
            Priority: Critical


Firebird is returninig the wrong information from database after waiting for a 
lock to be released.

The problem can be easely simulated with this steps:

01 - Create a table "Table_01" with the following fields: Field_01, Field_02 
and Field_03 (script 01) and insert some data (script 02).

02 - Open IBExpert and register the database and configure the transactions 
(Tools -> Database registration info -> Transactions) as following: 
isc_tpb_read_committed, isc_tpb_rec_version and isc_tpb_wait

03 - Execute the following SQL command into the database
        select 
            Field_01, 
            Field_02, 
            Field_03 
        from Table_01 
        where Field_03 is null 
        order by Field_02 
        rows 5 
        for update with lock;
        
     This query returns 5 rows with Field_01's value 1, 2, 3, 4 and 5.
        
04 - Open a second instance of IBExpert and executed the same SQL command, as 
the first sql command locked the records the second one keep waiting.

05 - Get back to the first IbExpert instance and execute the following command 
to update the record being locked and commit the transaction.
        update Table_01 set 
                Field_03 = -1 
        where Field_01 in (1, 2, 3, 4, 5);

06 - After commiting the first transaction it releases the lock and the second 
one continue executing but returns "random data", instead of returining rows 6, 
7, 8, 9 and 10 it sometimes returns nothing, sometimes return 4 itens (codes 6 
to 9).

This problem generate enormous issues on softwares with severe concurrency.

Below as the scripts to create the table and populate it.

Script 01: 
                    CREATE TABLE TABLE_01 (
                        FIELD_01  INTEGER NOT NULL,
                        FIELD_02  VARCHAR(100),
                        FIELD_03  INTEGER
                    );

                    ALTER TABLE TABLE_01 ADD CONSTRAINT PK_TABLE_01 PRIMARY KEY 
(FIELD_01);
                    
                    
Script 02:                     
                    INSERT INTO TABLE_01 (FIELD_01, FIELD_02, FIELD_03) VALUES 
(1,  'ITEM 01', NULL);
                    INSERT INTO TABLE_01 (FIELD_01, FIELD_02, FIELD_03) VALUES 
(2,  'ITEM 02', NULL);
                    INSERT INTO TABLE_01 (FIELD_01, FIELD_02, FIELD_03) VALUES 
(3,  'ITEM 03', NULL);
                    INSERT INTO TABLE_01 (FIELD_01, FIELD_02, FIELD_03) VALUES 
(4,  'ITEM 04', NULL);
                    INSERT INTO TABLE_01 (FIELD_01, FIELD_02, FIELD_03) VALUES 
(5,  'ITEM 05', NULL);
                    INSERT INTO TABLE_01 (FIELD_01, FIELD_02, FIELD_03) VALUES 
(6,  'ITEM 06', NULL);
                    INSERT INTO TABLE_01 (FIELD_01, FIELD_02, FIELD_03) VALUES 
(7,  'ITEM 07', NULL);
                    INSERT INTO TABLE_01 (FIELD_01, FIELD_02, FIELD_03) VALUES 
(8,  'ITEM 08', NULL);
                    INSERT INTO TABLE_01 (FIELD_01, FIELD_02, FIELD_03) VALUES 
(9,  'ITEM 09', NULL);
                    INSERT INTO TABLE_01 (FIELD_01, FIELD_02, FIELD_03) VALUES 
(10, 'ITEM 10', NULL);
                    INSERT INTO TABLE_01 (FIELD_01, FIELD_02, FIELD_03) VALUES 
(11, 'ITEM 11', NULL);
                    INSERT INTO TABLE_01 (FIELD_01, FIELD_02, FIELD_03) VALUES 
(12, 'ITEM 12', NULL);
                    INSERT INTO TABLE_01 (FIELD_01, FIELD_02, FIELD_03) VALUES 
(13, 'ITEM 13', NULL);
                    INSERT INTO TABLE_01 (FIELD_01, FIELD_02, FIELD_03) VALUES 
(14, 'ITEM 14', NULL);
                    INSERT INTO TABLE_01 (FIELD_01, FIELD_02, FIELD_03) VALUES 
(15, 'ITEM 15', NULL);
                    INSERT INTO TABLE_01 (FIELD_01, FIELD_02, FIELD_03) VALUES 
(16, 'ITEM 16', NULL);
                    INSERT INTO TABLE_01 (FIELD_01, FIELD_02, FIELD_03) VALUES 
(17, 'ITEM 17', NULL);
                    INSERT INTO TABLE_01 (FIELD_01, FIELD_02, FIELD_03) VALUES 
(18, 'ITEM 18', NULL);
                    INSERT INTO TABLE_01 (FIELD_01, FIELD_02, FIELD_03) VALUES 
(19, 'ITEM 19', NULL);
                    INSERT INTO TABLE_01 (FIELD_01, FIELD_02, FIELD_03) VALUES 
(20, 'ITEM 20', NULL);
                    INSERT INTO TABLE_01 (FIELD_01, FIELD_02, FIELD_03) VALUES 
(21, 'ITEM 21', NULL);
                    INSERT INTO TABLE_01 (FIELD_01, FIELD_02, FIELD_03) VALUES 
(22, 'ITEM 22', NULL);
                    INSERT INTO TABLE_01 (FIELD_01, FIELD_02, FIELD_03) VALUES 
(23, 'ITEM 23', NULL);
                    INSERT INTO TABLE_01 (FIELD_01, FIELD_02, FIELD_03) VALUES 
(24, 'ITEM 24', NULL);
                    INSERT INTO TABLE_01 (FIELD_01, FIELD_02, FIELD_03) VALUES 
(25, 'ITEM 25', NULL);
                    INSERT INTO TABLE_01 (FIELD_01, FIELD_02, FIELD_03) VALUES 
(26, 'ITEM 26', NULL);
                    INSERT INTO TABLE_01 (FIELD_01, FIELD_02, FIELD_03) VALUES 
(27, 'ITEM 27', NULL);
                    INSERT INTO TABLE_01 (FIELD_01, FIELD_02, FIELD_03) VALUES 
(28, 'ITEM 28', NULL);
                    INSERT INTO TABLE_01 (FIELD_01, FIELD_02, FIELD_03) VALUES 
(29, 'ITEM 29', NULL);
                    INSERT INTO TABLE_01 (FIELD_01, FIELD_02, FIELD_03) VALUES 
(30, 'ITEM 30', NULL);
                    
COMMIT WORK;

-- 
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

        

------------------------------------------------------------------------------
Virtualization & Cloud Management Using Capacity Planning
Cloud computing makes use of virtualization - but cloud computing 
also focuses on allowing computing to be delivered as a service.
http://www.accelacomm.com/jaw/sfnl/114/51521223/
Firebird-Devel mailing list, web interface at 
https://lists.sourceforge.net/lists/listinfo/firebird-devel

Reply via email to