1. 28 Oct, 2020 5 commits
  2. 27 Oct, 2020 6 commits
    • Eugene Kosov's avatar
      MDEV-23991 dict_table_stats_lock() has unnecessarily long scope · afc9d00c
      Eugene Kosov authored
      Patch removes dict_index_t::stats_latch. Table/index statistics now
      protected with dict_sys->mutex. That way statistics computation can
      happen in parallel in several threads and dict_sys->mutex will be locked
      only for a short period of time.
      
      This patch is a joint work with Marko Mäkelä
      
      dict_index_t::lock: make mutable which allows to pass const pointer
      when only lock is touched in an object
      
      btr_height_get()
      btr_get_size(): make index argument const for better type safety
      
      btr_estimate_number_of_different_key_vals(): now returns computed values
      instead of setting fields in dict_index_t directly
      
      remove everything related to dict_index_t::stats_latch
      
      dict_stats_index_set_n_diff(): now returns computed values instead
      of setting fields in dict_index_t directly
      
      dict_stats_analyze_index():  now returns computed values instead
      of setting fields in dict_index_t directly
      
      Reviewed by: Marko Mäkelä
      afc9d00c
    • Anel Husakovic's avatar
      MDEV-24018: SIGSEGV in Item_func_nextval::update_table on SELECT SETVAL · e183aec1
      Anel Husakovic authored
      Reviewed-by: wlad@mariadb.com
      e183aec1
    • Marko Mäkelä's avatar
      MDEV-16952 Introduce SET GLOBAL innodb_max_purge_lag_wait · 42e1815a
      Marko Mäkelä authored
      Let us introduce a dummy variable innodb_max_purge_lag_wait
      for waiting that the InnoDB history list length is below
      the user-specified limit. Specifically,
      
      SET GLOBAL innodb_max_purge_lag_wait=0;
      
      should wait for all history to be purged. This could be useful
      when upgrading from an older version to MariaDB 10.3 or later,
      to avoid hitting MDEV-15912.
      
      Note: the history cannot be purged if there exist transactions
      that may see old versions.
      
      Reviewed by: Vladislav Vaintroub
      42e1815a
    • Alexey Botchkov's avatar
      MDEV-22524 SIGABRT in safe_mutex_unlock with · 8761571a
      Alexey Botchkov authored
      session_track_system_variables and max_relay_log_size.
      
      lock LOCK_global_system_variables around the get_one_variable() call
      in the Session_sysvars_tracker::store_variable().
      8761571a
    • Thirunarayanan Balathandayuthapani's avatar
      MDEV-23693 Failing assertion: my_atomic_load32_explicit(&lock->lock_word,... · bc540b87
      Thirunarayanan Balathandayuthapani authored
      MDEV-23693 Failing assertion: my_atomic_load32_explicit(&lock->lock_word, MY_MEMORY_ORDER_RELAXED) == X_LOCK_DECR
      
      InnoDB frees the block lock during buffer pool shrinking when other
      thread is yet to release the block lock.  While shrinking the
      buffer pool, InnoDB allows the page to be freed unless it is buffer
      fixed. In some cases, InnoDB releases the latch after unfixing the
      block.
      
      Fix:
      ====
      - InnoDB should unfix the block after releases the latch.
      
      - Add more assertion to check buffer fix while accessing the page.
      
      - Introduced block_hint structure to store buf_block_t pointer
      and allow accessing the buf_block_t pointer only by passing a
      functor. It returns original buf_block_t* pointer if it is valid
      or nullptr if the pointer become stale.
      
      - Replace buf_block_is_uncompressed() with
      buf_pool_t::is_block_pointer()
      
      This change is motivated by a change in mysql-5.7.32:
      mysql/mysql-server@46e60de444a8fbd876cc6778a7e64a1d3426a48d
      Bug #31036301 ASSERTION FAILURE: SYNC0RW.IC:429:LOCK->LOCK_WORD
      bc540b87
    • mkaruza's avatar
      MDEV-22707: galera got stuck after flush tables · 6a614d69
      mkaruza authored
      Deadlock is possible between applier thread and local committing thread with active FLUSH TABLE.
      Applier thread should skip table share checks and locks when opening table.
      Reviewed-by: default avatarJan Lindström <jan.lindstrom@mariadb.com>
      6a614d69
  3. 26 Oct, 2020 3 commits
    • Sachin Agarwal's avatar
      Bug #31228694 FTS QUERY WITH LIMIT HIT AN ASSERT · 1ff8588c
      Sachin Agarwal authored
      Problem:
      1. The server terminates abnormally when phrase search doesn't
      filter out doc_ids correctly. This problem has been fixed in bug
      2. Wrong query result: It's a regression from the bug #22709692 fix.
      This fix optimize full-text search query with limit clause.
      when FTS expression involves only union operation, we fetch only
      number of doc_ids specified with the limit clause.
      Fulltext phrase search is not an union operation and we consider
      phrase search with plugin parser a union operation.
      In phrase search with limit clause, we fetch limited doc_ids for
      each token and if any of the selected doc_id does not contain all
      tokens in correct order then we do not include that row_id in the
      result set.
      Therefore phrase search gets fewer number of rows than the qualified
      rows exist in the table.
      
      Fix:
      Added a condition that phrase search with plugin parser is not a
      union operation.
      
      RB: 24925
      Reviewed by : Annamalai Gurusami <annamalai.gurusami@oracle.com>
      
      This is a cherry-pick of
      mysql/mysql-server@5549920b7a33ef33034461d973a9ecb17ce49799
      without a test case, because the test case depends on an n-gram
      tokenizer that will be missing from MariaDB until MDEV-10267 is added.
      1ff8588c
    • Sachin Agarwal's avatar
      Bug #30933728 INNODB FTS PHRASE SEARCH HIT AN ASSERT · e391417f
      Sachin Agarwal authored
      Problem:
      In Full-text phrase search, we filter out row that do not contain
      all the tokens in the phrase.
      If we do not filter out doc_id that doesn't appear in all the
      token's doc_id lists then we hit an assert.
      
      Fix:
      if any of the token has last doc_id equal to ith doc_id of the first
      token doc_id list then filter out rest of the higher doc_ids.
      
      RB: 24909
      Reviewed by : Annamalai Gurusami <annamalai.gurusami@oracle.com>
      
      This is a cherry-pick of
      mysql/mysql-server@5aa075277dfe84a17a0331c57a6fe9b91dafb4cf
      but without a test case, because the test case depends on an n-gram
      tokenizer that will be missing from MariaDB until MDEV-10267 is added.
      e391417f
    • Oleksandr Byelkin's avatar
  4. 25 Oct, 2020 3 commits
    • Sergei Golubchik's avatar
      remove disable_abort_on_error from precedence.test · 2fdc5036
      Sergei Golubchik authored
      was left over from testing
      2fdc5036
    • Thirunarayanan Balathandayuthapani's avatar
      MDEV-23370 innodb_fts.innodb_fts_misc failed in buildbot, server crashed in... · 3ba8f619
      Thirunarayanan Balathandayuthapani authored
      MDEV-23370 innodb_fts.innodb_fts_misc failed in buildbot, server crashed in dict_table_autoinc_destroy
      
      This issue is caused by MDEV-22456 ad6171b9. Fix involves the backported version of 10.4 patch
      MDEV-22778 5f2628d1 and few parts of
      MDEV-17441 (e9a5f288).
      
      dict_table_t::stats_latch_created: Removed
      
      dict_table_t::stats_latch: make value member and always lock it for
      simplicity even for stats cloned table.
      
      zip_pad_info_t::mutex_created: Removed
      
      zip_pad_info_t::mutex: make member value instead of pointer
      
      os0once.h: Removed
      
      dict_table_remove_from_cache_low(): Ensure that fts_free() is always
      called, even if dict_mem_table_free() is deferred until
      btr_search_lazy_free().
      
      InnoDB would always zip_pad_info_t::mutex and
      dict_table_t::autoinc_mutex, even for tables are not in
      ROW_FORMAT=COMPRESSED nor include any AUTO_INCREMENT column.
      3ba8f619
    • Marko Mäkelä's avatar
      MDEV-23720 Change innodb_log_optimize_ddl=OFF by default · 987df9b3
      Marko Mäkelä authored
      MariaDB 10.2.2 inherited from MySQL 5.7 a perceived optimization
      of ALTER TABLE, which skips the writing of redo log records.
      In MDEV-16809 we introduced a parameter that allows the redo log to
      be written, so that Mariabackup would not be impacted, but we kept
      the MySQL 5.7 behaviour enabled by default (innodb_log_optimize_ddl=ON).
      
      As noted in MDEV-19747 (Deprecate and ignore innodb_log_optimize_ddl,
      implemented in MariaDB 10.5.1), omitting the redo log writes can
      actually reduce performance, because we will have to wait for the data
      pages to be written out. When the redo log file is configured to be
      large enough, it actually can be much faster to write the redo log and
      avoid the extra page flushing.
      
      When the redo log is omitted (innodb_log_optimize_ddl=ON), also
      Mariabackup may have to perform a lot of extra work, to re-copy the
      entire data file if it is possible that any log was omitted during
      the backup.
      
      Starting with MariaDB 10.5.1, the parameter innodb_log_optimize_ddl
      is deprecated and ignored. We hereby deprecate (but will not ignore)
      the parameter in earlier versions as well.
      987df9b3
  5. 24 Oct, 2020 2 commits
  6. 23 Oct, 2020 21 commits
    • Varun Gupta's avatar
      MDEV-23867: insert... select crash in compute_window_func · b94e8e4b
      Varun Gupta authored
      There are 2 issues here:
      
      Issue #1: memory allocation.
      An IO_CACHE that uses encryption uses a larger buffer (it needs space for the encrypted data,
      decrypted data, IO_CACHE_CRYPT struct to describe encryption parameters etc).
      
      Issue #2: IO_CACHE::seek_not_done
      When IO_CACHE objects are cloned, they still share the file descriptor.
      This means, operation on one IO_CACHE may change the file read position
      which will confuse other IO_CACHEs using it.
      
      The fix of these issues would be:
      Allocate the buffer to also include the extra size needed for encryption.
      Perform seek again after one IO_CACHE reads the file.
      b94e8e4b
    • Vicențiu Ciorbaru's avatar
      MDEV-23941: strings/json_lib.c:893:12: style: Suspicious condition · 5a9df155
      Vicențiu Ciorbaru authored
      The characters parsed are always ascii characters, hence one byte. This
      means that the code did not have "incorrect" logic because the boolean
      condition, if true, would also evaluate to the value of 1.
      
      The condition however is semantically wrong, assuming a length is equal
      to the condition outcome. Change paranthesis to make it also read
      according to the intent.
      5a9df155
    • Sergei Golubchik's avatar
    • Sergei Golubchik's avatar
      precedence bugfixing · 05a878c1
      Sergei Golubchik authored
      fix printing precedence for BETWEEN, LIKE/ESCAPE, REGEXP, IN
      don't use precedence for printing CASE/WHEN/THEN/ELSE/END
      
      fix parsing precedence of BETWEEN, LIKE/ESCAPE, REGEXP, IN
      support predicate arguments for IN, BETWEEN, SOUNDS LIKE, LIKE/ESCAPE,
      REGEXP
      
      use %nonassoc for unary operators
      
      fix parsing of IS TRUE/FALSE/UNKNOWN/NULL
      
      remove parser_precedence test as superseded by the precedence test
      05a878c1
    • Sergei Golubchik's avatar
      cleanup: remove redundant BANG_PRECEDENCE · 7f974e5a
      Sergei Golubchik authored
      prefix unary operators don't need to have different precedence,
      the syntax unambiguously specifies in what order they apply
      7f974e5a
    • Sergei Golubchik's avatar
      cleanup: remove redundant ADDINTERVAL_PRECEDENCE · 8c83e6ea
      Sergei Golubchik authored
      expression between INTERVAL and the unit doesns not need any
      precedence rules, there's no ambiguity there
      8c83e6ea
    • Sergei Golubchik's avatar
      A fairly exhastive test for operator precedence · 9ad4e0d6
      Sergei Golubchik authored
      some results are incorrect
      9ad4e0d6
    • Sergei Golubchik's avatar
    • Sergei Golubchik's avatar
      MDEV-23656 view: removal of parentheses results in wrong result · 2cd5df8c
      Sergei Golubchik authored
      Item_ref should have the precedence of the item it's referencing
      2cd5df8c
    • Sergei Golubchik's avatar
      MDEV-23492 performance_schema_digests_size changing from default to 5000 when... · 15f03c20
      Sergei Golubchik authored
      MDEV-23492 performance_schema_digests_size changing from default to 5000 when enabling performance_schema
      
      max allowed value limit should be larger than any auto-sized value
      15f03c20
    • Sergei Golubchik's avatar
      .gitignore · 1cabfe2c
      Sergei Golubchik authored
      1cabfe2c
    • Sergei Golubchik's avatar
      compilation failure with new C/C · e864e6b1
      Sergei Golubchik authored
      define symbols as C/C does to avoid "macro redefined" warnings
      e864e6b1
    • Dmitry Shulga's avatar
      MDEV-23926: Follow-up patch · 4654501e
      Dmitry Shulga authored
      This patch removes unnecessary #ifdefs in cmake macros CHECK_C_SOURCE_COMPILES.
      4654501e
    • Dmitry Shulga's avatar
      MDEV-23926: Follow-up patch · 58da04b2
      Dmitry Shulga authored
      This patch fixes incorrect argument type passed
      to the last parameter of getgrouplist() in cmake
      macros CHECK_C_SOURCE_COMPILES()
      58da04b2
    • Dmitry Shulga's avatar
      MDEV-23564: CMAKE failing due to deprecated Apple GSS method · 79f6f0c4
      Dmitry Shulga authored
      Some GSS-API functions like gss_import_name(), gss_release_buffer()
      used in plugin/auth_gssapi and libmariadb/plugins/auth are marked
      as deprecated in MacOS starting from  version 10.14+. It results in
      extra warnings output on server building.
      
      To eliminate extra warnings the flag '-Wno-deprecated-declarations'
      has been added to compiler invocation string for those source
      files that invoke deprecated GSS-API functions.
      79f6f0c4
    • Sergei Golubchik's avatar
      MDEV-21201 No records produced in information_schema query, depending on projection · e64084d5
      Sergei Golubchik authored
      Reimplement MDEV-14275 Improving memory utilization for information schema
      
      Postpone temp table instantiation until after setup_fields().
      
      Replace all unused (not marked in read_set) columns in an I_S table
      with CHAR(0). This can drastically reduce the footprint of a MEMORY
      table (a TABLE_CATALOG alone is 1538 bytes per row).
      
      This does not change the engine. If the table was decided to be Aria
      (because of, say, blobs) then after optimization it'll stay Aria
      even if all blobs were removed.
      
      Note 1: when transforming table structure, share->blob_fields is
      preserved, otherwise Aria might switch from DYNAMIC to STATIC row format
      and expect a special field for a deleted mark, which create_tmp_tabe
      didn't provide.
      
      Note 2: optimizer was doing handler::info() (to know the number of rows)
      before the temp table is populated. That didn't make much sense. Now
      it's done before the table is even instantiated. Preserve the old
      behavior and report 0 rows.
      
      This reverts e2664ee8 and a8458a23
      e64084d5
    • Sergei Golubchik's avatar
      cleanup: use predefined CMAKE_DL_LIBS · 6cefe7d3
      Sergei Golubchik authored
      instead of, say, MY_SEARCH_LIBS(dlopen dl LIBDL)
      6cefe7d3
    • Sergei Golubchik's avatar
      cleanup: use my_multi_malloc(), etc · 641f81ba
      Sergei Golubchik authored
      641f81ba
    • Dmitry Shulga's avatar
    • Dmitry Shulga's avatar
      MDEV-23926: Follow-up patch to cleanup plugin/auth_pam/CMakeLists.txt code · 5e7cde41
      Dmitry Shulga authored
      This patch moves definitions of macros variables
         HAVE_PAM_SYSLOG, HAVE_PAM_EXT_H, HAVE_PAM_APPL_H, HAVE_STRNDUP
      from command line (in the form -Dmacros) to the auto-generated
      header file config_auth_pam.h
      5e7cde41
    • Dmitry Shulga's avatar
      MDEV-23926: Fix warnings generated during compilation of... · 6dc14453
      Dmitry Shulga authored
      MDEV-23926: Fix warnings generated during compilation of plugin/auth_pam/mapper/pam_user_map.c on MacOS
      
      Compiler warnings like one listed below are generated during server build on MacOS:
      
      [88%] Building C object plugin/auth_pam/CMakeFiles/pam_user_map.dir/mapper/pam_user_map.c.o
      mariadb/server-10.2/plugin/auth_pam/mapper/pam_user_map.c:87:41: error: passing
      'gid_t *' (aka 'unsigned int *') to parameter of type 'int *' converts between pointers to integer types
      with different sign [-Werror,-Wpointer-sign]
        if (getgrouplist(user, user_group_id, loc_groups, &ng) < 0)
           ^~~~~~~~~~
      /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/usr/include/unistd.h:650:43: note:
        passing argument to parameter here
        int getgrouplist(const char *, int, int *, int *);
            ^
      
      In case MariaDB server is build with -DCMAKE_BUILD_TYPE=Debug it results in
      build error.
      
      The reason of compiler warnings is that declaration of the Posix C API function
      getgrouplist() on MacOS differs from declaration of getgrouplist() proposed
      by Posix.
      
      To suppress this compiler warning cmake configure was adapted to detect what
      kind of getgrouplist() function is declared on the build platform and
      set the macros HAVE_POSIX_GETGROUPLIST in case the building platform supports
      Posix compatible interface for the getgrouplist() function. Depending on
      whether this macros is set the compatible type of arguments is used to pass
      parameter values to the function.
      6dc14453