[MDEV-12455] RocksDB is not in MariaDB 10.2.5 generic tar.gz Created: 2017-04-06  Updated: 2017-09-09  Resolved: 2017-04-06

Status: Closed
Project: MariaDB Server
Component/s: Storage Engine - RocksDB
Affects Version/s: 10.2.5
Fix Version/s: N/A

Type: Bug Priority: Major
Reporter: Oli Sennhauser Assignee: Unassigned
Resolution: Not a Bug Votes: 0
Labels: None


 Description   

I installed brand new MariaDB 10.2.5 from generic binary tar ball and cannot find RocksDB:

root@mariadb-10.2 [(none)] SQL> show global variables like 'version';
+---------------+--------------------+
| Variable_name | Value              |
+---------------+--------------------+
| version       | 10.2.5-MariaDB-log |
+---------------+--------------------+
1 row in set (0.00 sec)
 
root@mariadb-10.2 [(none)] SQL> show engines;
+--------------------+---------+----------------------------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                                          | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------------------------+--------------+------+------------+
| MRG_MyISAM         | YES     | Collection of identical MyISAM tables                                            | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                                               | NO           | NO   | NO         |
| Aria               | YES     | Crash-safe tables with MyISAM heritage                                           | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                                            | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables                        | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, foreign keys and encryption for tables | YES          | YES  | YES        |
| SEQUENCE           | YES     | Generated tables filled with sequential values                                   | YES          | NO   | YES        |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                                               | NO           | NO   | NO         |
+--------------------+---------+----------------------------------------------------------------------------------+--------------+------+------------+
8 rows in set (0.00 sec)

shell> tar tf mariadb-10.2.5-linux-x86_64.tar.gz | grep -i rock



 Comments   
Comment by Sergei Golubchik [ 2017-04-06 ]

RocksDB requires a sufficiently recent compiler and generic linux tarballs with the old glibc are built on a very old linux.

Use mariadb-10.2.5-linux-systemd-x86_64.tar.gz (for systems with systemd) tarball.

But I agree this should be explained somewhere more prominently. Any suggestions where we could've put this info so that you wouldn't have to download wrong tarball?

Comment by Oli Sennhauser [ 2017-04-06 ]

Hello serg

OK. Got it and will try it out.

Some thoughts:

1.) I do not see why a generic tar ball is dependent on systemd and thus why it must be mentioned in the file name at all. This was one of the reasons I did not choose it.
2.) mariadb-10.2.5-linux-x86_64.tar.gz was the name pattern I always installed so maybe you should use this name for recent installations instead?
3.) I am not aware of glibc version I am using. It does not matter in my life. I do not even know how to check (ldd --version (Ubuntu GLIBC 2.23-0ubuntu7) 2.23)
4.) so maybe a better naming would be mariadb-10.2.5-linux-before-old-glibc_214-x86_64.tar.gz to make sure it is old stuff
5.) What about a name mariadb-10.2.5-linux-without-rocksdb-x86_64.tar.gz or similar

Comment by Oli Sennhauser [ 2017-04-06 ]

Tried it out and it does not work on Ubuntu 16.04:

/home/mysql/product/mariadb-10.2/bin/mysqld: error while loading shared libraries: libsystemd-daemon.so.0: cannot open shared object file: No such file or directory
 
ldd mysqld
        libsystemd-daemon.so.0 => not found
 
mysql@chef:/lib/x86_64-linux-gnu [mariadb-10.2, 3312]> ll *sys*
lrwxrwxrwx 1 root root     20 Jan 18 23:04 libsystemd.so.0 -> libsystemd.so.0.14.0
-rw-r--r-- 1 root root 536520 Jan 18 23:04 libsystemd.so.0.14.0

Tried to work around:

root@chef:/lib/x86_64-linux-gnu# ln -s libsystemd.so.0.14.0 libsystemd.so.0
 
/home/mysql/product/mariadb-10.2/bin/mysqld: /lib/x86_64-linux-gnu/libsystemd-daemon.so.0: version `LIBSYSTEMD_DAEMON_31' not found (required by /home/mysql/product/mariadb-10.2/bin/mysqld)
 
ii  libsystemd0:amd64                               229-4ubuntu16                              amd64        systemd utility library

So the generic binary tar ball is not really generic but RH. Shall I open another bug for this?

Comment by Oli Sennhauser [ 2017-04-06 ]

After downloading the 3rd mariadb package I still do not succed:

tar tf /download/mariadb-10.2.5-linux-glibc_214-x86_64.tar.gz | grep -i rock

I am not amused.

Comment by Sergei Golubchik [ 2017-04-06 ]

yes, I've checked that RocksDB is not present in "glibc_214" tarball, that's why I didn't suggest it.
"systemd" tarball is not RedHat, it's built on trusty (Ubuntu 14.04.5 Trusty Tahr).
"glibc_214" is built on Quantal (too old for RocksDB)
old generic tarball is built on CentOS 5.

Frankly, I don't understand why trusty tarball doesn't run on xenial. We need to look into it. Yes, please, open a new bug report for it.

Comment by Andrii Nikitin (Inactive) [ 2017-09-09 ]

To solve the problem conceptually - I would wish that mariadb-plugin-rocksdb didn't depend on mariadb-server (it does at least on yakkety where I tried it).
(in my understanding plugins never directly depend on program they are loaded into).

Then it would be possible to install platform-specific plugin-rocksdb and load it into "generic tarball". (Leaving problem of matched version to user).

Btw the same workaround is possible for those platforms where tar-bundled libgalera has unresolved dependencies - just install system "galera" package and use it inside "generic tarball".

To move it further - if different versions of mariadb-plugin-rocksdb could co-exist on one machine without artificial dependencies - then it would be possible to use different versions of tarball at the same time with platform-specific plugins.

As workaround - one may try to extract ha_rocksdb.so from corresponding plugin package and try to load it into "generic tar".

Comment by Vladislav Vaintroub [ 2017-09-09 ]

Storage engine plugins depend very much on mysqld. Therefore mysqld executable exports a lot of symbols, so that plugin could use them. for rocksdb those are for example below (disclaimer : taken from examining ha_rocksdb.dll dependencies from mysqld.exe on Windows)

bool String::append(class String const &)
bool String::append(char const *)
bool String::append(char const *,unsigned int)
unsigned int calculate_key_len(struct TABLE *,unsigned int,unsigned char const *,unsigned long)
enum enum_alter_inplace_result handler::check_if_supported_inplace_alter(struct TABLE *,class Alter_inplace_info *)
class handler * handler::clone(char const *,struct st_mem_root *)
void handler::column_bitmaps_signal(void)
int handler::compare_key(struct st_key_range *)
bool String::copy(class String const &)
bool String::copy(char const *,unsigned int,struct charset_info_st const *)
enum frm_type_enum dd_frm_type(class THD *,char *,struct st_mysql_lex_string *)
bool debug_sync_set_action(class THD *,char const *,unsigned __int64)
int handler::delete_table(char const *)
void handler::drop_table(char const *)
int error_log_print(enum loglevel,char const *,char *)
unsigned int filename_to_tablename(char const *,char *,unsigned int,bool)
bool String::fill(unsigned int,char)
void handler::get_auto_increment(unsigned __int64,unsigned __int64,unsigned __int64,unsigned __int64 *,unsigned __int64 *)
void handler::get_dynamic_partition_info(struct PARTITION_STATS *,unsigned int)
bool handler::get_error_message(int,class String *)
unsigned int Field_blob::get_length(unsigned char const *,unsigned int)
int handler::ha_index_first(unsigned char *)
class THD * handler::ha_thd(void)
int handler::index_next_same(unsigned char *,unsigned char const *,unsigned int)
int handler::index_read_idx_map(unsigned char *,unsigned int,unsigned char const *,unsigned long,enum ha_rkey_function)
class Bitmap<64> const key_map_empty
class Bitmap<64> key_map_full
void key_restore(unsigned char *,unsigned char const *,struct st_key *,unsigned int)
double handler::keyread_time(unsigned int,unsigned int,unsigned __int64)
unsigned __int64 handler::multi_range_read_info(unsigned int,unsigned int,unsigned int,unsigned int,unsigned int *,unsigned int *,class Cost_estimate *)
unsigned __int64 handler::multi_range_read_info_const(unsigned int,struct st_range_seq_if *,void *,unsigned int,unsigned int *,unsigned int *,class Cost_estimate *)
int handler::multi_range_read_init(struct st_range_seq_if *,void *,unsigned int,unsigned int,struct st_handler_buffer *)
int handler::multi_range_read_next(void * *)
bool my_disable_leak_check
char * mysql_real_data_home
bool mysqld_embedded
void handler::notify_table_changed(void)
unsigned int opt_debug_sync_timeout
void handler::print_error(int,unsigned long)
void print_keydup_error(struct TABLE *,struct st_key *,unsigned long)
void push_warning_printf(class THD *,enum Sql_condition::enum_warning_level,unsigned int,char const *,...)
int handler::read_first_row(unsigned char *,unsigned int)
int handler::read_range_first(struct st_key_range const *,struct st_key_range const *,bool,bool)
int handler::read_range_next(void)
bool String::real_alloc(unsigned int)
bool String::realloc_raw(unsigned int)
void handler::rebind_psi(void)
int handler::rename_table(char const *,char const *)
bool schema_table_store_record(class THD *,struct TABLE *)
void handler::set_end_range(struct st_key_range const *)
void handler::set_lock_type(enum thr_lock_type)
void sql_print_error(char const *,...)
void sql_print_information(char const *,...)
void sql_print_warning(char const *,...)
void thd_enter_cond(class THD *,struct st_mysql_cond *,struct st_mysql_mutex *,struct PSI_stage_info_v1 const *,struct PSI_stage_info_v1 *,char const *,char const *,int)
void thd_exit_cond(class THD *,struct PSI_stage_info_v1 const *,char const *,char const *,int)
class THD * thd_get_current_thd(void)
void trans_register_ha(class THD *,bool,struct handlerton *)
char const * * tx_isolation_names
void handler::unbind_psi(void)
int handler::update_auto_increment(void)
void handler::use_hidden_primary_key(void)
PSI_server
_current_thd_noinline
_db_doprnt_
_db_enter_
_db_flush_
_db_keyword_
_db_pargs_
_db_return_
_my_thread_var
alloc_root
bitmap_is_clear_all
get_charset_name
handler_index_cond_check
is_prefix
my_charset_bin
my_close
my_delete
my_dir
my_dirend
my_error_register
my_error_unregister
my_free
my_hash_delete
my_hash_element
my_hash_free
my_hash_init2
my_hash_insert
my_hash_search
my_hrtime
my_malloc
my_multi_malloc
my_printf_error
my_read
my_rw_destroy
my_rw_init
my_rw_rdlock
my_rw_unlock
my_rw_wrlock
my_safe_printf_stderr
my_seek
my_strdup
my_sync
my_write
mysql_tmpfile
pthread_cond_broadcast
pthread_cond_destroy
pthread_cond_init
pthread_cond_signal
pthread_cond_timedwait
pthread_join
strmake
strmov
strxnmov
system_charset_info
thd_binlog_filter_ok
thd_binlog_format
thd_get_thread_id
thd_ha_data
thd_in_lock_tables
thd_mark_transaction_to_rollback
thd_query_safe
thd_query_string
thd_sql_command
thd_tablespace_op
thd_test_options
thd_tx_isolation
thr_lock_data_init
thr_lock_delete
thr_lock_init

Comment by Vladislav Vaintroub [ 2017-09-09 ]

but it is true that plugins have no link dependency on Linux, because Linux linker allows unresolved symbols, and cannot link shared libraries to exes anyway.

Generated at Thu Feb 08 07:57:51 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.