[Maria-developers] Build and/or support of MariaDB on AIX
Hello all, i'm currently running MySQL 5.1.62 on IBM Power LPARs with AIX 6.1. I'll spare you the discussion of why AIX and not Linux and will just say "it is what it is ATM" ;-) Anyhow, with things proceeding as they are, i guess chances are that Oracle and IBM are not going to get any more friendly with each other, so i'm looking for an alternative way to move forward. That being said, i'd like to get an idea of the general feeling around the MariaDB development team on the support of non-(Linux|*BSD|Windows) platforms. Are there currently any plans? Would you be willing to invest some time in helping to get MariaDB running on AIX? Right now, i can successfully build stock MySQL 5.1.70 with some minor patches and stock MySQL 5.5.32 with some minor patches and the option "DWITHOUT_PERFSCHEMA_STORAGE_ENGINE=ON". With performance schema enabled the build fails at linking the unittests in "storage/perfschema/unittest/", see below for a full error output. The MariaDB 5.5.31 build does currently not even go that far, if fails earlier on the threadpool code, see below. Unfortunately my C/C++-fu is not strong enough to determine what might be considered a sound alternative to the epoll/kevent/port_event calls on AIX to do an alteration like the one in MDEV-4174. Can someone please help me out here? My build environment: Compiler: IBM XL C/C++ for AIX, V11.1 (5724-X13) Version: 11.01.0000.0009 AIX oslevel: 6100-08-01-1245 Thanks & best regards, Frank Fegert ## Begin: MariaDB 5.5.31 ############################################## ... [ 37%] Building CXX object sql/CMakeFiles/sql.dir/threadpool_unix.cc.o cd /home/user/rpmbuild/tmp/mariadb-5.5.31/build-mysql/sql && /usr/vacpp/bin/xlC_r -+ -DHAVE_CONFIG_H -DHAVE_EVENT_SCHEDULER -DHAVE_OPENSSL -DHAVE_POOL_OF_THREADS -DMYSQL_SERVER -ma -O2 -qlanglvl=extc99 -qstrict -qoptimize=2 -qmaxmem=16384 -DSYSV -D_AIX -D_AIX32 -D_AIX41 -D_AIX43 -D_AIX51 -D_AIX52 -D_AIX53 -D_AIX61 -D_ALL_SOURCE -DFUNCPROTO=15 -I/opt/freeware/include -qthreaded -qhalt=e -qstaticinline -g -DDBUG_OFF -I/home/user/rpmbuild/tmp/mariadb-5.5.31/build-mysql/include -I/home/user/rpmbuild/tmp/mariadb-5.5.31/include -I/home/user/rpmbuild/tmp/mariadb-5.5.31/sql -I/home/user/rpmbuild/tmp/mariadb-5.5.31/regex -I/home/user/rpmbuild/tmp/mariadb-5.5.31/build-mysql/sql -o CMakeFiles/sql.dir/threadpool_unix.cc.o -c /home/user/rpmbuild/tmp/mariadb-5.5.31/sql/threadpool_unix.cc "/home/user/rpmbuild/tmp/mariadb-5.5.31/sql/threadpool_unix.cc", line 39.2: 1540-0859 (S) #error directive: threadpool is not available on this platform. gmake[2]: *** [sql/CMakeFiles/sql.dir/threadpool_unix.cc.o] Error 1 gmake[2]: Leaving directory `/home/user/rpmbuild/tmp/mariadb-5.5.31/build-mysql' gmake[1]: *** [sql/CMakeFiles/sql.dir/all] Error 2 gmake[1]: Leaving directory `/home/user/rpmbuild/tmp/mariadb-5.5.31/build-mysql' gmake: *** [all] Error 2 ## End: MariaDB 5.5.31 ################################################ ## Begin: MySQL 5.5.32 ################################################ ... Linking CXX executable pfs-t cd /home/user/rpmbuild/tmp/mysql-5.5.32/build-mysql/storage/perfschema/unittest && /opt/freeware/bin/cmake -E cmake_link_script CMakeFiles/pfs-t.dir/lin k.txt --verbose=1 /usr/vacpp/bin/xlC_r -ma -O2 -qlanglvl=extc99 -qstrict -qoptimize=2 -qmaxmem=16384 -DSYSV -D_AIX -D_AIX32 -D_AIX41 -D_AIX43 -D_AIX51 -D_AIX52 -D_AIX53 -D_A IX61 -D_ALL_SOURCE -DFUNCPROTO=15 -I/opt/freeware/include -qthreaded -qhalt=e -qstaticinline -L/opt/freeware/lib/mysql -L/opt/freeware/lib -Wl,-bmaxdata:0x80000000 CMakeFiles/pfs-t.dir/pfs-t.cc.o -o pfs-t -Wl,-brtl,-bnoipath,-bexpfull ../../../unittest/mytap/libmytap.a ../libperfschema.a ../../../mysys/libmysys.a ../../../dbug/libdbug.a ../../../mysys/libmysys.a ../../../dbug/libdbug.a ../../../strings/libstrings.a -lz -lm -Wl,-blibpath:/opt/freeware/lib:/usr/lib:/lib ld: 0711-317 ERROR: Undefined symbol: .MDL_request::init(MDL_key::enum_mdl_namespace,const char*,const char*,enum_mdl_type,enum_mdl_duration) ld: 0711-317 ERROR: Undefined symbol: .LEX::LEX() ld: 0711-317 ERROR: Undefined symbol: .lex_start(THD*) ld: 0711-317 ERROR: Undefined symbol: Virtual table for class "DML_prelocking_strategy": Some possible causes are: first non-inline virtual function in "DML_prelocking_strategy" is not defined; or the class is a template instantiation and an explicit instantiation definition of the class is missing. ld: 0711-317 ERROR: Undefined symbol: .open_and_lock_tables(THD*,TABLE_LIST*,bool,unsigned int,Prelocking_strategy*) ld: 0711-317 ERROR: Undefined symbol: .Table_check_intact::check(TABLE*,const st_table_field_def*) ld: 0711-317 ERROR: Undefined symbol: .close_thread_tables(THD*) ld: 0711-317 ERROR: Undefined symbol: .lex_end(LEX*) ld: 0711-317 ERROR: Undefined symbol: .Query_tables_list::destroy_query_tables_list() ld: 0711-317 ERROR: Undefined symbol: .plugin_unlock_list(THD*,st_plugin_int**,unsigned int) ld: 0711-317 ERROR: Undefined symbol: THR_THD ld: 0711-317 ERROR: Undefined symbol: .sql_print_error(const char*,...) ld: 0711-317 ERROR: Undefined symbol: Virtual table for class "st_select_lex_node": Some possible causes are: first non-inline virtual function in "st_select_lex_node" is not defined; or the class is a template instantiation and an explicit instantiation definition of the class is missing. ld: 0711-317 ERROR: Undefined symbol: lower_case_table_names ld: 0711-317 ERROR: Undefined symbol: .Field_enum::store_type(unsigned long long) ld: 0711-317 ERROR: Undefined symbol: .ACL_internal_schema_registry::register_schema(const st_mysql_lex_string*,const ACL_internal_schema_access*) ld: 0711-317 ERROR: Undefined symbol: handler::clone(const char*,st_mem_root*) ld: 0711-317 ERROR: Undefined symbol: handler::get_error_message(int,String*) ld: 0711-317 ERROR: Undefined symbol: handler::column_bitmaps_signal() ld: 0711-317 ERROR: Undefined symbol: handler::index_read_idx_map(unsigned char*,unsigned int,const unsigned char*,unsigned long,ha_rkey_function) ld: 0711-317 ERROR: Undefined symbol: handler::index_next_same(unsigned char*,const unsigned char*,unsigned int) ld: 0711-317 ERROR: Undefined symbol: handler::read_multi_range_first(st_key_multi_range**,st_key_multi_range*,unsigned int,bool,st_handler_buffer*) ld: 0711-317 ERROR: Undefined symbol: handler::read_multi_range_next(st_key_multi_range**) ld: 0711-317 ERROR: Undefined symbol: handler::read_range_first(const st_key_range*,const st_key_range*,bool,bool) ld: 0711-317 ERROR: Undefined symbol: handler::read_range_next() ld: 0711-317 ERROR: Undefined symbol: handler::read_first_row(unsigned char*,unsigned int) ld: 0711-317 ERROR: Undefined symbol: handler::get_dynamic_partition_info(PARTITION_STATS*,unsigned int) ld: 0711-317 ERROR: Undefined symbol: handler::get_auto_increment(unsigned long long,unsigned long long,unsigned long long,unsigned long long*,unsigned long long*) ld: 0711-317 ERROR: Undefined symbol: handler::drop_table(const char*) ld: 0711-317 ERROR: Undefined symbol: Virtual table for class "handler": Some possible causes are: first non-inline virtual function in "handler" is not defined; or the class is a template instantiation and an explicit instantiation definition of the class is missing. ld: 0711-317 ERROR: Undefined symbol: .handler::ha_table_share_psi(const TABLE_SHARE*) const ld: 0711-317 ERROR: Undefined symbol: .handler::ha_statistic_increment(unsigned long system_status_var::*) const ld: 0711-317 ERROR: Undefined symbol: .handler::print_error(int,int) ld: 0711-317 ERROR: Undefined symbol: key_map_empty ld: 0711-317 ERROR: Undefined symbol: .calculate_key_len(TABLE*,unsigned int,const unsigned char*,unsigned long) ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information. gmake[2]: *** [storage/perfschema/unittest/pfs-t] Error 8 gmake[2]: Leaving directory `/home/user/rpmbuild/tmp/mysql-5.5.32/build-mysql' gmake[1]: *** [storage/perfschema/unittest/CMakeFiles/pfs-t.dir/all] Error 2 gmake[1]: Leaving directory `/home/user/rpmbuild/tmp/mysql-5.5.32/build-mysql' gmake: *** [all] Error 2 ###End: MySQL 5.5.32 ##################################################
your outoput contains "#error directive: threadpool is not available on this platform" which clearly states you must not configure "-DHAVE_POOL_OF_THREADS" on your platform Am 23.06.2013 12:12, schrieb Frank Fegert:
i'm currently running MySQL 5.1.62 on IBM Power LPARs with AIX 6.1. I'll spare you the discussion of why AIX and not Linux and will just say "it is what it is ATM" ;-) Anyhow, with things proceeding as they are, i guess chances are that Oracle and IBM are not going to get any more friendly with each other, so i'm looking for an alternative way to move forward. That being said, i'd like to get an idea of the general feeling around the MariaDB development team on the support of non-(Linux|*BSD|Windows) platforms. Are there currently any plans? Would you be willing to invest some time in helping to get MariaDB running on AIX?
Right now, i can successfully build stock MySQL 5.1.70 with some minor patches and stock MySQL 5.5.32 with some minor patches and the option "DWITHOUT_PERFSCHEMA_STORAGE_ENGINE=ON". With performance schema enabled the build fails at linking the unittests in "storage/perfschema/unittest/", see below for a full error output. The MariaDB 5.5.31 build does currently not even go that far, if fails earlier on the threadpool code, see below. Unfortunately my C/C++-fu is not strong enough to determine what might be considered a sound alternative to the epoll/kevent/port_event calls on AIX to do an alteration like the one in MDEV-4174. Can someone please help me out here?
My build environment: Compiler: IBM XL C/C++ for AIX, V11.1 (5724-X13) Version: 11.01.0000.0009 AIX oslevel: 6100-08-01-1245
Thanks & best regards,
Frank Fegert
## Begin: MariaDB 5.5.31 ############################################## ... [ 37%] Building CXX object sql/CMakeFiles/sql.dir/threadpool_unix.cc.o cd /home/user/rpmbuild/tmp/mariadb-5.5.31/build-mysql/sql && /usr/vacpp/bin/xlC_r -+ -DHAVE_CONFIG_H -DHAVE_EVENT_SCHEDULER -DHAVE_OPENSSL -DHAVE_POOL_OF_THREADS -DMYSQL_SERVER -ma -O2 -qlanglvl=extc99 -qstrict -qoptimize=2 -qmaxmem=16384 -DSYSV -D_AIX -D_AIX32 -D_AIX41 -D_AIX43 -D_AIX51 -D_AIX52 -D_AIX53 -D_AIX61 -D_ALL_SOURCE -DFUNCPROTO=15 -I/opt/freeware/include -qthreaded -qhalt=e -qstaticinline -g -DDBUG_OFF -I/home/user/rpmbuild/tmp/mariadb-5.5.31/build-mysql/include -I/home/user/rpmbuild/tmp/mariadb-5.5.31/include -I/home/user/rpmbuild/tmp/mariadb-5.5.31/sql -I/home/user/rpmbuild/tmp/mariadb-5.5.31/regex -I/home/user/rpmbuild/tmp/mariadb-5.5.31/build-mysql/sql -o CMakeFiles/sql.dir/threadpool_unix.cc.o -c /home/user/rpmbuild/tmp/mariadb-5.5.31/sql/threadpool_unix.cc "/home/user/rpmbuild/tmp/mariadb-5.5.31/sql/threadpool_unix.cc", line 39.2: 1540-0859 (S) #error directive: threadpool is not available on this platform. gmake[2]: *** [sql/CMakeFiles/sql.dir/threadpool_unix.cc.o] Error 1 gmake[2]: Leaving directory `/home/user/rpmbuild/tmp/mariadb-5.5.31/build-mysql' gmake[1]: *** [sql/CMakeFiles/sql.dir/all] Error 2 gmake[1]: Leaving directory `/home/user/rpmbuild/tmp/mariadb-5.5.31/build-mysql' gmake: *** [all] Error 2 ## End: MariaDB 5.5.31 ################################################
## Begin: MySQL 5.5.32 ################################################ ... Linking CXX executable pfs-t cd /home/user/rpmbuild/tmp/mysql-5.5.32/build-mysql/storage/perfschema/unittest && /opt/freeware/bin/cmake -E cmake_link_script CMakeFiles/pfs-t.dir/lin k.txt --verbose=1 /usr/vacpp/bin/xlC_r -ma -O2 -qlanglvl=extc99 -qstrict -qoptimize=2 -qmaxmem=16384 -DSYSV -D_AIX -D_AIX32 -D_AIX41 -D_AIX43 -D_AIX51 -D_AIX52 -D_AIX53 -D_A IX61 -D_ALL_SOURCE -DFUNCPROTO=15 -I/opt/freeware/include -qthreaded -qhalt=e -qstaticinline -L/opt/freeware/lib/mysql -L/opt/freeware/lib -Wl,-bmaxdata:0x80000000 CMakeFiles/pfs-t.dir/pfs-t.cc.o -o pfs-t -Wl,-brtl,-bnoipath,-bexpfull ../../../unittest/mytap/libmytap.a ../libperfschema.a ../../../mysys/libmysys.a ../../../dbug/libdbug.a ../../../mysys/libmysys.a ../../../dbug/libdbug.a ../../../strings/libstrings.a -lz -lm -Wl,-blibpath:/opt/freeware/lib:/usr/lib:/lib ld: 0711-317 ERROR: Undefined symbol: .MDL_request::init(MDL_key::enum_mdl_namespace,const char*,const char*,enum_mdl_type,enum_mdl_duration) ld: 0711-317 ERROR: Undefined symbol: .LEX::LEX() ld: 0711-317 ERROR: Undefined symbol: .lex_start(THD*) ld: 0711-317 ERROR: Undefined symbol: Virtual table for class "DML_prelocking_strategy": Some possible causes are: first non-inline virtual function in "DML_prelocking_strategy" is not defined; or the class is a template instantiation and an explicit instantiation definition of the class is missing. ld: 0711-317 ERROR: Undefined symbol: .open_and_lock_tables(THD*,TABLE_LIST*,bool,unsigned int,Prelocking_strategy*) ld: 0711-317 ERROR: Undefined symbol: .Table_check_intact::check(TABLE*,const st_table_field_def*) ld: 0711-317 ERROR: Undefined symbol: .close_thread_tables(THD*) ld: 0711-317 ERROR: Undefined symbol: .lex_end(LEX*) ld: 0711-317 ERROR: Undefined symbol: .Query_tables_list::destroy_query_tables_list() ld: 0711-317 ERROR: Undefined symbol: .plugin_unlock_list(THD*,st_plugin_int**,unsigned int) ld: 0711-317 ERROR: Undefined symbol: THR_THD ld: 0711-317 ERROR: Undefined symbol: .sql_print_error(const char*,...) ld: 0711-317 ERROR: Undefined symbol: Virtual table for class "st_select_lex_node": Some possible causes are: first non-inline virtual function in "st_select_lex_node" is not defined; or the class is a template instantiation and an explicit instantiation definition of the class is missing. ld: 0711-317 ERROR: Undefined symbol: lower_case_table_names ld: 0711-317 ERROR: Undefined symbol: .Field_enum::store_type(unsigned long long) ld: 0711-317 ERROR: Undefined symbol: .ACL_internal_schema_registry::register_schema(const st_mysql_lex_string*,const ACL_internal_schema_access*) ld: 0711-317 ERROR: Undefined symbol: handler::clone(const char*,st_mem_root*) ld: 0711-317 ERROR: Undefined symbol: handler::get_error_message(int,String*) ld: 0711-317 ERROR: Undefined symbol: handler::column_bitmaps_signal() ld: 0711-317 ERROR: Undefined symbol: handler::index_read_idx_map(unsigned char*,unsigned int,const unsigned char*,unsigned long,ha_rkey_function) ld: 0711-317 ERROR: Undefined symbol: handler::index_next_same(unsigned char*,const unsigned char*,unsigned int) ld: 0711-317 ERROR: Undefined symbol: handler::read_multi_range_first(st_key_multi_range**,st_key_multi_range*,unsigned int,bool,st_handler_buffer*) ld: 0711-317 ERROR: Undefined symbol: handler::read_multi_range_next(st_key_multi_range**) ld: 0711-317 ERROR: Undefined symbol: handler::read_range_first(const st_key_range*,const st_key_range*,bool,bool) ld: 0711-317 ERROR: Undefined symbol: handler::read_range_next() ld: 0711-317 ERROR: Undefined symbol: handler::read_first_row(unsigned char*,unsigned int) ld: 0711-317 ERROR: Undefined symbol: handler::get_dynamic_partition_info(PARTITION_STATS*,unsigned int) ld: 0711-317 ERROR: Undefined symbol: handler::get_auto_increment(unsigned long long,unsigned long long,unsigned long long,unsigned long long*,unsigned long long*) ld: 0711-317 ERROR: Undefined symbol: handler::drop_table(const char*) ld: 0711-317 ERROR: Undefined symbol: Virtual table for class "handler": Some possible causes are: first non-inline virtual function in "handler" is not defined; or the class is a template instantiation and an explicit instantiation definition of the class is missing. ld: 0711-317 ERROR: Undefined symbol: .handler::ha_table_share_psi(const TABLE_SHARE*) const ld: 0711-317 ERROR: Undefined symbol: .handler::ha_statistic_increment(unsigned long system_status_var::*) const ld: 0711-317 ERROR: Undefined symbol: .handler::print_error(int,int) ld: 0711-317 ERROR: Undefined symbol: key_map_empty ld: 0711-317 ERROR: Undefined symbol: .calculate_key_len(TABLE*,unsigned int,const unsigned char*,unsigned long) ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information. gmake[2]: *** [storage/perfschema/unittest/pfs-t] Error 8 gmake[2]: Leaving directory `/home/user/rpmbuild/tmp/mysql-5.5.32/build-mysql' gmake[1]: *** [storage/perfschema/unittest/CMakeFiles/pfs-t.dir/all] Error 2 gmake[1]: Leaving directory `/home/user/rpmbuild/tmp/mysql-5.5.32/build-mysql' gmake: *** [all] Error 2 ###End: MySQL 5.5.32 ##################################################
-----Original Message----- From: Maria-developers [mailto:maria-developers- bounces+wlad=montyprogram.com@lists.launchpad.net] On Behalf Of Frank Fegert Sent: Sonntag, 23. Juni 2013 12:13 To: maria-developers@lists.launchpad.net Subject: [Maria-developers] Build and/or support of MariaDB on AIX
Hello all,
i'm currently running MySQL 5.1.62 on IBM Power LPARs with AIX 6.1. I'll spare you the discussion of why AIX and not Linux and will just say "it is what it is ATM" ;-) Anyhow, with things proceeding as they are, i guess chances are that Oracle and IBM are not going to get any more friendly with each other, so i'm looking for an alternative way to move forward. That being said, i'd like to get an idea of the general feeling around the MariaDB development team on the support of non-(Linux|*BSD|Windows) platforms. Are there currently any plans? Would you be willing to invest some time in helping to get MariaDB running on AIX?
I think that the realistic options you have are : 1. Either you have an AIX enthusiast, a knowledgeable guy who regularly supplies team with AIX related patches (that do not break any other platforms;)). Or 2. You provide a machine for the Buildbot, and sponsor the project (the popularity of AIX is IMO too low, to support it for free). It is my personal opinion, not an official position.
Right now, i can successfully build stock MySQL 5.1.70 with some minor patches and stock MySQL 5.5.32 with some minor patches and the option "DWITHOUT_PERFSCHEMA_STORAGE_ENGINE=ON". With performance schema enabled the build fails at linking the unittests in "storage/perfschema/unittest/", see below for a full error output. The MariaDB 5.5.31 build does currently not even go that far, if fails earlier on the threadpool code, see below. Unfortunately my C/C++-fu is not strong enough to determine what might be considered a sound alternative to the epoll/kevent/port_event calls on AIX to do an alteration like the one in MDEV-4174. Can someone please help me out here?
To me , it looks like a sound alternative for AIX environment would be using IO completion ports, the AIX port of Windows API's. Native_event would be OVERLAPPED * Io_port_create, io_port_associate_fd map to CreateIoCompletionPort () io_poll_start_read is ReadFile(), with OVERLAPPED*, 0 bytes length read io_poll_wait is GetQueuedCompletionStatus() io_port_disassociate() cannot be implemented, but it is only used in rare case where thread_pool_size is being changed at runtime. If you do not want to mess with it (you said your C-fu is weak), I attached a patch with dummy implementation of threadpool required methods, it should just make this thing compile, threadpool won't be usable. I did not test it. Wlad PS. Performance schema unit tests should either be disabled or link with sql library (TARGET_LINK_LIBRARIES sql), I gather this from the error output you sent.
Hello Wlad, thanks for your fast reply! On Sun, Jun 23, 2013 at 02:26:16PM +0200, Vladislav Vaintroub wrote:
I think that the realistic options you have are : 1. Either you have an AIX enthusiast, a knowledgeable guy who regularly supplies team with AIX related patches (that do not break any other platforms;)).
An AIX enthusiast i am and more knowledge is always good, it's just those 48h days no crazy physicist wants to come up with ;-)
Or 2. You provide a machine for the Buildbot, and sponsor the project (the popularity of AIX is IMO too low, to support it for free).
It is my personal opinion, not an official position.
Though not official, still very much appreciated! A machine would be no problem at all, network access is a different story though, i'll have to check with our security guys. My machines @home would be a last resort, you'd hate me for my low bandwidth though ;-) Sponsoring could be a bit complicated, since a) my lottery ticket didn't pan out - again ;-) and b) we're in the public sector in germany, so lots of bureaucracy and our procurement department is bound by some very "odd" rules. I'll talk to my team leader and see what we can do.
To me , it looks like a sound alternative for AIX environment would be using IO completion ports, the AIX port of Windows API's. Native_event would be OVERLAPPED * Io_port_create, io_port_associate_fd map to CreateIoCompletionPort () io_poll_start_read is ReadFile(), with OVERLAPPED*, 0 bytes length read io_poll_wait is GetQueuedCompletionStatus() io_port_disassociate() cannot be implemented, but it is only used in rare case where thread_pool_size is being changed at runtime.
If you do not want to mess with it (you said your C-fu is weak), I attached a patch with dummy implementation of threadpool required methods, it should just make this thing compile, threadpool won't be usable. I did not test it.
PS. Performance schema unit tests should either be disabled or link with sql library (TARGET_LINK_LIBRARIES sql), I gather this from the error output you sent.
Thanks for the pointers, i'll see if i can come up with some IOCP code. If not i'll try the fallback you provided. I'll report back as soon as possible. Thanks again & best regards, Frank
participants (3)
-
Frank Fegert
-
Reindl Harald
-
Vladislav Vaintroub