diff --git a/databases/xtrabackup84/Makefile b/databases/xtrabackup84/Makefile index 73e353ecf0ed..b64fac852d84 100644 --- a/databases/xtrabackup84/Makefile +++ b/databases/xtrabackup84/Makefile @@ -1,75 +1,75 @@ PORTNAME= xtrabackup84 PORTVERSION= 8.4.0 DISTVERSIONSUFFIX= -1 -PORTREVISION= 4 +PORTREVISION= 5 CATEGORIES= databases MASTER_SITES= https://downloads.percona.com/downloads/Percona-XtraBackup-innovative-release/Percona-XtraBackup-8.4.0-1/source/tarball/:percona DISTFILES= ${PPORTNAME}-${DVERSION}${EXTRACT_SUFX}:percona MAINTAINER= samm@FreeBSD.org COMMENT= Open-source backup tool for InnoDB and XtraDB WWW= https://docs.percona.com/percona-xtrabackup/8.4/ LICENSE= GPLv2 LICENSE_FILE= ${WRKSRC}/LICENSE # MySQL8.2+ supports only 64-bit platforms NOT_FOR_ARCHS= armv6 armv7 i386 powerpc BUILD_DEPENDS= protobuf>=3.0:devel/protobuf \ rapidjson>=1.1.0:devel/rapidjson \ libevent>=2.1:devel/libevent LIB_DEPENDS= libcurl.so:ftp/curl \ libev.so:devel/libev \ libgcrypt.so:security/libgcrypt \ libgpg-error.so:security/libgpg-error \ libicudata.so:devel/icu \ libprotobuf-lite.so:devel/protobuf \ libunwind.so:devel/libunwind \ libzstd.so:archivers/zstd RUN_DEPENDS= qpress:archivers/qpress USES= bison cmake compiler:c++14-lang cpe pkgconfig ssl CPE_VENDOR= percona CMAKE_ARGS= -DBUILD_CONFIG:STRING=xtrabackup_release \ -DWITHOUT_COMPONENT_KEYRING_KMIP:STRING=yes \ -DWITH_VERSION_CHECK=false .for component in EDITLINE ICU LIBEVENT PROTOBUF RAPIDJSON ZSTD CMAKE_ARGS+= -DWITH_${component}:STRING=system .endfor CONFLICTS_INSTALL= ${PORTNAME:C/.$//}* # Build fails without NDEBUG, so force it CFLAGS+= -DNDEBUG -fPIC CXXFLAGS+= -DNDEBUG -fPIC CFLAGS_aarch64?= -march=armv8-a+crc+crypto DVERSION= ${PORTVERSION}${DISTVERSIONSUFFIX} PPORTNAME= percona-xtrabackup WRKSRC= ${WRKDIR}/${PPORTNAME}-${DVERSION} .include KEEP_EXTRA= lz4 zlib libbacktrace libcno boost unordered_dense post-patch: .for d in storage/innobase/xtrabackup/src sql/protobuf ${REINPLACE_CMD} 's,%%PREFIX%%,${PREFIX},' ${WRKSRC}/${d}/CMakeLists.txt .endfor pre-configure: .for dir in ${KEEP_EXTRA} @${MV} ${WRKSRC}/extra/${dir} ${WRKDIR} .endfor @${RM} -r ${WRKSRC}/extra/* .for dir in ${KEEP_EXTRA} @${MV} ${WRKDIR}/${dir} ${WRKSRC}/extra .endfor post-stage: @${RM} -r ${STAGEDIR}${PREFIX}/docs ${STAGEDIR}${PREFIX}/man @${RMDIR} ${STAGEDIR}${PREFIX}/lib/plugin/debug .include diff --git a/databases/xtrabackup84/files/patch-CMakeLists.txt b/databases/xtrabackup84/files/patch-CMakeLists.txt index 8152347c2ee0..f8dc92ee52fe 100644 --- a/databases/xtrabackup84/files/patch-CMakeLists.txt +++ b/databases/xtrabackup84/files/patch-CMakeLists.txt @@ -1,22 +1,22 @@ ---- CMakeLists.txt.orig 2023-10-19 12:05:28 UTC +--- CMakeLists.txt.orig 2024-08-08 10:30:27 UTC +++ CMakeLists.txt -@@ -2094,8 +2094,6 @@ IF(WITH_PROTOBUF STREQUAL "bundled" OR WITH_FIDO STREQ +@@ -2097,8 +2097,6 @@ ENDIF() ENDIF() ENDIF() -ADD_SUBDIRECTORY(extra/libkmip) - # # Setup maintainer mode options by the end. Platform checks are # not run with the warning options as to not perturb fragile checks -@@ -2345,10 +2343,6 @@ ENDIF() +@@ -2364,10 +2362,6 @@ IF(ENABLE_GCOV) IF(ENABLE_GCOV) INCLUDE(fastcov) -ENDIF() - -IF(UNIX) - ADD_SUBDIRECTORY(man) ENDIF() IF(LINUX AND NOT WITHOUT_SERVER) diff --git a/databases/xtrabackup84/files/patch-cmake-install_layout.cmake b/databases/xtrabackup84/files/patch-cmake-install_layout.cmake index f5916ece2f0b..ccfe4ddb0dfb 100644 --- a/databases/xtrabackup84/files/patch-cmake-install_layout.cmake +++ b/databases/xtrabackup84/files/patch-cmake-install_layout.cmake @@ -1,11 +1,11 @@ ---- cmake/install_layout.cmake.orig 2023-10-19 12:05:28 UTC +--- cmake/install_layout.cmake.orig 2024-08-08 10:30:27 UTC +++ cmake/install_layout.cmake -@@ -159,7 +159,7 @@ SET(INSTALL_INFODIR_STANDALONE "docs") +@@ -160,7 +160,7 @@ SET(INSTALL_MYSQLSHAREDIR_STANDALONE "share") # SET(INSTALL_SHAREDIR_STANDALONE "share") SET(INSTALL_MYSQLSHAREDIR_STANDALONE "share") -SET(INSTALL_MYSQLTESTDIR_STANDALONE "xtrabackup-test") +# SET(INSTALL_MYSQLTESTDIR_STANDALONE "xtrabackup-test") SET(INSTALL_SUPPORTFILESDIR_STANDALONE "support-files") # SET(INSTALL_MYSQLDATADIR_STANDALONE "data") diff --git a/databases/xtrabackup84/files/patch-llvm-15 b/databases/xtrabackup84/files/patch-llvm-15 index 0017d73b5902..68b5a7cee871 100644 --- a/databases/xtrabackup84/files/patch-llvm-15 +++ b/databases/xtrabackup84/files/patch-llvm-15 @@ -1,28 +1,28 @@ ---- storage/innobase/include/ddl0impl.h.orig 2023-10-19 12:05:28 UTC +--- storage/innobase/include/ddl0impl.h.orig 2024-08-08 10:30:27 UTC +++ storage/innobase/include/ddl0impl.h -@@ -118,14 +118,6 @@ struct Fetch_sequence : public Context::FTS::Sequence +@@ -119,14 +119,6 @@ struct Row { /** Physical row context. */ struct Row { - /** Constructor. */ - Row() = default; - - Row(const Row &) = default; - - /** Destructor. */ - ~Row() = default; - Row &operator=(const Row &) = default; /** Build a row from a raw record. ---- unittest/gunit/mysys_my_rdtsc-t.cc.orig 2023-10-19 12:05:28 UTC +--- unittest/gunit/mysys_my_rdtsc-t.cc.orig 2024-08-08 10:30:27 UTC +++ unittest/gunit/mysys_my_rdtsc-t.cc -@@ -145,7 +145,7 @@ TEST_F(RDTimeStampCounter, TestNanosecond) { +@@ -146,7 +146,7 @@ TEST_F(RDTimeStampCounter, TestNanosecond) { ulonglong t1 = my_timer_nanoseconds(); ulonglong t2; int i; - int backward = 0; + int backward [[maybe_unused]] = 0; int nonzero = 0; for (i = 0; i < LOOP_COUNT; i++) { diff --git a/databases/xtrabackup84/files/patch-sql_auth_sql__authorization.cc b/databases/xtrabackup84/files/patch-sql_auth_sql__authorization.cc index 95b8518d0a9a..7356f3ca739c 100644 --- a/databases/xtrabackup84/files/patch-sql_auth_sql__authorization.cc +++ b/databases/xtrabackup84/files/patch-sql_auth_sql__authorization.cc @@ -1,13 +1,13 @@ ---- sql/auth/sql_authorization.cc.orig 2023-10-19 12:05:28 UTC +--- sql/auth/sql_authorization.cc.orig 2024-08-08 10:30:27 UTC +++ sql/auth/sql_authorization.cc -@@ -7437,6 +7437,10 @@ bool operator==(const Role_id &a, const std::string &b +@@ -237,6 +237,10 @@ bool operator==(const Role_id &a, const std::string &b return tmp == b; } +bool operator==(const Role_id &a, const LEX_CSTRING &b) { + return a == to_string(b); +} + bool operator==(const std::pair &a, const std::string &b) { return a.first == b; } diff --git a/databases/xtrabackup84/files/patch-sql_binlog__ostream.cc b/databases/xtrabackup84/files/patch-sql_binlog__ostream.cc new file mode 100644 index 000000000000..09a825eb9d7e --- /dev/null +++ b/databases/xtrabackup84/files/patch-sql_binlog__ostream.cc @@ -0,0 +1,11 @@ +--- sql/binlog_ostream.cc.orig 2024-08-08 10:30:27 UTC ++++ sql/binlog_ostream.cc +@@ -240,7 +240,7 @@ bool IO_CACHE_binlog_cache_storage::setup_ciphers_pass + + /* Generate password, it is a random string. */ + if (my_rand_buffer(password, sizeof(password))) return true; +- password_str.append(password, sizeof(password)); ++ password_str.insert(password_str.end(), password, password + sizeof(password)); + + m_io_cache.m_encryptor->close(); + m_io_cache.m_decryptor->close(); diff --git a/databases/xtrabackup84/files/patch-sql_mdl__context__backup.cc b/databases/xtrabackup84/files/patch-sql_mdl__context__backup.cc new file mode 100644 index 000000000000..f1a421d1f3ef --- /dev/null +++ b/databases/xtrabackup84/files/patch-sql_mdl__context__backup.cc @@ -0,0 +1,36 @@ +--- sql/mdl_context_backup.cc.orig 2024-08-08 10:30:27 UTC ++++ sql/mdl_context_backup.cc +@@ -160,7 +160,7 @@ bool MDL_context_backup_manager::create_backup(const M + DBUG_TRACE; + + try { +- MDL_context_backup_key key_obj(key, keylen); ++ MDL_context_backup_key key_obj(key, key + keylen); + + /* + Since this method is called as part of THD cleaning up, every XA +@@ -193,7 +193,7 @@ bool MDL_context_backup_manager::create_backup(MDL_req + + bool result = false; + try { +- MDL_context_backup_key key_obj(key, keylen); ++ MDL_context_backup_key key_obj(key, key + keylen); + /* + Check for presence a record with specified key in the collection of + MDL_context_backup elements. It is ok to already have a record with +@@ -239,7 +239,7 @@ bool MDL_context_backup_manager::restore_backup(MDL_co + + MUTEX_LOCK(guard, &m_LOCK_mdl_context_backup); + +- auto result = m_backup_map.find(MDL_context_backup_key(key, keylen)); ++ auto result = m_backup_map.find(MDL_context_backup_key(key, key + keylen)); + if (result != m_backup_map.end()) { + element = result->second.get(); + res = mdl_context->clone_tickets(element->get_context(), MDL_TRANSACTION); +@@ -252,5 +252,5 @@ void MDL_context_backup_manager::delete_backup(const u + const size_t keylen) { + DBUG_TRACE; + MUTEX_LOCK(guard, &m_LOCK_mdl_context_backup); +- m_backup_map.erase(MDL_context_backup_key(key, keylen)); ++ m_backup_map.erase(MDL_context_backup_key(key, key + keylen)); + } diff --git a/databases/xtrabackup84/files/patch-sql_mdl__context__backup.h b/databases/xtrabackup84/files/patch-sql_mdl__context__backup.h new file mode 100644 index 000000000000..76ef3239e8c2 --- /dev/null +++ b/databases/xtrabackup84/files/patch-sql_mdl__context__backup.h @@ -0,0 +1,11 @@ +--- sql/mdl_context_backup.h.orig 2024-08-08 10:30:27 UTC ++++ sql/mdl_context_backup.h +@@ -47,7 +47,7 @@ class MDL_context_backup_manager { + /** + Key for uniquely identifying MDL_context in the MDL_context_backup map. + */ +- typedef std::basic_string MDL_context_backup_key; ++ typedef std::vector MDL_context_backup_key; + + class MDL_context_backup; + diff --git a/databases/xtrabackup84/files/patch-sql_range__optimizer_index__range__scan__plan.cc b/databases/xtrabackup84/files/patch-sql_range__optimizer_index__range__scan__plan.cc new file mode 100644 index 000000000000..443abfba0906 --- /dev/null +++ b/databases/xtrabackup84/files/patch-sql_range__optimizer_index__range__scan__plan.cc @@ -0,0 +1,39 @@ +--- sql/range_optimizer/index_range_scan_plan.cc.orig 2024-08-08 10:30:27 UTC ++++ sql/range_optimizer/index_range_scan_plan.cc +@@ -1016,11 +1016,11 @@ static bool null_part_in_key(KEY_PART *key_part, const + return false; + } + +-// TODO(sgunders): This becomes a bit simpler with C++20's string_view +-// constructors. +-static inline std::basic_string_view make_string_view(const uchar *start, +- const uchar *end) { +- return {start, static_cast(end - start)}; ++static inline bool equal(const uchar *start1, const uchar *end1, ++ const uchar *start2, const uchar *end2) { ++ auto diff1 = end1 - start1; ++ auto diff2 = end2 - start2; ++ return diff1 == diff2 && memcmp(start1, start2, diff1) == 0; + } + + /** +@@ -1083,8 +1083,7 @@ static bool get_ranges_from_tree_given_base( + node->next_key_part->type == SEL_ROOT::Type::KEY_RANGE && + node->next_key_part->root->part == part + 1) { + if (node->min_flag == 0 && node->max_flag == 0 && +- make_string_view(min_key, tmp_min_key) == +- make_string_view(max_key, tmp_max_key)) { ++ equal(min_key, tmp_min_key, max_key, tmp_max_key)) { + // This range was an equality predicate, and we have more + // keyparts to scan, so use its range as a base for ranges on + // the next keypart(s). E.g. if we have (a = 3) on this keypart, +@@ -1160,8 +1159,7 @@ static bool get_ranges_from_tree_given_base( + else + flag |= NO_MAX_RANGE; + } +- if (flag == 0 && make_string_view(base_min_key, tmp_min_key) == +- make_string_view(base_max_key, tmp_max_key)) { ++ if (flag == 0 && equal(base_min_key, tmp_min_key, base_max_key, tmp_max_key)) { + flag |= EQ_RANGE; + /* + Note that keys which are extended with PK parts have no diff --git a/databases/xtrabackup84/files/patch-sql_rpl__log__encryption.cc b/databases/xtrabackup84/files/patch-sql_rpl__log__encryption.cc new file mode 100644 index 000000000000..d7a9ad58cf93 --- /dev/null +++ b/databases/xtrabackup84/files/patch-sql_rpl__log__encryption.cc @@ -0,0 +1,143 @@ +--- sql/rpl_log_encryption.cc.orig 2024-08-08 10:30:27 UTC ++++ sql/rpl_log_encryption.cc +@@ -213,7 +213,7 @@ bool Rpl_encryption::recover_master_key() { + Rpl_encryption_header::seqno_to_key_id(m_master_key_seqno); + auto master_key = + get_key(m_master_key.m_id, Rpl_encryption_header::get_key_type()); +- m_master_key.m_value.assign(master_key.second); ++ m_master_key.m_value = master_key.second; + /* No keyring error */ + if (master_key.first == Keyring_status::KEYRING_ERROR_FETCHING) goto err1; + } +@@ -290,7 +290,7 @@ bool Rpl_encryption::recover_master_key() { + + if (new_master_key.first == Keyring_status::SUCCESS) { + m_master_key.m_id = new_master_key_id; +- m_master_key.m_value.assign(new_master_key.second); ++ m_master_key.m_value = new_master_key.second; + if (new_master_key_seqno.second > m_master_key_seqno && + new_master_key_seqno.second > old_master_key_seqno.second) { + if (m_master_key_seqno > 0) { +@@ -380,8 +380,8 @@ std::pair + reinterpret_cast(std::get<1>(tuple)); + first[0] = ~(first[0]); + }); +- key_str.append(reinterpret_cast(std::get<1>(tuple)), +- std::get<2>(tuple)); ++ auto *first = reinterpret_cast(std::get<1>(tuple)); ++ key_str.insert(key_str.end(), first, first + std::get<2>(tuple)); + my_free(std::get<1>(tuple)); + } + +@@ -396,7 +396,7 @@ std::pair + if (pair.first == Keyring_status::SUCCESS) { + DBUG_EXECUTE_IF("corrupt_replication_encryption_key_size", + { pair.second.resize(key_size / 2); }); +- if (pair.second.length() != key_size) ++ if (pair.second.size() != key_size) + pair.first = Keyring_status::UNEXPECTED_KEY_SIZE; + } + return pair; +@@ -450,7 +450,7 @@ bool Rpl_encryption::enable_for_xtrabackup() { + Rpl_encryption_header::seqno_to_key_id(m_master_key_seqno); + auto master_key = + get_key(m_master_key.m_id, Rpl_encryption_header::get_key_type()); +- m_master_key.m_value.assign(master_key.second); ++ m_master_key.m_value = master_key.second; + /* No keyring error */ + if (master_key.first == Keyring_status::KEYRING_ERROR_FETCHING) res = true; + } +@@ -771,7 +771,7 @@ Rpl_encryption::get_seqno_from_keyring(std::string key + auto fetched_key = get_key(key_id, SEQNO_KEY_TYPE, SEQNO_KEY_LENGTH); + uint32_t seqno = 0; + if (fetched_key.first == Keyring_status::SUCCESS) { +- const void *key = fetched_key.second.c_str(); ++ const void *key = fetched_key.second.data(); + memcpy(&seqno, key, sizeof(seqno)); + seqno = le32toh(seqno); + } +@@ -976,7 +976,7 @@ bool Rpl_encryption::generate_master_key_on_keyring(ui + + /* Store the generated key as the new master key */ + m_master_key.m_id = key_id; +- m_master_key.m_value.assign(pair.second); ++ m_master_key.m_value = pair.second; + + return false; + } +@@ -1079,12 +1079,12 @@ bool Rpl_encryption_header_v1::serialize(Basic_ostream + + assert(m_encrypted_password.length() == PASSWORD_FIELD_SIZE); + *ptr++ = ENCRYPTED_FILE_PASSWORD; +- memcpy(ptr, m_encrypted_password.data(), m_encrypted_password.length()); ++ memcpy(ptr, m_encrypted_password.data(), m_encrypted_password.size()); + ptr += PASSWORD_FIELD_SIZE; + + assert(m_iv.length() == IV_FIELD_SIZE); + *ptr++ = IV_FOR_FILE_PASSWORD; +- memcpy(ptr, m_iv.data(), m_iv.length()); ++ memcpy(ptr, m_iv.data(), m_iv.size()); + + bool res = DBUG_EVALUATE_IF("fail_to_serialize_encryption_header", true, + ostream->write(header, HEADER_SIZE)); +@@ -1139,13 +1139,13 @@ bool Rpl_encryption_header_v1::deserialize(Basic_istre + reinterpret_cast( + reader.ptr(PASSWORD_FIELD_SIZE)); + if (!reader.has_error()) +- m_encrypted_password.assign(password_ptr, PASSWORD_FIELD_SIZE); ++ m_encrypted_password.assign(password_ptr, password_ptr + PASSWORD_FIELD_SIZE); + break; + } + case IV_FOR_FILE_PASSWORD: { + const unsigned char *iv_ptr = + reinterpret_cast(reader.ptr(IV_FIELD_SIZE)); +- if (!reader.has_error()) m_iv.assign(iv_ptr, IV_FIELD_SIZE); ++ if (!reader.has_error()) m_iv.assign(iv_ptr, iv_ptr + IV_FIELD_SIZE); + break; + } + default: +@@ -1205,11 +1205,11 @@ Key_string Rpl_encryption_header_v1::decrypt_file_pass + unsigned char buffer[Aes_ctr::PASSWORD_LENGTH]; + + if (my_aes_decrypt(m_encrypted_password.data(), +- m_encrypted_password.length(), buffer, ++ m_encrypted_password.size(), buffer, + error_and_key.second.data(), +- error_and_key.second.length(), my_aes_256_cbc, ++ error_and_key.second.size(), my_aes_256_cbc, + m_iv.data(), false) != MY_AES_BAD_DATA) +- file_password.append(buffer, Aes_ctr::PASSWORD_LENGTH); ++ file_password.insert(file_password.end(), buffer, buffer + Aes_ctr::PASSWORD_LENGTH); + } + } + #endif +@@ -1240,16 +1240,16 @@ bool Rpl_encryption_header_v1::encrypt_file_password(K + + /* Generate iv, it is a random string. */ + error = my_rand_buffer(iv, Aes_ctr::AES_BLOCK_SIZE); +- m_iv = Key_string(iv, sizeof(iv)); ++ m_iv = Key_string(iv, iv + sizeof(iv)); + + /* Encrypt password */ + if (!error) { +- error = (my_aes_encrypt(password_str.data(), password_str.length(), ++ error = (my_aes_encrypt(password_str.data(), password_str.size(), + encrypted_password, master_key.m_value.data(), +- master_key.m_value.length(), my_aes_256_cbc, iv, ++ master_key.m_value.size(), my_aes_256_cbc, iv, + false) == MY_AES_BAD_DATA); + m_encrypted_password = +- Key_string(encrypted_password, sizeof(encrypted_password)); ++ Key_string(encrypted_password, encrypted_password + sizeof(encrypted_password)); + } + + return error; +@@ -1265,7 +1265,7 @@ Key_string Rpl_encryption_header_v1::generate_new_file + /* Generate password, it is a random string. */ + error = my_rand_buffer(password, sizeof(password)); + if (!error) { +- password_str.append(password, sizeof(password)); ++ password_str.insert(password_str.end(), password, password + sizeof(password)); + } + + if (error || encrypt_file_password(password_str) || diff --git a/databases/xtrabackup84/files/patch-sql_stream__cipher.cc b/databases/xtrabackup84/files/patch-sql_stream__cipher.cc new file mode 100644 index 000000000000..a1de0e8f6df7 --- /dev/null +++ b/databases/xtrabackup84/files/patch-sql_stream__cipher.cc @@ -0,0 +1,11 @@ +--- sql/stream_cipher.cc.orig 2024-07-12 19:15:25 UTC ++++ sql/stream_cipher.cc +@@ -46,7 +46,7 @@ bool Aes_ctr_cipher::open(const Key_string &pass + m_header_size = header_size; + #ifdef HAVE_BYTESTOKEY_SHA512_HANDLING + if (EVP_BytesToKey(Aes_ctr::get_evp_cipher(), Aes_ctr::get_evp_md(), nullptr, +- password.data(), password.length(), 1, m_file_key, ++ password.data(), password.size(), 1, m_file_key, + m_iv) == 0) + return true; + #else diff --git a/databases/xtrabackup84/files/patch-sql_stream__cipher.h b/databases/xtrabackup84/files/patch-sql_stream__cipher.h new file mode 100644 index 000000000000..02b6baa6a178 --- /dev/null +++ b/databases/xtrabackup84/files/patch-sql_stream__cipher.h @@ -0,0 +1,19 @@ +--- sql/stream_cipher.h.orig 2024-08-08 10:30:27 UTC ++++ sql/stream_cipher.h +@@ -27,6 +27,7 @@ + #include + #include + #include ++#include + + /** + @file stream_cipher.h +@@ -35,7 +36,7 @@ + binary log files. + */ + +-typedef std::basic_string Key_string; ++typedef std::vector Key_string; + + /** + @class Stream_cipher diff --git a/databases/xtrabackup84/files/patch-storage_innobase_xtrabackup_src_keyring__plugins.cc b/databases/xtrabackup84/files/patch-storage_innobase_xtrabackup_src_keyring__plugins.cc new file mode 100644 index 000000000000..53acbc1a18d1 --- /dev/null +++ b/databases/xtrabackup84/files/patch-storage_innobase_xtrabackup_src_keyring__plugins.cc @@ -0,0 +1,11 @@ +--- storage/innobase/xtrabackup/src/keyring_plugins.cc.orig 2024-11-11 11:46:47 UTC ++++ storage/innobase/xtrabackup/src/keyring_plugins.cc +@@ -863,7 +863,7 @@ bool xb_binlog_password_reencrypt(const char *binlog_f + return (false); + } + +- Key_string file_password(key, Encryption::KEY_LEN); ++ Key_string file_password(key, key + Encryption::KEY_LEN); + header->encrypt_file_password(file_password); + + IO_CACHE_ostream ostream; diff --git a/databases/xtrabackup84/files/patch-storage_innobase_xtrabackup_src_utils.cc b/databases/xtrabackup84/files/patch-storage_innobase_xtrabackup_src_utils.cc index dbc84f05a7e1..4203a118de83 100644 --- a/databases/xtrabackup84/files/patch-storage_innobase_xtrabackup_src_utils.cc +++ b/databases/xtrabackup84/files/patch-storage_innobase_xtrabackup_src_utils.cc @@ -1,59 +1,59 @@ ---- storage/innobase/xtrabackup/src/utils.cc.orig 2023-10-19 12:05:28 UTC +--- storage/innobase/xtrabackup/src/utils.cc.orig 2024-08-08 10:30:27 UTC +++ storage/innobase/xtrabackup/src/utils.cc @@ -21,6 +21,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Bos #ifdef __APPLE__ #include +#endif +#if defined(__APPLE__) || defined(__FreeBSD__) #include #else #ifdef HAVE_PROCPS_V3 -@@ -113,12 +115,14 @@ unsigned long get_version_number(std::string version_s - return major * 10000 + minor * 100 + version; +@@ -131,12 +133,14 @@ bool get_major_minor_version(const std::string &versio + return true; } -#ifdef __APPLE__ +#if defined(__APPLE__) || defined(__FreeBSD__) unsigned long host_total_memory() { unsigned long total_mem = sysconf(_SC_PHYS_PAGES) * sysconf(_SC_PAGESIZE); return total_mem; } +#endif +#ifdef __APPLE__ unsigned long host_free_memory() { unsigned long total_mem = host_total_memory(); int64_t used_mem; -@@ -139,6 +143,31 @@ unsigned long host_free_memory() { +@@ -157,6 +161,31 @@ unsigned long host_free_memory() { return total_mem - (unsigned long)used_mem; } return 0; +} +#elif defined(__FreeBSD__) +unsigned long host_free_memory() { + static int mib_free[2] = { -1, 0 }; + static int mib_inactive[2] = { -1, 0 }; + size_t miblen = sizeof(mib_free) / sizeof(mib_free[0]); + uint32_t free_pages, inactive_pages; + size_t sz = sizeof(free_pages); + + free_pages = inactive_pages = 0; + + if (mib_free[0] < 0 && + sysctlnametomib("vm.stats.vm.v_free_count", mib_free, &miblen) < 0) + mib_free[0] = 0; + if (mib_inactive[0] < 0 && + sysctlnametomib("vm.stats.vm.v_inactive_count", mib_inactive, &miblen) < 0) + mib_inactive[0] = 0; + + if (mib_free[0] && + sysctl(mib_free, 2, &free_pages, &sz, NULL, 0) < 0) + free_pages = 0; /* should not happen */ + if (mib_inactive[0] && sysctl(mib_inactive, 2, &inactive_pages, &sz, NULL, 0) < 0) + inactive_pages = 0; /* should not happen, too */ + + return (free_pages + inactive_pages) * sysconf(_SC_PAGESIZE); } #else unsigned long host_total_memory() { diff --git a/databases/xtrabackup84/files/patch-unittest_gunit_binlogevents_transaction__compression-t.cc b/databases/xtrabackup84/files/patch-unittest_gunit_binlogevents_transaction__compression-t.cc new file mode 100644 index 000000000000..d77f946e2276 --- /dev/null +++ b/databases/xtrabackup84/files/patch-unittest_gunit_binlogevents_transaction__compression-t.cc @@ -0,0 +1,11 @@ +--- unittest/gunit/binlogevents/transaction_compression-t.cc.orig 2024-07-12 19:20:22 UTC ++++ unittest/gunit/binlogevents/transaction_compression-t.cc +@@ -49,7 +49,7 @@ class TransactionPayloadCompressionTest : public ::tes + using Managed_buffer_t = Decompressor_t::Managed_buffer_t; + using Size_t = Decompressor_t::Size_t; + using Char_t = Decompressor_t::Char_t; +- using String_t = std::basic_string; ++ using String_t = std::vector; + using Decompress_status_t = + mysql::binlog::event::compression::Decompress_status; + using Compress_status_t = mysql::binlog::event::compression::Compress_status; diff --git a/databases/xtrabackup84/files/patch-unittest_gunit_stream__cipher-t.cc b/databases/xtrabackup84/files/patch-unittest_gunit_stream__cipher-t.cc new file mode 100644 index 000000000000..cf39ae68faf3 --- /dev/null +++ b/databases/xtrabackup84/files/patch-unittest_gunit_stream__cipher-t.cc @@ -0,0 +1,15 @@ +--- unittest/gunit/stream_cipher-t.cc.orig 2024-08-08 10:30:27 UTC ++++ unittest/gunit/stream_cipher-t.cc +@@ -251,10 +251,10 @@ void SetKeyStr(Key_string &key_str, const unsigned cha + template + void SetKeyStr(Key_string &key_str, const unsigned char *key) { + if (key) { +- key_str.assign(key, T::PASSWORD_LENGTH); ++ key_str.assign(key, key + T::PASSWORD_LENGTH); + } else { + const unsigned char new_key[T::PASSWORD_LENGTH]{0}; +- key_str.assign(new_key, T::PASSWORD_LENGTH); ++ key_str.assign(new_key, new_key + T::PASSWORD_LENGTH); + } + } +