1. 07 Sep, 2020 2 commits
  2. 04 Sep, 2020 9 commits
  3. 03 Sep, 2020 12 commits
    • Sergei Petrunia's avatar
      MDEV-23661: RocksDB produces "missing initializer for member" warnings · d63fcbc2
      Sergei Petrunia authored
      Add -Wno-missing-field-initializers for MyRocks and gcc version below 5.0
      d63fcbc2
    • Marko Mäkelä's avatar
      Merge 10.3 into 10.4 · 1cda462f
      Marko Mäkelä authored
      1cda462f
    • Marko Mäkelä's avatar
      Cleanup: Remove os0proc.* · 938db048
      Marko Mäkelä authored
      938db048
    • Marko Mäkelä's avatar
      Merge 10.3 into 10.4 · c9cf6b13
      Marko Mäkelä authored
      c9cf6b13
    • Sergei Petrunia's avatar
      Make rowid_filter_innodb test stable · b795adcf
      Sergei Petrunia authored
      It was failing on mac-1012-bintar.
      b795adcf
    • Marko Mäkelä's avatar
      MDEV-23651 InnoDB: Failing assertion: !space->referenced() · a7dd7c89
      Marko Mäkelä authored
      commit de942c9f (MDEV-15983)
      introduced a race condition that we inadequately fixed in
      commit 93b69825 (MDEV-16169).
      
      Because fil_space_t::release() or fil_space_t::acquire() are
      not protected by fil_system.mutex like their predecessors,
      it is possible that stop_new_ops was set between the time
      a thread checked fil_space_t::is_stopping() and invoked
      fil_space_t::acquire().
      
      In an execution trace, this happened in fil_system_t::keyrotate_next(),
      causing an assertion failure in fil_delete_tablespace()
      in the other thread that seeked to stop new operations.
      
      We fix this bug by merging the flag fil_space_t::stop_new_ops
      and the reference count fil_space_t::n_pending_ops into a
      single word that is only being accessed by atomic memory operations.
      
      fil_space_t::set_stopping(): Accessor for changing the state of
      the former stop_new_ops flag.
      
      fil_space_t::acquire(): Return whether the acquisition succeeded.
      It would fail between set_stopping(true) and set_stopping(false).
      a7dd7c89
    • Jan Lindström's avatar
      MDEV-21578 : CREATE OR REPLACE TRIGGER in Galera cluster not replicating · 33ae1616
      Jan Lindström authored
      In 10.3 OR REPLACE trigger option is part of create_info.
      33ae1616
    • Marko Mäkelä's avatar
      Merge 10.2 into 10.3 · c3752cef
      Marko Mäkelä authored
      c3752cef
    • Marko Mäkelä's avatar
      Merge 10.1 into 10.2 · 2a93e632
      Marko Mäkelä authored
      2a93e632
    • Marko Mäkelä's avatar
      MDEV-22387: Do not pass null pointer to some memcpy() · 94a520dd
      Marko Mäkelä authored
      Passing a null pointer to a nonnull argument is not only undefined
      behaviour, but it also grants the compiler the permission to optimize
      away further checks whether the pointer is null. GCC -O2 at least
      starting with version 8 may do that, potentially causing SIGSEGV.
      
      These problems were caught in a WITH_UBSAN=ON build with the
      Bug#7024 test in main.view.
      94a520dd
    • Marko Mäkelä's avatar
      MDEV-7110 follow-up fix: Do not pass NULL as nonnull parameter · a256070e
      Marko Mäkelä authored
      Passing a null pointer to the "%s" argument of a printf-like
      function is undefined behaviour. In the GNU libc implementation
      of the printf() family of functions, it happens to work.
      
      GCC 10.2.0 would diagnose this with -Wformat-overflow -Og.
      In -fsanitize=undefined (WITH_UBSAN=ON) builds, a runtime error
      would be generated. In some other builds, GCC 8 or later might infer
      that the parameter is nonnull and optimize away further checks whether
      the parameter is null, leading to SIGSEGV.
      a256070e
    • Alexander Barkov's avatar
      Part2: MDEV-23568 Improve performance of my_{time|date|datetime}_to_str() · 48ab5a49
      Alexander Barkov authored
      As an additional improvement, let's store string representations of
      the numbers using an array uint16[256] instead of char[512].
      This allows to use int2store(), which copies two bytes at a time on x86,
      instead of copying the two bytes with digits one-by-one.
      
      This change gives an additional 7% to 26% query time reduce for:
          SELECT BENCHMARK(10*1000*1000,CONCAT(TIME'10:20:30'));
          SELECT BENCHMARK(10*1000*1000,CONCAT(TIME'10:20:30.123456'));
          SELECT BENCHMARK(10*1000*1000,CONCAT(DATE'2001-01-01'));
          SELECT BENCHMARK(10*1000*1000,CONCAT(TIMESTAMP'2001-01-01 10:20:30'));
          SELECT BENCHMARK(10*1000*1000,CONCAT(TIMESTAMP'2001-01-01 10:20:30.123456'));
      
      The total time reduce (part1 + part2) is now between 15% to 38%
      for these queries.
      48ab5a49
  4. 02 Sep, 2020 5 commits
  5. 01 Sep, 2020 9 commits
  6. 31 Aug, 2020 3 commits
    • Andrei Elkin's avatar
      MDEV-16372 ER_BASE64_DECODE_ERROR upon replaying binary log via mysqlbinlog --verbose · feac078f
      Andrei Elkin authored
      (This commit is exclusively for 10.1 branch, do not merge it to upper ones)
      
      In case of a pattern of non-STMT_END-marked Rows-log-event (A) followed by
      a STMT_END marked one (B) mysqlbinlog mixes up the base64 encoded rows events
      with their pseudo sql representation produced by the verbose option:
            BINLOG '
              base64 encoded data for A
              ### verbose section for A
              base64 encoded data for B
              ### verbose section for B
            '/*!*/;
      In effect the produced BINLOG '...' query is not valid and is rejected with the error.
      Examples of this way malformed BINLOG could have been found in binlog_row_annotate.result
      that gets corrected with the patch.
      
      The issue is fixed with introduction an auxiliary IO_CACHE to hold on the verbose
      comments until the terminal STMT_END event is found. The new cache is emptied
      out after two pre-existing ones are done at that time.
      The correctly produced output now for the above case is as the following:
            BINLOG '
              base64 encoded data for A
              base64 encoded data for B
            '/*!*/;
              ### verbose section for A
              ### verbose section for B
      
      Thanks to Alexey Midenkov for the problem recognition and attempt to tackle,
      Venkatesh Duggirala who produced a patch for the upstream whose
      idea is exploited here, as well as to MDEV-23077 reporter LukeXwang who
      also contributed a piece of a patch aiming at this issue.
      
      Extra: mysqlbinlog_row_minimal refined to not produce mutable numeric values into the result file.
      feac078f
    • Andrei Elkin's avatar
      MDEV-16372 ER_BASE64_DECODE_ERROR upon replaying binary log via mysqlbinlog --verbose · caa35f8e
      Andrei Elkin authored
      (This commit is for 10.3 and upper branches)
      
      In case of a pattern of non-STMT_END-marked Rows-log-event (A) followed by
      a STMT_END marked one (B) mysqlbinlog mixes up the base64 encoded rows events
      with their pseudo sql representation produced by the verbose option:
            BINLOG '
              base64 encoded data for A
              ### verbose section for A
              base64 encoded data for B
              ### verbose section for B
            '/*!*/;
      In effect the produced BINLOG '...' query is not valid and is rejected with the error.
      Examples of this way malformed BINLOG could have been found in binlog_row_annotate.result
      that gets corrected with the patch.
      
      The issue is fixed with introduction an auxiliary IO_CACHE to hold on the verbose
      comments until the terminal STMT_END event is found. The new cache is emptied
      out after two pre-existing ones are done at that time.
      The correctly produced output now for the above case is as the following:
            BINLOG '
              base64 encoded data for A
              base64 encoded data for B
            '/*!*/;
              ### verbose section for A
              ### verbose section for B
      
      Thanks to Alexey Midenkov for the problem recognition and attempt to tackle,
      and to Venkatesh Duggirala who produced a patch for the upstream whose
      idea is exploited here, as well as to MDEV-23077 reporter LukeXwang who
      also contributed a piece of a patch aiming at this issue.
      caa35f8e
    • Andrei Elkin's avatar
      MDEV-16372 ER_BASE64_DECODE_ERROR upon replaying binary log via mysqlbinlog --verbose · 6112a0f9
      Andrei Elkin authored
      (This commit is exclusively for 10.2 branch. Do not merge it to 10.3)
      
      In case of a pattern of non-STMT_END-marked Rows-log-event (A) followed by
      a STMT_END marked one (B) mysqlbinlog mixes up the base64 encoded rows events
      with their pseudo sql representation produced by the verbose option:
            BINLOG '
              base64 encoded data for A
              ### verbose section for A
              base64 encoded data for B
              ### verbose section for B
            '/*!*/;
      In effect the produced BINLOG '...' query is not valid and is rejected with the error.
      Examples of this way malformed BINLOG could have been found in binlog_row_annotate.result
      that gets corrected with the patch.
      
      The issue is fixed with introduction an auxiliary IO_CACHE to hold on the verbose
      comments until the terminal STMT_END event is found. The new cache is emptied
      out after two pre-existing ones are done at that time.
      The correctly produced output now for the above case is as the following:
            BINLOG '
              base64 encoded data for A
              base64 encoded data for B
            '/*!*/;
              ### verbose section for A
              ### verbose section for B
      
      Thanks to Alexey Midenkov for the problem recognition and attempt to tackle,
      and to Venkatesh Duggirala who produced a patch for the upstream whose
      idea is exploited here, as well as to MDEV-23077 reporter LukeXwang who
      also contributed a piece of a patch aiming at this issue.
      6112a0f9