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

'truncate table' make server crash in sharding&ha configuration when wrapper is oracle

    XMLWordPrintable

Details

    • Bug
    • Status: Closed (View Workflow)
    • Minor
    • Resolution: Won't Fix
    • 10.0.22
    • N/A
    • None
    • windows centos

    Description

      In sharding&ha configuration, "truncate table/delete from table" statement will make the server crash when wrapper is oracle, but it is ok when wrapper is mysql.

      -------------------------------------
      example:
      CREATE SERVER ora_backend1
      FOREIGN DATA WRAPPER oracle
      OPTIONS(
      HOST '$ORA_BACKEND1_IP',
      PORT $ORA_BACKEND1_PORT,
      DATABASE '$ORA_DATABASE',
      USER '$ORA_USER',
      PASSWORD '$ORA_PWD'
      );
      SELECT SPIDER_DIRECT_SQL('begin execute immediate \'DROP TABLE "FED_HA1"\'; exception when others then null; end;', '', 'srv "ora_backend1"');
      SELECT SPIDER_DIRECT_SQL('create table fed_ha1(a int , b float, c varchar(10), d char(10), e date)', '', 'srv "ora_backend1"');

      SELECT SPIDER_DIRECT_SQL('begin execute immediate \'DROP TABLE "FED_HA2"\'; exception when others then null; end;', '', 'srv "ora_backend1"');
      SELECT SPIDER_DIRECT_SQL('create table fed_ha2(a int , b float, c varchar(10), d char(10), e date)', '', 'srv "ora_backend1"');

      --echo create spider table on proxy
      drop table if exists ora_fed_ha;
      create table ora_fed_ha(A int, B float, C varchar(10), D char(10), E date) ENGINE = SPIDER CONNECTION='wrapper "oracle", table "FED_HA1 FED_HA2", srv "ora_backend1 ora_backend1"';

      insert into ora_fed_ha values(1, 1.1, 'aaaa1', 'bbbbbb1', null);
      select * from ora_fed_ha;
      dtruncate ora_fed_ha;
      -------------------------------------
      This may be cased by an oversight, because in all other functions

      SPIDER_CONN *conn = conns[roop_count];
      spider_db_handler *dbton_hdl = dbton_handler[conn->dbton_id];

      is used to get spider_db_handler.
      for example, line 6327 in spider_db_update function of spd_db_conn.cc
      https://github.com/MariaDB/server/blob/10.1/storage/spider/spd_db_conn.cc

      'truncate table' make server crash when wrapper is oracle but ok when wrapper is mysql, because coincidence of value.
      for example, there are two tables, myt1 and orat1.
      create table myt1(A int) ENGINE = SPIDER CONNECTION='wrapper "oracle", table "T1 T2", srv "my_backend1 my_backend1"';
      create table orat1(A int) ENGINE = SPIDER CONNECTION='wrapper "oracle", table "T1 T2", srv "ora_backend1 ora_backend1"';
      for myt1, the memory value is
      SPIDER_SHARE.use_sql_dbton_count=1
      SPIDER_SHARE.use_sql_dbton_ids[0]=0
      SPIDER_SHARE.use_sql_dbton_ids[1]=0 initial value
      ha_spider.dbton_handler[0] is the pointer of mysql_db_handler object
      ha_spider.dbton_handler[1]=0
      for orat1, the memory value is
      SPIDER_SHARE.use_sql_dbton_count=1
      SPIDER_SHARE.use_sql_dbton_ids[0]=1
      SPIDER_SHARE.use_sql_dbton_ids[1]=0 initial value
      ha_spider.dbton_handler[0]=0
      ha_spider.dbton_handler[1] is the pointer of oracle_db_handler object

      when execute codes

      dbton_id = share->use_sql_dbton_ids[roop_count];
      spider_db_handler *dbton_hdl = spider->dbton_handler[dbton_id];

      For the first link and second link of myt1, dbton_id is 0 and can get the right dbton_handler.
      For orat1, the first link's dbton_id is 1 and can get the right dbton_handler.
      But the second link's dbton_id is 0, and ha_spider.dbton_handler[0]=0, then the null point make the server crash.
      --------------------------------------------------------

      have fixed the problem and create a pull request
      https://github.com/MariaDB/server/pull/129

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              chengxiaoz chengxiaoz
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Git Integration

                  Error rendering 'com.xiplink.jira.git.jira_git_plugin:git-issue-webpanel'. Please contact your Jira administrators.