Uploaded image for project: 'MariaDB Server'
  1. MariaDB Server
  2. MDEV-5122

"Commands out of sync", "Malformed packet" or client hang up on unique key violation

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Critical
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: 10.0.5
    • Component/s: None
    • Labels:
      None

      Description

      The problems started happening from the following revision on 10.0-base-explain-slowquerylog

      revno: 3711
      revision-id: psergey@askmonty.org-20131007132951-lhe4earylf5m2vmp
      message:
        MDEV-3798: EXPLAIN UPDATE/DELETE
        - Add support for EXPLAIN INSERT.
      

      and are still reproducible on the current tree:

      bzr version-info
      revision-id: psergey@askmonty.org-20131009090746-6zfqg47elbhnquac
      revno: 3715
      branch-nick: 10.0-base-explain-slowquerylog
      BUILD/compile-pentium-debug-max-no-ndb
      

      The first test case is an extract from federated.federatedx test, slightly modified to work on a single server.

      drop database if exists federated;
      drop table if exists test.t1;
      create database federated;
      create table federated.t1 (a int primary key, b varchar(64))   DEFAULT CHARSET=utf8;
      create table test.t1 (a int primary key, b varchar(64))  ENGINE=FEDERATED connection='mysql://root@127.0.0.1:3306/federated/t1' DEFAULT CHARSET=utf8;
      insert into test.t1 values (1,"Larry"), (2,"Curly"), (1,"Moe") on duplicate key update a=a+100;
      select * from t1;
      

      According to the federated test, the INSERT should fail with ER_DUP_KEY, but on some reason it doesn't:

      MariaDB [test]> insert into test.t1 values (1,"Larry"), (2,"Curly"), (1,"Moe") on duplicate key update a=a+100;
      Query OK, 3 rows affected (0.02 sec)
      Records: 3  Duplicates: 0  Warnings: 0
      

      And the following SELECT fails with "Commands out of sync":

      MariaDB [test]> select * from t1;
      ERROR 2014 (HY000): Received error: 2014 : Commands out of sync; you can't run this command now
      

      The second test case is based on a fragment from rpl.rpl_sp:

      drop table if exists t1;
      drop function if exists fn1;
      create table t1 (a int, unique(a));
      
      delimiter |;
      create function fn1(x int)
        returns int
      begin
        insert into t1 values(x),(x);
        return 10;
      end|
      delimiter ;|
      
      do fn1(100);
      

      The DO command hangs. The processlist does not show any queries in the thread, but the query in the client does not finish.

      If it is replaced with SELECT fn1(100), it causes an error:

      MariaDB [test]> select fn1(100);
      ERROR 2027 (HY000): Malformed packet
      

        Gliffy Diagrams

          Attachments

            Issue Links

              Activity

              There are no comments yet on this issue.

                People

                • Assignee:
                  psergey Sergei Petrunia
                  Reporter:
                  elenst Elena Stepanova
                • Votes:
                  0 Vote for this issue
                  Watchers:
                  1 Start watching this issue

                  Dates

                  • Created:
                    Updated:
                    Resolved: