mirror of
https://github.com/MariaDB/server.git
synced 2025-08-07 00:04:31 +03:00
MDEV-12933 sort out the compression library chaos
bzip2/lz4/lzma/lzo/snappy compression is now provided via *services* they're almost like normal services, but in include/providers/ and they're supposed to provide exactly the same interface as original compression libraries (but not everything, only enough of if for the code to compile). the services are implemented via dummy functions that return corresponding error values (LZMA_PROG_ERROR, LZO_E_INTERNAL_ERROR, etc). the actual compression libraries are linked into corresponding provider plugins. Providers are daemon plugins that when loaded replace service pointers to point to actual compression functions. That is, run-time dependency on compression libraries is now on plugins, and the server doesn't need any compression libraries to run, but will automatically support the compression when a plugin is loaded. InnoDB and Mroonga use compression plugins now. RocksDB doesn't, because it comes with standalone utility binaries that cannot load plugins.
This commit is contained in:
committed by
Sergei Golubchik
parent
c356714d77
commit
bf8b699f64
31
mysql-test/suite/plugins/r/compression_load.result
Normal file
31
mysql-test/suite/plugins/r/compression_load.result
Normal file
@@ -0,0 +1,31 @@
|
||||
select plugin_name, plugin_status from information_schema.plugins where plugin_name='provider_lz4';
|
||||
plugin_name plugin_status
|
||||
set global innodb_compression_algorithm = lz4;
|
||||
ERROR 42000: Variable 'innodb_compression_algorithm' can't be set to the value of 'lz4'
|
||||
install plugin provider_lz4 soname 'provider_lz4';
|
||||
select plugin_name, plugin_status from information_schema.plugins where plugin_name='provider_lz4';
|
||||
plugin_name plugin_status
|
||||
provider_lz4 ACTIVE
|
||||
set global innodb_compression_algorithm = lz4;
|
||||
create table t1 (a int, b text) engine=innodb page_compressed=1;
|
||||
insert t1 (a, b) values (0, repeat("abc", 100));
|
||||
insert t1 (a, b) values (1, repeat("def", 1000));
|
||||
insert t1 (a, b) values (2, repeat("ghi", 10000));
|
||||
select a, left(b, 9), length(b) from t1;
|
||||
a left(b, 9) length(b)
|
||||
0 abcabcabc 300
|
||||
1 defdefdef 3000
|
||||
2 ghighighi 30000
|
||||
uninstall plugin provider_lz4;
|
||||
select plugin_name, plugin_status from information_schema.plugins where plugin_name='provider_lz4';
|
||||
plugin_name plugin_status
|
||||
provider_lz4 INACTIVE
|
||||
set global innodb_compression_algorithm = default;
|
||||
set global innodb_compression_algorithm = lz4;
|
||||
set global innodb_compression_algorithm = default;
|
||||
select a, left(b, 9), length(b) from t1;
|
||||
a left(b, 9) length(b)
|
||||
0 abcabcabc 300
|
||||
1 defdefdef 3000
|
||||
2 ghighighi 30000
|
||||
drop table t1;
|
Reference in New Issue
Block a user