Uploaded image for project: 'Phoenix'
  1. Phoenix
  2. PHOENIX-2169

Illegal data error on UPSERT SELECT and JOIN with salted tables

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 4.5.0
    • 4.7.0
    • None

    Description

      I have an issue where I get periodic failures (~50%) for an UPSERT SELECT query involving a JOIN on salted tables. Unfortunately I haven't been able to create a reproducible test case yet, though I'll keep trying. I believe this same behaviour existed in 4.3.1 as well, so I don't think it's a regression.

      The upsert query itself looks something like this:

      UPSERT INTO a(tid, ds, etp, eid, ts, atp, rel, tp, tpid, dt, pro) 
      SELECT c.tid, 
             c.ds, 
             c.etp, 
             c.eid, 
             c.dh, 
             0, 
             c.rel, 
             c.tp, 
             c.tpid, 
             current_time(), 
             1.0 / s.th 
      FROM   e_c c 
      join   e_s s 
      ON     s.tid = c.tid 
      AND    s.ds = c.ds 
      AND    s.etp = c.etp 
      AND    s.eid = c.eid 
      WHERE  c.tid = 'FOO';
      

      Without the upsert, the query always returns the right data, but with the upsert, it ends up with failures like:
      Error: ERROR 201 (22000): Illegal data. ERROR 201 (22000): Illegal data. Expected length of at least 109 bytes, but had 19 (state=22000,code=201)

      The explain plan looks like:

      UPSERT SELECT
      CLIENT 16-CHUNK PARALLEL 16-WAY RANGE SCAN OVER E_C [0,'FOO']
            SERVER FILTER BY FIRST KEY ONLY
            PARALLEL INNER-JOIN TABLE 0
                CLIENT 16-CHUNK PARALLEL 16-WAY FULL SCAN OVER E_S
            DYNAMIC SERVER FILTER BY (C.TID, C.DS, C.ETP, C.EID) IN ((S.TID, S.DS, S.ETP, S.EID))
      

      I'm using SALT_BUCKETS=16 for both tables in the join, and this is a dev environment, so only 1 region server. Note that without salted tables, I have no issue with this query.

      The number of rows in E_C is around 23K, and the number of rows in E_S is 62.

      Attachments

        1. PHOENIX-2169_v2.patch
          5 kB
          Ankit Singhal
        2. PHOENIX-2169.patch
          6 kB
          Ankit Singhal
        3. PHOENIX-2169-bug.patch
          3 kB
          Josh Mahonin

        Issue Links

          Activity

            People

              ankit.singhal Ankit Singhal
              jmahonin Josh Mahonin
              Votes:
              2 Vote for this issue
              Watchers:
              7 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: