1. 27 Jun, 2019 4 commits
    • Monty's avatar
      MDEV-17551 assert or crashed table when using blobs · 9053047f
      Monty authored
      The bug was that when long item-strings was converted to VARCHAR,
      type_handler::string_type_handler() didn't take into account max
      VARCHAR length.  The resulting Aria temporary table was created with
      a VARCHAR field of length 1 when it should have been 65537. This caused
      MariaDB to send impossible records to ma_write() and Aria reported
      eventually the table as crashed.
      
      Fixed by updating Type_handler::string_type_handler() to not create too long
      VARCHAR fields. To make things extra safe, I also added checks in when
      writing dynamic Aria records to ensure we find the wrong record during write
      instead of during read.
      9053047f
    • Marko Mäkelä's avatar
      MDEV-19845: Fix the build on some platforms · f5c080c7
      Marko Mäkelä authored
      On some platforms, MY_RELAX_CPU() falls back to an atomic
      memory operation, but my_cpu.h fails to include my_atomic.h.
      f5c080c7
    • Marko Mäkelä's avatar
      MDEV-19845: Fix the build on some x86 targets · 0b7fa5a0
      Marko Mäkelä authored
      The RDTSC instruction, which was introduced in the Intel Pentium,
      has been used in MariaDB for a long time. But, the __rdtsc()
      wrapper is not available by default in some x86 build environments.
      The simplest solution seems to replace the inlined instruction
      with a call to the wrapper function my_timer_cycles(). The overhead
      for the call should not affect the measurement threshold.
      
      On Windows and on AMD64, we will keep using __rdtsc() directly.
      0b7fa5a0
    • Marko Mäkelä's avatar
      MDEV-19845: Adaptive spin loops · 042fc295
      Marko Mäkelä authored
      Starting with the Intel Skylake microarchitecture, the PAUSE
      instruction latency is about 140 clock cycles instead of earlier 10.
      On AMD processors, the latency could be 10 or 50 clock cycles,
      depending on microarchitecture.
      
      Because of this big range of latency, let us scale the loops around
      the PAUSE instruction based on timing results at server startup.
      
      my_cpu_relax_multiplier: New variable: How many times to invoke PAUSE
      in a loop. Only defined for IA-32 and AMD64.
      
      my_cpu_init(): Determine with RDTSC the time to run 16 PAUSE instructions
      in two unrolled loops according, and based on the quicker of the two
      runs, initialize my_cpu_relax_multiplier. This form of calibration was
      suggested by Mikhail Sinyavin from Intel.
      
      LF_BACKOFF(), ut_delay(): Use my_cpu_relax_multiplier when available.
      
      ut_delay(): Define inline in my_cpu.h.
      
      UT_COMPILER_BARRIER(): Remove. This does not seem to have any effect,
      because in our ut_delay() implementation, no computations are being
      performed inside the loop. The purpose of UT_COMPILER_BARRIER() was to
      prohibit the compiler from reordering computations. It was not
      emitting any code.
      042fc295
  2. 24 Jun, 2019 1 commit
  3. 21 Jun, 2019 1 commit
  4. 19 Jun, 2019 1 commit
  5. 18 Jun, 2019 4 commits
    • Michael Widenius's avatar
      MDEV-19595 fixed · 8acbf9c1
      Michael Widenius authored
      The test cases for the MDEV found several independent bugs
      in MariaDB server and Aria:
      - If a temporary table was marked as crashed, it could never
        be deleted.
      - Opening of a crashed temporary table gave an error message
        but the error was never forwarded to the caller which caused
        an assert() in my_ok()
      - init_read_record() did mmap of all temporary tables, which is
        probably not a good idea as this area can potentially be
        very big. Changed code to only mmap internal temporary tables.
      - mmap-ed tables where not unmapped in case of repair/optimize
        which caused bad data in table and crashes if the original
        table files where replaced with new ones (as the old mmap
        was still in place). Fixed by removing the mmap in case
        of repair.
      - Cleaned up usage of code that disabled mmap in Aria
      8acbf9c1
    • Michael Widenius's avatar
      MDEV-18078 Assertion `trnman_has_locked_tables(trn) > 0' failed · b23c82fe
      Michael Widenius authored
      Problem was that in case of implicit rollback for alter table
      Aria did try to run commit twice.
      
      The test case for this is tricky to do in 10.2, so it will
      be added to 10.4 as part of BACKUP STAGE testing.
      b23c82fe
    • mkaruza's avatar
      MDEV-18940 Galera: Rolling upgrade: all nodes except upgraded node5 failed... · 03f3ba2d
      mkaruza authored
      MDEV-18940 Galera: Rolling upgrade: all nodes except upgraded node5 failed with Assertion `meta->gtid.seqno == wsrep_thd_trx_seqno(thd)' with SEQUENCEs (#1342)
      
      Empty write sets will not trigger apply callback, and will not
      update thread wsrep_trx_meta.gtid.seqno. Because of that assert will
      be triggered when commit callback is called.
      03f3ba2d
    • Alexander Barkov's avatar
      MDEV-17363 - Compressed columns cannot be restored from dump · 5352e968
      Alexander Barkov authored
      In collaboration with Sergey Vojtovich <svoj@mariadb.org>
      
      The COMPRESSED clause is now a part of the data type and goes immediately
      after the data type and length, but before the CHARACTER SET clause,
      and before column attributes such as DEFAULT, COLLATE, ON UPDATE,
      SYSTEM VERSIONING, engine specific column attributes.
      
      In the old reduction, the COMPRESSED clause was a column attribute.
      
      New syntax:
        <varchar or text data type> <length> <compression> <character set> <column attributes>
        <varbinary or blob data type> <length> <compression> <column attributes>
      
      New syntax examples:
        VARCHAR(1000) COMPRESSED CHARACTER SET latin1 DEFAULT ''
        BLOB COMPRESSED DEFAULT ''
      
      Deprecate syntax examples:
        VARCHAR(1000) CHARACTER SET latin1 COMPRESSED DEFAULT ''
        TEXT          CHARACTER SET latin1 DEFAULT '' COMPRESSED
        VARBINARY(1000) DEFAULT '' COMPRESSED
      
      As a side effect:
      - COMPRESSED is not valid as an SP label name in SQL/PSM routines any more
        (but it's still valid as an SP label name in sql_mode=ORACLE)
      
      - COMPRESSED is now allowed in combination with GENERATED ALWAYS AS:
      
        TEXT COMPRESSED GENERATED ALWAYS AS REPEAT('a',1000)
      5352e968
  6. 17 Jun, 2019 6 commits
  7. 16 Jun, 2019 7 commits
  8. 15 Jun, 2019 3 commits
  9. 14 Jun, 2019 7 commits
  10. 13 Jun, 2019 3 commits
  11. 12 Jun, 2019 3 commits