[MDEV-22100] TokuDB compilation error Created: 2020-04-01  Updated: 2020-10-24  Resolved: 2020-10-24

Status: Closed
Project: MariaDB Server
Component/s: Compiling, Storage Engine - TokuDB
Affects Version/s: 10.5.2
Fix Version/s: 10.5.7

Type: Bug Priority: Major
Reporter: Michal Schorm Assignee: Sergei Golubchik
Resolution: Fixed Votes: 0
Labels: None
Environment:

Fedora - All


Attachments: Text File tokudb_10_5_fix_001.patch     Text File tokudb_zstd.patch    

 Description   

Hello,

I've got a new compilation error in the TokuDB SE in MariaDB 10.5.2.
Reproducible on Fedora 30 and 31 (both have GCC 9.2.1), 32 and Rawihde (both have GCC 10.0.1).

[ 92%] Building CXX object storage/tokudb/CMakeFiles/tokudb.dir/ha_tokudb.cc.o
cd /builddir/build/BUILD/mariadb-10.5.2/storage/tokudb && /usr/bin/c++  -DHAVE_CONFIG_H -DMYSQL_DYNAMIC_PLUGIN -DTOKUDB_VERSION=5.6.41-84.1 -D_FILE_OFFSET_BITS=64 -Dtokudb_EXPORTS -I/builddir/build/BUILD/mariadb-10.5.2/wsrep-lib/include -I/builddir/build/BUILD/mariadb-10.5.2/wsrep-lib/wsrep-API/v26 -I/builddir/build/BUILD/mariadb-10.5.2/include -I/builddir/build/BUILD/mariadb-10.5.2/sql -I/builddir/build/BUILD/mariadb-10.5.2/storage/tokudb/PerconaFT -I/builddir/build/BUILD/mariadb-10.5.2/storage/tokudb/PerconaFT/portability -I/builddir/build/BUILD/mariadb-10.5.2/storage/tokudb/PerconaFT/util -I/builddir/build/BUILD/mariadb-10.5.2/storage/tokudb/PerconaFT/buildheader  -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -fPIC -pie -fPIC -Wl,-z,relro,-z,now -fstack-protector --param=ssp-buffer-size=4 -Wno-shadow -Wno-implicit-fallthrough -std=c++11 -Wno-missing-field-initializers -O3 -g -static-libgcc -fno-omit-frame-pointer -fno-strict-aliasing -Wno-uninitialized -D_FORTIFY_SOURCE=2 -DDBUG_OFF -fPIC   -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -fPIC -std=gnu++11 -o CMakeFiles/tokudb.dir/ha_tokudb.cc.o -c /builddir/build/BUILD/mariadb-10.5.2/storage/tokudb/ha_tokudb.cc
In file included from /builddir/build/BUILD/mariadb-10.5.2/storage/tokudb/hatoku_hton.h:32,
                 from /builddir/build/BUILD/mariadb-10.5.2/storage/tokudb/ha_tokudb.cc:26:
/builddir/build/BUILD/mariadb-10.5.2/storage/tokudb/tokudb_memory.h: In function 'void* tokudb::memory::malloc(size_t, myf)':
/builddir/build/BUILD/mariadb-10.5.2/storage/tokudb/tokudb_memory.h:46:32: error: too few arguments to function 'void* my_malloc(PSI_memory_key, size_t, myf)'
   46 |     return ::my_malloc(s, flags);
      |                                ^
In file included from /builddir/build/BUILD/mariadb-10.5.2/sql/sql_table.h:20,
                 from /builddir/build/BUILD/mariadb-10.5.2/storage/tokudb/hatoku_defines.h:32,
                 from /builddir/build/BUILD/mariadb-10.5.2/storage/tokudb/hatoku_hton.h:29,
                 from /builddir/build/BUILD/mariadb-10.5.2/storage/tokudb/ha_tokudb.cc:26:
/builddir/build/BUILD/mariadb-10.5.2/include/my_sys.h:170:14: note: declared here
  170 | extern void *my_malloc(PSI_memory_key key, size_t size, myf MyFlags);
      |              ^~~~~~~~~
In file included from /builddir/build/BUILD/mariadb-10.5.2/storage/tokudb/hatoku_hton.h:32,
                 from /builddir/build/BUILD/mariadb-10.5.2/storage/tokudb/ha_tokudb.cc:26:
/builddir/build/BUILD/mariadb-10.5.2/storage/tokudb/tokudb_memory.h: In function 'void* tokudb::memory::realloc(void*, size_t, myf)':
/builddir/build/BUILD/mariadb-10.5.2/storage/tokudb/tokudb_memory.h:55:25: error: invalid conversion from 'void*' to 'PSI_memory_key' {aka 'unsigned int'} [-fpermissive]
   55 |     return ::my_realloc(p, s, flags | MY_ALLOW_ZERO_PTR);
      |                         ^
      |                         |
      |                         void*
/builddir/build/BUILD/mariadb-10.5.2/storage/tokudb/tokudb_memory.h:55:28: error: invalid conversion from 'size_t' {aka 'long unsigned int'} to 'void*' [-fpermissive]
   55 |     return ::my_realloc(p, s, flags | MY_ALLOW_ZERO_PTR);
      |                            ^
      |                            |
      |                            size_t {aka long unsigned int}
/builddir/build/BUILD/mariadb-10.5.2/storage/tokudb/tokudb_memory.h:55:56: error: too few arguments to function 'void* my_realloc(PSI_memory_key, void*, size_t, myf)'
   55 |     return ::my_realloc(p, s, flags | MY_ALLOW_ZERO_PTR);
      |                                                        ^
In file included from /builddir/build/BUILD/mariadb-10.5.2/sql/sql_table.h:20,
                 from /builddir/build/BUILD/mariadb-10.5.2/storage/tokudb/hatoku_defines.h:32,
                 from /builddir/build/BUILD/mariadb-10.5.2/storage/tokudb/hatoku_hton.h:29,
                 from /builddir/build/BUILD/mariadb-10.5.2/storage/tokudb/ha_tokudb.cc:26:
/builddir/build/BUILD/mariadb-10.5.2/include/my_sys.h:173:14: note: declared here
  173 | extern void *my_realloc(PSI_memory_key key, void *ptr, size_t size, myf MyFlags);
      |              ^~~~~~~~~~
In file included from /builddir/build/BUILD/mariadb-10.5.2/storage/tokudb/hatoku_hton.h:32,
                 from /builddir/build/BUILD/mariadb-10.5.2/storage/tokudb/ha_tokudb.cc:26:
/builddir/build/BUILD/mariadb-10.5.2/storage/tokudb/tokudb_memory.h: In function 'char* tokudb::memory::strdup(const char*, myf)':
/builddir/build/BUILD/mariadb-10.5.2/storage/tokudb/tokudb_memory.h:66:24: error: invalid conversion from 'const char*' to 'PSI_memory_key' {aka 'unsigned int'} [-fpermissive]
   66 |     return ::my_strdup(p, flags);
      |                        ^
      |                        |
      |                        const char*
/builddir/build/BUILD/mariadb-10.5.2/storage/tokudb/tokudb_memory.h:66:27: error: invalid conversion from 'myf' {aka 'long unsigned int'} to 'const char*' [-fpermissive]
   66 |     return ::my_strdup(p, flags);
      |                           ^~~~~
      |                           |
      |                           myf {aka long unsigned int}
/builddir/build/BUILD/mariadb-10.5.2/storage/tokudb/tokudb_memory.h:66:32: error: too few arguments to function 'char* my_strdup(PSI_memory_key, const char*, myf)'
   66 |     return ::my_strdup(p, flags);
      |                                ^
In file included from /builddir/build/BUILD/mariadb-10.5.2/sql/sql_table.h:20,
                 from /builddir/build/BUILD/mariadb-10.5.2/storage/tokudb/hatoku_defines.h:32,
                 from /builddir/build/BUILD/mariadb-10.5.2/storage/tokudb/hatoku_hton.h:29,
                 from /builddir/build/BUILD/mariadb-10.5.2/storage/tokudb/ha_tokudb.cc:26:
/builddir/build/BUILD/mariadb-10.5.2/include/my_sys.h:176:14: note: declared here
  176 | extern char *my_strdup(PSI_memory_key key, const char *from,myf MyFlags);
      |              ^~~~~~~~~
/builddir/build/BUILD/mariadb-10.5.2/storage/tokudb/ha_tokudb.cc: In member function 'int ha_tokudb::create_txn(THD*, tokudb_trx_data*)':
/builddir/build/BUILD/mariadb-10.5.2/storage/tokudb/ha_tokudb.cc:6385:49: error: too few arguments to function 'void trans_register_ha(THD*, bool, handlerton*, ulonglong)'
 6385 |         trans_register_ha(thd, true, tokudb_hton);
      |                                                 ^
In file included from /builddir/build/BUILD/mariadb-10.5.2/storage/tokudb/hatoku_defines.h:33,
                 from /builddir/build/BUILD/mariadb-10.5.2/storage/tokudb/hatoku_hton.h:29,
                 from /builddir/build/BUILD/mariadb-10.5.2/storage/tokudb/ha_tokudb.cc:26:
/builddir/build/BUILD/mariadb-10.5.2/sql/handler.h:5128:6: note: declared here
 5128 | void trans_register_ha(THD *thd, bool all, handlerton *ht,
      |      ^~~~~~~~~~~~~~~~~
/builddir/build/BUILD/mariadb-10.5.2/storage/tokudb/ha_tokudb.cc:6427:46: error: too few arguments to function 'void trans_register_ha(THD*, bool, handlerton*, ulonglong)'
 6427 |     trans_register_ha(thd, false, tokudb_hton);
      |                                              ^
In file included from /builddir/build/BUILD/mariadb-10.5.2/storage/tokudb/hatoku_defines.h:33,
                 from /builddir/build/BUILD/mariadb-10.5.2/storage/tokudb/hatoku_hton.h:29,
                 from /builddir/build/BUILD/mariadb-10.5.2/storage/tokudb/ha_tokudb.cc:26:
/builddir/build/BUILD/mariadb-10.5.2/sql/handler.h:5128:6: note: declared here
 5128 | void trans_register_ha(THD *thd, bool all, handlerton *ht,
      |      ^~~~~~~~~~~~~~~~~
/builddir/build/BUILD/mariadb-10.5.2/storage/tokudb/ha_tokudb.cc: In member function 'virtual int ha_tokudb::start_stmt(THD*, thr_lock_type)':
/builddir/build/BUILD/mariadb-10.5.2/storage/tokudb/ha_tokudb.cc:6592:46: error: too few arguments to function 'void trans_register_ha(THD*, bool, handlerton*, ulonglong)'
 6592 |     trans_register_ha(thd, false, tokudb_hton);
      |                                              ^
In file included from /builddir/build/BUILD/mariadb-10.5.2/storage/tokudb/hatoku_defines.h:33,
                 from /builddir/build/BUILD/mariadb-10.5.2/storage/tokudb/hatoku_hton.h:29,
                 from /builddir/build/BUILD/mariadb-10.5.2/storage/tokudb/ha_tokudb.cc:26:
/builddir/build/BUILD/mariadb-10.5.2/sql/handler.h:5128:6: note: declared here
 5128 | void trans_register_ha(THD *thd, bool all, handlerton *ht,
      |      ^~~~~~~~~~~~~~~~~
In file included from /builddir/build/BUILD/mariadb-10.5.2/storage/tokudb/ha_tokudb.cc:9020:
/builddir/build/BUILD/mariadb-10.5.2/storage/tokudb/ha_tokudb_alter_56.cc: In constructor 'tokudb_alter_ctx::tokudb_alter_ctx()':
/builddir/build/BUILD/mariadb-10.5.2/storage/tokudb/ha_tokudb_alter_56.cc:62:35: error: no matching function for call to 'Dynamic_array<unsigned int>::Dynamic_array()'
   62 |         altered_table_kc_info(NULL) {
      |                                   ^
In file included from /builddir/build/BUILD/mariadb-10.5.2/sql/handler.h:35,
                 from /builddir/build/BUILD/mariadb-10.5.2/storage/tokudb/hatoku_defines.h:33,
                 from /builddir/build/BUILD/mariadb-10.5.2/storage/tokudb/hatoku_hton.h:29,
                 from /builddir/build/BUILD/mariadb-10.5.2/storage/tokudb/ha_tokudb.cc:26:
/builddir/build/BUILD/mariadb-10.5.2/sql/sql_array.h:122:3: note: candidatemake[2]: Leaving directory '/builddir/build/BUILD/mariadb-10.5.2'
: 'Dynamic_array<Elem>::Dynamic_array(MEM_ROOT*, uint, uint) [with Elem = unsigned int; MEM_ROOT = st_mem_root; uint = unsigned int]'
  122 |   Dynamic_array(MEM_ROOT *root, uint prealloc=16, uint increment=16)
      |   ^~~~~~~~~~~~~
/builddir/build/BUILD/mariadb-10.5.2/sql/sql_array.h:122:3: note:   candidate expects 3 arguments, 0 provided
/builddir/build/BUILD/mariadb-10.5.2/sql/sql_array.h:117:3: note: candidate: 'Dynamic_array<Elem>::Dynamic_array(PSI_memory_key, uint, uint) [with Elem = unsigned int; PSI_memory_key = unsigned int; uint = unsigned int]'
  117 |   Dynamic_array(PSI_memory_key psi_key, uint prealloc=16, uint increment=16)
      |   ^~~~~~~~~~~~~
/builddir/build/BUILD/mariadb-10.5.2/sql/sql_array.h:117:3: note:   candidate expects 3 arguments, 0 provided
/builddir/build/BUILD/mariadb-10.5.2/sql/sql_array.h:113:29: note: candidate: 'constexpr Dynamic_array<unsigned int>::Dynamic_array(const Dynamic_array<unsigned int>&)'
  113 | template <class Elem> class Dynamic_array
      |                             ^~~~~~~~~~~~~
/builddir/build/BUILD/mariadb-10.5.2/sql/sql_array.h:113:29: note:   candidate expects 1 argument, 0 provided
make[2]: *** [storage/tokudb/CMakeFiles/tokudb.dir/build.make:66: storage/tokudb/CMakeFiles/tokudb.dir/ha_tokudb.cc.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:8761: storage/tokudb/CMakeFiles/tokudb.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....



 Comments   
Comment by Daniel Black [ 2020-04-01 ]

FYI MDEV-19780

Comment by Marko Mäkelä [ 2020-04-01 ]

My understanding is that serg did not want to remove the source code TokuDB from MariaDB Server 10.5 (see MDEV-19780) but only disable the compilation, similar to what was done to XtraDB in MariaDB Server 10.2. Maybe we can remove TokuDB from the next major release?

The addition of a third parameter to my_malloc() also broke mysys/my_new.cc, which I suppose is dead code now. The purpose of that file seems to have been defeated quite some time ago, because 10.5 cannot be compiled with older GCC than 4.8.5, due to the required level of C++11 support.

Comment by Sergei Golubchik [ 2020-04-01 ]

mschorm, are you sure you want to have it enabled? It's deprecated by its owner (Percona), we package it in old versions, but removed from 10.5, because we cannot maintain it ourselves, so bugs won't get fixed anymore (besides, may be, something simple).

Comment by Michal Schorm [ 2020-04-09 ]

@Sergei
Thanks for heads-up.
I will leave it disabled in MariaDB 10.5 & later.

That means this issue can be closed.

Comment by Alex/AT [ 2020-09-23 ]

Two patches just for the sake of it, for those who want to enable and build TokuDB for 10.5.
I am running it on large Zabbix installation and few other services in production for a week, looks ok to me.
First patch fixes the compatibility on function calls, enabling to build.
Second optional patch adds ZSTD compression - requires ZSTD 1.4.5 to be extracted to third_party/zstd-1.4.5 directory and CMake 3.x (won't build on i.e. CentOS 7 CMake 2.8).

Generated at Thu Feb 08 09:12:11 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.