Uploaded image for project: 'WiredTiger'
  1. WiredTiger
  2. WT-2210

crash when using lz4 compressor in column-store table

    • Type: Icon: Bug Bug
    • Resolution: Done
    • Priority: Icon: Major - P3 Major - P3
    • WT2.7.0
    • Affects Version/s: WT2.6.1
    • Component/s: None
    • None

      Hi!

      After we enable LZ4 block compression for our column-store table WT started to crash with the following backtrace:

      #1  <signal handler called>
      #2  0x00007fe1a02f75eb in __rec_split_raw_worker (session=0x7fe18fc40500, r=0x7fe18d85f600, next_len=0, no_more_rows=1) at /tb/builds/thd/sbn/2.6/src/thirdparty/wiredtiger/2.6.1/src/src/reconcile/rec_write.c:2234
      #3  0x00007fe1a02f4c72 in __rec_split_finish (session=0x7fe18fc40500, r=0x7fe18d85f600) at /tb/builds/thd/sbn/2.6/src/thirdparty/wiredtiger/2.6.1/src/src/reconcile/rec_write.c:2635
      #4  0x00007fe1a02f330d in __rec_col_var (session=0x7fe18fc40500, r=<optimized out>, page=<optimized out>, salvage=<optimized out>) at /tb/builds/thd/sbn/2.6/src/thirdparty/wiredtiger/2.6.1/src/src/reconcile/rec_write.c:4009
      #5  __wt_reconcile (session=0x7fe18fc40500, ref=0x7fe19a7d1b80, salvage=<optimized out>, flags=0) at /tb/builds/thd/sbn/2.6/src/thirdparty/wiredtiger/2.6.1/src/src/reconcile/rec_write.c:406
      #6  0x00007fe1a029ab47 in __sync_file (session=<optimized out>, syncop=<optimized out>) at /tb/builds/thd/sbn/2.6/src/thirdparty/wiredtiger/2.6.1/src/src/btree/bt_sync.c:77
      #7  __wt_cache_op (session=0x7fe18fc40500, ckptbase=<optimized out>, op=16) at /tb/builds/thd/sbn/2.6/src/thirdparty/wiredtiger/2.6.1/src/src/btree/bt_sync.c:257
      #8  0x00007fe1a03117c3 in __checkpoint_apply (session=0x7fe18fc40500, cfg=0x7fe188bf5950, op=0x7fe1a0311890 <__checkpoint_write_leaves>) at /tb/builds/thd/sbn/2.6/src/thirdparty/wiredtiger/2.6.1/src/src/txn/txn_ckpt.c:184
      #9  0x00007fe1a0310ad6 in __wt_txn_checkpoint (session=0x7fe18fc40500, cfg=0x7fe188bf5950) at /tb/builds/thd/sbn/2.6/src/thirdparty/wiredtiger/2.6.1/src/src/txn/txn_ckpt.c:405
      #10 0x00007fe1a0308bc6 in __session_checkpoint (wt_session=0x7fe18fc40500, config=<optimized out>) at /tb/builds/thd/sbn/2.6/src/thirdparty/wiredtiger/2.6.1/src/src/session/session_api.c:997
      #11 0x00007fe1a02aefe0 in __ckpt_server (arg=0x7fe18fc40500) at /tb/builds/thd/sbn/2.6/src/thirdparty/wiredtiger/2.6.1/src/src/conn/conn_ckpt.c:95
      #12 0x00007fe19ecd49d1 in start_thread () from /lib64/libpthread.so.0
      #13 0x00007fe19ea218fd in clone () from /lib64/libc.so.6
      (gdb) f 2
      #2  0x00007fe1a02f75eb in __rec_split_raw_worker (session=0x7fe18fc40500, r=0x7fe18d85f600, next_len=0, no_more_rows=1) at /tb/builds/thd/sbn/2.6/src/thirdparty/wiredtiger/2.6.1/src/src/reconcile/rec_write.c:2234
      2234                            r->raw_recnos[slots] = recno;
      (gdb) p r->raw_recnos
      $1 = (uint64_t *) 0x0
      (gdb) l
      2229                            r->raw_offsets[++slots] =
      2230                                WT_STORE_SIZE(len - WT_BLOCK_COMPRESS_SKIP);
      2231
      2232                    if (dsk->type == WT_PAGE_COL_INT ||
      2233                        dsk->type == WT_PAGE_COL_VAR)
      2234                            r->raw_recnos[slots] = recno;
      2235                    r->raw_entries[slots] = entry;
      2236            }
      2237
      2238            /*
      (gdb) p dsk->type
      $2 = 4 '\004'
      

      Moreover it also crashes while trying to recover this DB with similar backtrace:

      #1  <signal handler called>
      #2  0x00007f3740d625eb in __rec_split_raw_worker (session=0x7f372f45b900, r=0x7f37395aaa00, next_len=0, no_more_rows=1) at /tb/builds/thd/sbn/2.6/src/thirdparty/wiredtiger/2.6.1/src/src/reconcile/rec_write.c:2234
      #3  0x00007f3740d5fc72 in __rec_split_finish (session=0x7f372f45b900, r=0x7f37395aaa00) at /tb/builds/thd/sbn/2.6/src/thirdparty/wiredtiger/2.6.1/src/src/reconcile/rec_write.c:2635
      #4  0x00007f3740d5e30d in __rec_col_var (session=0x7f372f45b900, r=<optimized out>, page=<optimized out>, salvage=<optimized out>) at /tb/builds/thd/sbn/2.6/src/thirdparty/wiredtiger/2.6.1/src/src/reconcile/rec_write.c:4009
      #5  __wt_reconcile (session=0x7f372f45b900, ref=0x7f37395f9cd0, salvage=<optimized out>, flags=0) at /tb/builds/thd/sbn/2.6/src/thirdparty/wiredtiger/2.6.1/src/src/reconcile/rec_write.c:406
      #6  0x00007f3740d05b47 in __sync_file (session=<optimized out>, syncop=<optimized out>) at /tb/builds/thd/sbn/2.6/src/thirdparty/wiredtiger/2.6.1/src/src/btree/bt_sync.c:77
      #7  __wt_cache_op (session=0x7f372f45b900, ckptbase=<optimized out>, op=16) at /tb/builds/thd/sbn/2.6/src/thirdparty/wiredtiger/2.6.1/src/src/btree/bt_sync.c:257
      #8  0x00007f3740d7c7c3 in __checkpoint_apply (session=0x7f372f45b900, cfg=0x7fffaf15ee80, op=0x7f3740d7c890 <__checkpoint_write_leaves>) at /tb/builds/thd/sbn/2.6/src/thirdparty/wiredtiger/2.6.1/src/src/txn/txn_ckpt.c:184
      #9  0x00007f3740d7bad6 in __wt_txn_checkpoint (session=0x7f372f45b900, cfg=0x7fffaf15ee80) at /tb/builds/thd/sbn/2.6/src/thirdparty/wiredtiger/2.6.1/src/src/txn/txn_ckpt.c:405
      #10 0x00007f3740d73bc6 in __session_checkpoint (wt_session=0x7f372f45b900, config=<optimized out>) at /tb/builds/thd/sbn/2.6/src/thirdparty/wiredtiger/2.6.1/src/src/session/session_api.c:997
      #11 0x00007f3740d802f2 in __wt_txn_recover (session=<optimized out>) at /tb/builds/thd/sbn/2.6/src/thirdparty/wiredtiger/2.6.1/src/src/txn/txn_recover.c:523
      #12 0x00007f3740d1d4e9 in __wt_connection_workers (session=0x7f372f45b000, cfg=0x7fffaf15efb0) at /tb/builds/thd/sbn/2.6/src/thirdparty/wiredtiger/2.6.1/src/src/conn/conn_open.c:237
      #13 0x00007f3740d1641f in wiredtiger_open (home=<optimized out>, event_handler=<optimized out>, config=<optimized out>, wt_connp=0x7f37397c2400) at /tb/builds/thd/sbn/2.6/src/thirdparty/wiredtiger/2.6.1/src/src/conn/conn_api.c:2024
      ...
      (gdb) f 2
      #2  0x00007f3740d625eb in __rec_split_raw_worker (session=0x7f372f45b900, r=0x7f37395aaa00, next_len=0, no_more_rows=1) at /tb/builds/thd/sbn/2.6/src/thirdparty/wiredtiger/2.6.1/src/src/reconcile/rec_write.c:2234
      2234                            r->raw_recnos[slots] = recno;
      (gdb) p r->raw_recnos
      $1 = (uint64_t *) 0x0
      (gdb) p dsk->type
      $2 = 4 '\004'
      

      I'll attach broken DB and small C program that simply tries to open it (with recovery) and crashes.

      Thanks!

        1. compare.c
          2 kB
          Alexander Gorrod
        2. hd_alex.c
          0.7 kB
          Alexander Gorrod
        3. hd.c
          2 kB
          Dmitri Shubin
        4. hd.db.tar.gz
          8 kB
          Dmitri Shubin

            Assignee:
            keith.bostic@mongodb.com Keith Bostic (Inactive)
            Reporter:
            Dmitri Shubin Dmitri Shubin
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved: