summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergei Golubchik <serg@mariadb.org>2020-06-18 11:17:43 +0200
committerOleksandr Byelkin <sanja@mariadb.com>2020-06-19 19:43:07 +0200
commit35034d819cd4797466b9c99b446ad4a66bf93a29 (patch)
tree34b5af86c666c28f76287eb83678b8381e39e570
parent4acafaae9bf1b75d5328d6edc0dd4120f061db5a (diff)
downloadmariadb-git-35034d819cd4797466b9c99b446ad4a66bf93a29.tar.gz
S3 is pluggable now
-rw-r--r--debian/control9
-rw-r--r--debian/mariadb-plugin-s3.install3
-rw-r--r--include/aria_backup.h2
-rw-r--r--mysql-test/suite/s3/my.cnf1
-rw-r--r--mysql-test/suite/s3/suite.pm2
-rw-r--r--storage/maria/CMakeLists.txt16
-rw-r--r--storage/maria/ha_maria.cc22
-rw-r--r--storage/maria/ha_maria.h21
-rw-r--r--storage/maria/ha_s3.cc19
-rw-r--r--storage/maria/ma_backup.c22
-rw-r--r--storage/maria/ma_close.c3
-rw-r--r--storage/maria/ma_open.c70
-rw-r--r--storage/maria/ma_pagecache.h7
-rw-r--r--storage/maria/ma_static.c8
-rw-r--r--storage/maria/maria_def.h7
-rw-r--r--storage/maria/s3.cnf12
-rw-r--r--storage/maria/s3_func.h17
17 files changed, 127 insertions, 114 deletions
diff --git a/debian/control b/debian/control
index 71feb204fbd..0c16f867844 100644
--- a/debian/control
+++ b/debian/control
@@ -623,6 +623,15 @@ Description: Connect storage engine for MariaDB
other interesting features.
This package contains the Connect plugin for MariaDB.
+Package: mariadb-plugin-s3
+Architecture: any
+Depends: libcurl4,
+ mariadb-server-10.5 (= ${binary:Version}),
+ ${misc:Depends},
+ ${shlibs:Depends}
+Description: S3 storage engine for MariaDB
+ Read only table stored in S3.
+
Package: mariadb-plugin-rocksdb
Architecture: amd64 arm64 mips64el ppc64el
Depends: mariadb-server-10.5 (= ${binary:Version}),
diff --git a/debian/mariadb-plugin-s3.install b/debian/mariadb-plugin-s3.install
new file mode 100644
index 00000000000..a6f90b76f82
--- /dev/null
+++ b/debian/mariadb-plugin-s3.install
@@ -0,0 +1,3 @@
+etc/mysql/mariadb.conf.d/s3.cnf
+usr/bin/aria_s3_copy
+usr/lib/mysql/plugin/ha_s3.so
diff --git a/include/aria_backup.h b/include/aria_backup.h
index 30c139c4234..f399f6a6f40 100644
--- a/include/aria_backup.h
+++ b/include/aria_backup.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2018 MariaDB corporation
+/* Copyright (C) 2018,2020 MariaDB Corporation Ab
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
diff --git a/mysql-test/suite/s3/my.cnf b/mysql-test/suite/s3/my.cnf
index 1958a04343f..6f8c27d4d0d 100644
--- a/mysql-test/suite/s3/my.cnf
+++ b/mysql-test/suite/s3/my.cnf
@@ -2,6 +2,7 @@
!include include/default_client.cnf
[mysqld.1]
+plugin-load-add=ha_s3
s3=ON
#s3-host-name=s3.amazonaws.com
#s3-protocol-version=Amazon
diff --git a/mysql-test/suite/s3/suite.pm b/mysql-test/suite/s3/suite.pm
index 5bf1559ae97..b3d78874b19 100644
--- a/mysql-test/suite/s3/suite.pm
+++ b/mysql-test/suite/s3/suite.pm
@@ -2,7 +2,7 @@ package My::Suite::S3;
@ISA = qw(My::Suite);
-return "Need S3 engine" unless $::mysqld_variables{'s3'} eq "ON";
+return "Need S3 engine" unless $::mysqld_variables{'s3'} eq "ON" or $ENV{HA_S3_SO};
bless { };
diff --git a/storage/maria/CMakeLists.txt b/storage/maria/CMakeLists.txt
index 9d5ca0449de..34af45d07fa 100644
--- a/storage/maria/CMakeLists.txt
+++ b/storage/maria/CMakeLists.txt
@@ -1,4 +1,5 @@
# Copyright (C) 2007 MySQL AB
+# Copyright (C) 2009,2020 MariaDB Corporation Ab
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -105,7 +106,7 @@ OPTION(USE_ARIA_FOR_TMP_TABLES "Use Aria for temporary tables" ON)
#
INCLUDE (CheckIncludeFiles)
-SET(S3_SOURCES ha_s3.cc s3_func.c
+SET(S3_SOURCES s3_func.c
libmarias3/src/debug.c libmarias3/src/error.c libmarias3/src/marias3.c
libmarias3/src/request.c libmarias3/src/response.c libmarias3/src/sha256.c
libmarias3/src/sha256-internal.c libmarias3/src/xml.c)
@@ -115,18 +116,13 @@ IF(NOT PLUGIN_S3 STREQUAL NO)
ENDIF()
IF (CURL_FOUND)
- MYSQL_ADD_PLUGIN(s3 ${S3_SOURCES} STORAGE_ENGINE STATIC_ONLY
- LINK_LIBRARIES aria myisam mysys mysys_ssl curl
- NOT_EMBEDDED)
+ MYSQL_ADD_PLUGIN(s3 ha_s3.cc ${S3_SOURCES} COMPONENT s3-engine
+ LINK_LIBRARIES curl STORAGE_ENGINE NOT_EMBEDDED CONFIG s3.cnf)
ENDIF()
IF(TARGET s3)
- MYSQL_ADD_EXECUTABLE(aria_s3_copy aria_s3_copy.cc COMPONENT Server)
- TARGET_LINK_LIBRARIES(aria_s3_copy s3)
-
+ MYSQL_ADD_EXECUTABLE(aria_s3_copy aria_s3_copy.cc ${S3_SOURCES} COMPONENT s3-engine)
+ TARGET_LINK_LIBRARIES(aria_s3_copy aria myisam mysys mysys_ssl curl)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/libmarias3)
-
ADD_DEFINITIONS(-DWITH_S3_STORAGE_ENGINE)
-
- TARGET_LINK_LIBRARIES(aria s3)
ENDIF()
diff --git a/storage/maria/ha_maria.cc b/storage/maria/ha_maria.cc
index d2cbdc78c58..c257a2094f1 100644
--- a/storage/maria/ha_maria.cc
+++ b/storage/maria/ha_maria.cc
@@ -1,6 +1,6 @@
/* Copyright (C) 2004-2008 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
Copyright (C) 2008-2009 Sun Microsystems, Inc.
- Copyright (c) 2009, 2017, MariaDB Corporation.
+ Copyright (c) 2009, 2020, MariaDB Corporation Ab
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -72,7 +72,7 @@ const char *zerofill_error_msg=
corrupted.
*/
ulonglong maria_recover_options= HA_RECOVER_NONE;
-handlerton *maria_hton;
+handlerton __attribute__((visibility("default"))) *maria_hton;
/* bits in maria_recover_options */
const char *maria_recover_names[]=
@@ -2688,6 +2688,16 @@ int ha_maria::extra_opt(enum ha_extra_function operation, ulong cache_size)
}
+bool ha_maria::auto_repair(int error) const
+{
+ /* Always auto-repair moved tables (error == HA_ERR_OLD_FILE) */
+ return ((MY_TEST(maria_recover_options & HA_RECOVER_ANY) &&
+ error == HA_ERR_CRASHED_ON_USAGE) ||
+ error == HA_ERR_OLD_FILE);
+
+}
+
+
int ha_maria::delete_all_rows()
{
THD *thd= table->in_use;
@@ -3348,6 +3358,14 @@ ha_rows ha_maria::records_in_range(uint inx, const key_range *min_key,
}
+FT_INFO *ha_maria::ft_init_ext(uint flags, uint inx, String * key)
+{
+ return maria_ft_init_search(flags, file, inx,
+ (uchar *) key->ptr(), key->length(),
+ key->charset(), table->record[0]);
+}
+
+
int ha_maria::ft_read(uchar * buf)
{
int error;
diff --git a/storage/maria/ha_maria.h b/storage/maria/ha_maria.h
index deca18b689d..bff7ace8813 100644
--- a/storage/maria/ha_maria.h
+++ b/storage/maria/ha_maria.h
@@ -1,6 +1,7 @@
#ifndef HA_MARIA_INCLUDED
#define HA_MARIA_INCLUDED
-/* Copyright (C) 2006,2004 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
+/* Copyright (C) 2006, 2004 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
+ Copyright (c) 2009, 2020, MariaDB Corporation Ab
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -38,7 +39,7 @@ C_MODE_END
extern TYPELIB maria_recover_typelib;
extern ulonglong maria_recover_options;
-class ha_maria :public handler
+class __attribute__((visibility("default"))) ha_maria :public handler
{
public:
MARIA_HA *file;
@@ -97,12 +98,7 @@ public:
ft_handler->please->reinit_search(ft_handler);
return 0;
}
- FT_INFO *ft_init_ext(uint flags, uint inx, String * key)
- {
- return maria_ft_init_search(flags, file, inx,
- (uchar *) key->ptr(), key->length(),
- key->charset(), table->record[0]);
- }
+ FT_INFO *ft_init_ext(uint flags, uint inx, String * key);
int ft_read(uchar * buf);
int index_init(uint idx, bool sorted);
int index_end();
@@ -146,14 +142,7 @@ public:
bool check_and_repair(THD * thd);
bool is_crashed() const;
bool is_changed() const;
- bool auto_repair(int error) const
- {
- /* Always auto-repair moved tables (error == HA_ERR_OLD_FILE) */
- return ((MY_TEST(maria_recover_options & HA_RECOVER_ANY) &&
- error == HA_ERR_CRASHED_ON_USAGE) ||
- error == HA_ERR_OLD_FILE);
-
- }
+ bool auto_repair(int error) const;
int optimize(THD * thd, HA_CHECK_OPT * check_opt);
int assign_to_keycache(THD * thd, HA_CHECK_OPT * check_opt);
int preload_keys(THD * thd, HA_CHECK_OPT * check_opt);
diff --git a/storage/maria/ha_s3.cc b/storage/maria/ha_s3.cc
index 60d83440a98..1aae5a5b81f 100644
--- a/storage/maria/ha_s3.cc
+++ b/storage/maria/ha_s3.cc
@@ -1,4 +1,4 @@
-/* Copyright (C) 2019 MariaDB Corppration AB
+/* Copyright (C) 2019, 2020 MariaDB Corporation Ab
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -1008,9 +1008,24 @@ static int ha_s3_init(void *p)
s3_init_library();
if (s3_debug)
ms3_debug();
+
+ struct s3_func s3f_real =
+ {
+ ms3_set_option, s3_free, ms3_deinit, s3_unique_file_number,
+ read_index_header, s3_check_frm_version, s3_info_copy,
+ set_database_and_table_from_path, s3_open_connection
+ };
+ s3f= s3f_real;
+
return res ? HA_ERR_INITIALIZATION : 0;
}
+static int ha_s3_deinit(void*)
+{
+ bzero(&s3f, sizeof(s3f));
+ return 0;
+}
+
static SHOW_VAR status_variables[]= {
{"pagecache_blocks_not_flushed",
(char*) &s3_pagecache.global_blocks_changed, SHOW_LONG},
@@ -1057,7 +1072,7 @@ maria_declare_plugin(s3)
"ALTER TABLE table_name ENGINE=s3",
PLUGIN_LICENSE_GPL,
ha_s3_init, /* Plugin Init */
- NULL, /* Plugin Deinit */
+ ha_s3_deinit, /* Plugin Deinit */
0x0100, /* 1.0 */
status_variables, /* status variables */
system_variables, /* system variables */
diff --git a/storage/maria/ma_backup.c b/storage/maria/ma_backup.c
index 83b521b1cad..1ce6d43a9de 100644
--- a/storage/maria/ma_backup.c
+++ b/storage/maria/ma_backup.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2018 MariaDB corporation
+/* Copyright (C) 2018, 2020 MariaDB Corporation Ab
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -20,8 +20,6 @@
#include "ma_checkpoint.h"
#include <aria_backup.h>
-static uchar *_ma_base_info_read(uchar *ptr, MARIA_BASE_INFO *base);
-
/**
@brief Get capabilites for an Aria table
@@ -32,6 +30,7 @@ static uchar *_ma_base_info_read(uchar *ptr, MARIA_BASE_INFO *base);
@return X errno
*/
+int aria_get_capabilities(File kfile, ARIA_TABLE_CAPABILITIES *cap)__attribute__((visibility("default"))) ;
int aria_get_capabilities(File kfile, ARIA_TABLE_CAPABILITIES *cap)
{
MARIA_SHARE share;
@@ -102,20 +101,13 @@ int aria_get_capabilities(File kfile, ARIA_TABLE_CAPABILITIES *cap)
err:
my_free(disc_cache);
DBUG_RETURN(error);
-} /* maria_get_capabilities */
-
+} /* aria_get_capabilities */
-/*
- This is a copy of my_base_info_read from ma_open().
- The base information will never change (something may be added
- last, but not relevant for maria_get_capabilities), so it's safe to
- copy it here.
-
- The copy is done to avoid linking in the fill Aria library just
- because maria_backup uses maria_get_capabilities()
-*/
+/****************************************************************************
+** store MARIA_BASE_INFO
+****************************************************************************/
-static uchar *_ma_base_info_read(uchar *ptr, MARIA_BASE_INFO *base)
+uchar *_ma_base_info_read(uchar *ptr, MARIA_BASE_INFO *base)
{
bmove(base->uuid, ptr, MY_UUID_SIZE); ptr+= MY_UUID_SIZE;
base->keystart= mi_sizekorr(ptr); ptr+= 8;
diff --git a/storage/maria/ma_close.c b/storage/maria/ma_close.c
index fe0558d9bee..d2bbdd6f60a 100644
--- a/storage/maria/ma_close.c
+++ b/storage/maria/ma_close.c
@@ -1,4 +1,5 @@
/* Copyright (C) 2006 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
+ Copyright (c) 2010, 2020, MariaDB Corporation Ab
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -253,7 +254,7 @@ int maria_close(register MARIA_HA *info)
delete_dynamic(&info->pinned_pages);
#ifdef WITH_S3_STORAGE_ENGINE
if (info->s3)
- ms3_deinit(info->s3);
+ s3f.deinit(info->s3);
#endif /* WITH_S3_STORAGE_ENGINE */
my_free(info);
diff --git a/storage/maria/ma_open.c b/storage/maria/ma_open.c
index 9b23912ef1d..e7d6f97d57c 100644
--- a/storage/maria/ma_open.c
+++ b/storage/maria/ma_open.c
@@ -1,5 +1,5 @@
/* Copyright (C) 2006 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
- Copyright (c) 2009, 2019, MariaDB Corporation.
+ Copyright (c) 2009, 2020, MariaDB Corporation Ab
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -39,7 +39,6 @@ static my_bool maria_scan_init_dummy(MARIA_HA *info);
static void maria_scan_end_dummy(MARIA_HA *info);
static my_bool maria_once_init_dummy(MARIA_SHARE *, File);
static my_bool maria_once_end_dummy(MARIA_SHARE *);
-static uchar *_ma_base_info_read(uchar *ptr, MARIA_BASE_INFO *base);
static uchar *_ma_state_info_read(uchar *ptr, MARIA_STATE_INFO *state);
#define get_next_element(to,pos,size) { memcpy((char*) to,pos,(size_t) size); \
@@ -318,7 +317,7 @@ MARIA_HA *maria_open(const char *name, int mode, uint open_flags,
else
{
strmake(name_buff, name, sizeof(name_buff)-1); /* test_if_reopen() */
- if (!(s3_client= s3_open_connection(s3)))
+ if (!(s3_client= s3f.open_connection(s3)))
{
internal_table= 1; /* Avoid unlock on error */
goto err;
@@ -371,7 +370,7 @@ MARIA_HA *maria_open(const char *name, int mode, uint open_flags,
else
{
errpos= 1;
- if (set_database_and_table_from_path(s3, name_buff))
+ if (s3f.set_database_and_table_from_path(s3, name_buff))
{
my_printf_error(HA_ERR_NO_SUCH_TABLE,
"Can't find database and path from %s", MYF(0),
@@ -379,17 +378,17 @@ MARIA_HA *maria_open(const char *name, int mode, uint open_flags,
my_errno= HA_ERR_NO_SUCH_TABLE;
goto err;
}
- if (!(share_s3= share->s3_path= s3_info_copy(s3)))
+ if (!(share_s3= share->s3_path= s3f.info_copy(s3)))
goto err; /* EiOM */
/* Check if table has changed in S3 */
- if (s3_check_frm_version(s3_client, share_s3) == 1)
+ if (s3f.check_frm_version(s3_client, share_s3) == 1)
{
my_errno= HA_ERR_TABLE_DEF_CHANGED;
goto err;
}
- if (read_index_header(s3_client, share_s3, &index_header))
+ if (s3f.read_index_header(s3_client, share_s3, &index_header))
goto err;
if (index_header.length < head_length)
{
@@ -398,7 +397,7 @@ MARIA_HA *maria_open(const char *name, int mode, uint open_flags,
}
memcpy(share->state.header.file_version, index_header.str,
head_length);
- kfile= s3_unique_file_number();
+ kfile= s3f.unique_file_number();
}
#endif /* WITH_S3_STORAGE_ENGINE */
@@ -972,7 +971,7 @@ MARIA_HA *maria_open(const char *name, int mode, uint open_flags,
}
#ifdef WITH_S3_STORAGE_ENGINE
else
- data_file= info.dfile.file= s3_unique_file_number();
+ data_file= info.dfile.file= s3f.unique_file_number();
#endif /* WITH_S3_STORAGE_ENGINE */
}
errpos= 5;
@@ -1149,7 +1148,7 @@ MARIA_HA *maria_open(const char *name, int mode, uint open_flags,
if (s3_client)
{
size_t block_size= share->base.s3_block_size;
- ms3_set_option(s3_client, MS3_OPT_BUFFER_CHUNK_SIZE, &block_size);
+ s3f.set_option(s3_client, MS3_OPT_BUFFER_CHUNK_SIZE, &block_size);
}
#endif /* WITH_S3_STORAGE_ENGINE */
}
@@ -1162,7 +1161,7 @@ MARIA_HA *maria_open(const char *name, int mode, uint open_flags,
#ifdef WITH_S3_STORAGE_ENGINE
if (index_header.alloc_ptr)
- s3_free(&index_header);
+ s3f.free(&index_header);
#endif /* WITH_S3_STORAGE_ENGINE */
if (!(m_info= maria_clone_internal(share, mode, data_file,
@@ -1224,9 +1223,9 @@ err:
}
#ifdef WITH_S3_STORAGE_ENGINE
if (s3_client)
- ms3_deinit(s3_client);
+ s3f.deinit(s3_client);
if (index_header.alloc_ptr)
- s3_free(&index_header);
+ s3f.free(&index_header);
#endif /* WITH_S3_STORAGE_ENGINE */
if (!internal_table)
mysql_mutex_unlock(&THR_LOCK_maria);
@@ -1725,7 +1724,7 @@ uint _ma_state_info_read_dsk(File file __attribute__((unused)),
/****************************************************************************
-** store and read of MARIA_BASE_INFO
+** store MARIA_BASE_INFO
****************************************************************************/
uint _ma_base_info_write(File file, MARIA_BASE_INFO *base)
@@ -1775,49 +1774,6 @@ uint _ma_base_info_write(File file, MARIA_BASE_INFO *base)
}
-static uchar *_ma_base_info_read(uchar *ptr, MARIA_BASE_INFO *base)
-{
- bmove(base->uuid, ptr, MY_UUID_SIZE); ptr+= MY_UUID_SIZE;
- base->keystart= mi_sizekorr(ptr); ptr+= 8;
- base->max_data_file_length= mi_sizekorr(ptr); ptr+= 8;
- base->max_key_file_length= mi_sizekorr(ptr); ptr+= 8;
- base->records= (ha_rows) mi_sizekorr(ptr); ptr+= 8;
- base->reloc= (ha_rows) mi_sizekorr(ptr); ptr+= 8;
- base->mean_row_length= mi_uint4korr(ptr); ptr+= 4;
- base->reclength= mi_uint4korr(ptr); ptr+= 4;
- base->pack_reclength= mi_uint4korr(ptr); ptr+= 4;
- base->min_pack_length= mi_uint4korr(ptr); ptr+= 4;
- base->max_pack_length= mi_uint4korr(ptr); ptr+= 4;
- base->min_block_length= mi_uint4korr(ptr); ptr+= 4;
- base->fields= mi_uint2korr(ptr); ptr+= 2;
- base->fixed_not_null_fields= mi_uint2korr(ptr); ptr+= 2;
- base->fixed_not_null_fields_length= mi_uint2korr(ptr);ptr+= 2;
- base->max_field_lengths= mi_uint2korr(ptr); ptr+= 2;
- base->pack_fields= mi_uint2korr(ptr); ptr+= 2;
- base->extra_options= mi_uint2korr(ptr); ptr+= 2;
- base->null_bytes= mi_uint2korr(ptr); ptr+= 2;
- base->original_null_bytes= mi_uint2korr(ptr); ptr+= 2;
- base->field_offsets= mi_uint2korr(ptr); ptr+= 2;
- base->language= mi_uint2korr(ptr); ptr+= 2;
- base->block_size= mi_uint2korr(ptr); ptr+= 2;
-
- base->rec_reflength= *ptr++;
- base->key_reflength= *ptr++;
- base->keys= *ptr++;
- base->auto_key= *ptr++;
- base->born_transactional= *ptr++;
- base->compression_algorithm= *ptr++;
- base->pack_bytes= mi_uint2korr(ptr); ptr+= 2;
- base->blobs= mi_uint2korr(ptr); ptr+= 2;
- base->max_key_block_length= mi_uint2korr(ptr); ptr+= 2;
- base->max_key_length= mi_uint2korr(ptr); ptr+= 2;
- base->extra_alloc_bytes= mi_uint2korr(ptr); ptr+= 2;
- base->extra_alloc_procent= *ptr++;
- base->s3_block_size= mi_uint3korr(ptr); ptr+= 3;
- ptr+= 13;
- return ptr;
-}
-
/*--------------------------------------------------------------------------
maria_keydef
---------------------------------------------------------------------------*/
diff --git a/storage/maria/ma_pagecache.h b/storage/maria/ma_pagecache.h
index 3e409a63b30..dbd86fc0def 100644
--- a/storage/maria/ma_pagecache.h
+++ b/storage/maria/ma_pagecache.h
@@ -1,4 +1,5 @@
/* Copyright (C) 2006 MySQL AB
+ Copyright (c) 2011, 2020, MariaDB Corporation Ab
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -238,7 +239,7 @@ extern PAGECACHE dflt_pagecache_var, *dflt_pagecache;
extern size_t init_pagecache(PAGECACHE *pagecache, size_t use_mem,
uint division_limit, uint age_threshold,
uint block_size, uint changed_blocks_hash_size,
- myf my_read_flags);
+ myf my_read_flags)__attribute__((visibility("default"))) ;
extern size_t resize_pagecache(PAGECACHE *pagecache,
size_t use_mem, uint division_limit,
uint age_threshold, uint changed_blocks_hash_size);
@@ -318,7 +319,7 @@ extern int flush_pagecache_blocks_with_filter(PAGECACHE *keycache,
PAGECACHE_FILE *file,
enum flush_type type,
PAGECACHE_FLUSH_FILTER filter,
- void *filter_arg);
+ void *filter_arg)__attribute__((visibility("default"))) ;
extern my_bool pagecache_delete(PAGECACHE *pagecache,
PAGECACHE_FILE *file,
pgcache_page_no_t pageno,
@@ -334,7 +335,7 @@ extern my_bool pagecache_delete_pages(PAGECACHE *pagecache,
uint page_count,
enum pagecache_page_lock lock,
my_bool flush);
-extern void end_pagecache(PAGECACHE *keycache, my_bool cleanup);
+extern void end_pagecache(PAGECACHE *keycache, my_bool cleanup)__attribute__((visibility("default"))) ;
extern my_bool pagecache_collect_changed_blocks_with_lsn(PAGECACHE *pagecache,
LEX_STRING *str,
LSN *min_lsn);
diff --git a/storage/maria/ma_static.c b/storage/maria/ma_static.c
index fe9d89de5bf..de5b852a78d 100644
--- a/storage/maria/ma_static.c
+++ b/storage/maria/ma_static.c
@@ -1,4 +1,5 @@
/* Copyright (C) 2006 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
+ Copyright (c) 2010, 2020, MariaDB Corporation Ab
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -32,7 +33,7 @@ uchar maria_pack_file_magic[]=
/* Unique number for this maria instance */
uchar maria_uuid[MY_UUID_SIZE];
uint maria_quick_table_bits=9;
-ulong maria_block_size= MARIA_KEY_BLOCK_LENGTH;
+ulong __attribute__((visibility("default"))) maria_block_size= MARIA_KEY_BLOCK_LENGTH;
my_bool maria_flush= 0, maria_single_user= 0;
my_bool maria_delay_key_write= 0, maria_page_checksums= 1;
my_bool maria_inited= FALSE;
@@ -146,3 +147,8 @@ PSI_file_key key_file_translog, key_file_kfile, key_file_dfile,
/* Note that PSI_stage_info globals must always be declared. */
PSI_stage_info stage_waiting_for_a_resource= { 0, "Waiting for a resource", 0};
+
+#ifdef WITH_S3_STORAGE_ENGINE
+#include "s3_func.h"
+struct s3_func __attribute__((visibility("default"))) s3f;
+#endif
diff --git a/storage/maria/maria_def.h b/storage/maria/maria_def.h
index 07394d41a76..bf2cd5c6a92 100644
--- a/storage/maria/maria_def.h
+++ b/storage/maria/maria_def.h
@@ -1,4 +1,5 @@
/* Copyright (C) 2006 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
+ Copyright (c) 2009, 2020, MariaDB Corporation Ab
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -606,6 +607,7 @@ typedef struct st_ma_base_info
my_bool born_transactional;
} MARIA_BASE_INFO;
+uchar *_ma_base_info_read(uchar *ptr, MARIA_BASE_INFO *base);
/* Structs used intern in database */
@@ -1616,7 +1618,7 @@ extern size_t _ma_nommap_pwrite(MARIA_HA *info, const uchar *Buffer,
#define MA_STATE_INFO_WRITE_FULL_INFO 2
/* intern_lock taking is needed */
#define MA_STATE_INFO_WRITE_LOCK 4
-uint _ma_state_info_write(MARIA_SHARE *share, uint pWrite);
+uint _ma_state_info_write(MARIA_SHARE *share, uint pWrite)__attribute__((visibility("default"))) ;
uint _ma_state_info_write_sub(File file, MARIA_STATE_INFO *state, uint pWrite);
uint _ma_state_info_read_dsk(File file, MARIA_STATE_INFO *state);
uint _ma_base_info_write(File file, MARIA_BASE_INFO *base);
@@ -1660,7 +1662,8 @@ void _ma_remap_file(MARIA_HA *info, my_off_t size);
MARIA_RECORD_POS _ma_write_init_default(MARIA_HA *info, const uchar *record);
my_bool _ma_write_abort_default(MARIA_HA *info);
int maria_delete_table_files(const char *name, my_bool temporary,
- myf flags);
+ myf flags)__attribute__((visibility("default"))) ;
+
/*
This cannot be in my_base.h as it clashes with HA_SPATIAL.
diff --git a/storage/maria/s3.cnf b/storage/maria/s3.cnf
new file mode 100644
index 00000000000..94682cc14d7
--- /dev/null
+++ b/storage/maria/s3.cnf
@@ -0,0 +1,12 @@
+[mariadb]
+plugin-load-add=ha_s3
+
+#
+# Uncomment and configure the S3 engine
+#
+#s3-host-name=s3.amazonaws.com
+#s3-protocol-version=Amazon
+#s3-bucket=...
+#s3-access-key=...
+#s3-secret-key=...
+#s3-region=eu-north-1
diff --git a/storage/maria/s3_func.h b/storage/maria/s3_func.h
index 09fb6802cca..8981517dd4d 100644
--- a/storage/maria/s3_func.h
+++ b/storage/maria/s3_func.h
@@ -1,6 +1,6 @@
#ifndef S3_FUNC_INCLUDED
#define S3_FUNC_INCLUDED
-/* Copyright (C) 2019 MariaDB Corporation Ab
+/* Copyright (C) 2019, 2020 MariaDB Corporation Ab
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -20,11 +20,23 @@
*/
#ifdef WITH_S3_STORAGE_ENGINE
-C_MODE_START
#include <libmarias3/marias3.h>
+C_MODE_START
#define DEFAULT_AWS_HOST_NAME "s3.amazonaws.com"
+extern struct s3_func {
+ uint8_t (*set_option)(ms3_st *, ms3_set_option_t, void *);
+ void (*free)(S3_BLOCK *);
+ void (*deinit)(ms3_st *);
+ int32 (*unique_file_number)(void);
+ my_bool (*read_index_header)(ms3_st *, S3_INFO *, S3_BLOCK *);
+ int (*check_frm_version)(ms3_st *, S3_INFO *);
+ S3_INFO *(*info_copy)(S3_INFO *);
+ my_bool (*set_database_and_table_from_path)(S3_INFO *, const char *);
+ ms3_st *(*open_connection)(S3_INFO *);
+} s3f;
+
extern TYPELIB s3_protocol_typelib;
/* Store information about a s3 connection */
@@ -34,7 +46,6 @@ typedef struct s3_info
/* Connection strings */
LEX_CSTRING access_key, secret_key, region, bucket, host_name;
-
/* Will be set by caller or by ma_open() */
LEX_CSTRING database, table;