As noted in the libc++ 19 release notes [1], std::char_traits<> is now
only provided for char, char8_t, char16_t, char32_t and wchar_t, and any
instantiation for other types will fail.
This causes databases/mysql80-client to fail to compile with clang 19
and libc++ 19, resulting in errors similar to:
/usr/include/c++/v1/string:820:42: error: implicit instantiation of
undefined template 'std::char_traits<unsigned char>'
820 | static_assert(is_same<_CharT, typename
traits_type::char_type>::value,
| ^
/wrkdirs/usr/ports/databases/mysql80-client/work/mysql-8.0.39/sql/rpl_log_encryption.h:821:14:
note: in instantiation of template class 'std::basic_string<unsigned
char>' requested here
821 | Key_string m_encrypted_password;
| ^
/usr/include/c++/v1/__fwd/string.h:23:29: note: template is declared
here
23 | struct _LIBCPP_TEMPLATE_VIS char_traits;
| ^
`Key_string` is defined as `std::basic_string<unsigned char>`, which is
no longer possible. So redefine it as a `std::vector<unsigned char>`
instead.
This requires only a few small adjustments in other places: replacing
the `length()` method with the equivalent `size()` method, and adjusting
the arguments for the `assign()` method, which for `std::vector` takes a
begin and end iterator, instead of a begin iterator and a size.
[1]
https://libcxx.llvm.org/ReleaseNotes/19.html#deprecations-and-removals
PR: 280693
Sponsored by: Netzkommune GmbH
--- storage/innobase/CMakeFiles/innodb_zipdecompress.dir/all ---
/usr/tmp/net/hal/z/SRC/FreeBSD/ports/MBi/main/databases/mysql80-server/work/mysql-8.0.39/storage/innobase/include/detail/ut/aligned_alloc.h:466:39:
error: no member named 'meta_1' in
'ut::detail::Aligned_alloc_metadata<unsigned int, unsigned int>'
466 | auto offset = allocator_metadata::meta_1(data);
| ~~~~~~~~~~~~~~~~~~~~^
/usr/tmp/net/hal/z/SRC/FreeBSD/ports/MBi/main/databases/mysql80-server/work/mysql-8.0.39/storage/innobase/include/detail/ut/aligned_alloc.h:593:25:
error: no member named 'meta_1' in
'ut::detail::Aligned_alloc_metadata<unsigned int, unsigned int>'
593 | allocator_metadata::meta_1(ret.first, ret.second);
| ~~~~~~~~~~~~~~~~~~~~^
/usr/tmp/net/hal/z/SRC/FreeBSD/ports/MBi/main/databases/mysql80-server/work/mysql-8.0.39/storage/innobase/include/detail/ut/aligned_alloc.h:594:25:
error: no member named 'meta_2' in
'ut::detail::Aligned_alloc_metadata<unsigned int, unsigned int>'
594 | allocator_metadata::meta_2(ret.first, size);
| ~~~~~~~~~~~~~~~~~~~~^
/usr/tmp/net/hal/z/SRC/FreeBSD/ports/MBi/main/databases/mysql80-server/work/mysql-8.0.39/storage/innobase/include/detail/ut/aligned_alloc.h:655:32:
error: no member named 'meta_2' in
'ut::detail::Aligned_alloc_metadata<unsigned int, unsigned int>'
655 | return
allocator_metadata::meta_2(pfs_metadata::deduce_pfs_meta(data));
| ~~~~~~~~~~~~~~~~~~~~^
/usr/tmp/net/hal/z/SRC/FreeBSD/ports/MBi/main/databases/mysql80-server/work/mysql-8.0.39/storage/innobase/include/detail/ut/aligned_alloc.h:668:39:
error: no member named 'meta_1' in
'ut::detail::Aligned_alloc_metadata<unsigned int, unsigned int>'
668 | auto offset = allocator_metadata::meta_1(pfs_meta);
| ~~~~~~~~~~~~~~~~~~~~^
PR: 280541
Sponsored by: Netzkommune GmbH
When building against libc++ 18, several iostream classes now get
inlined into C++ binaries for efficiency. But because the mysql ports
use -malign-double on non-powerpc architectures, this causes an ABI
problem with libc++.so, which has not been built with that flag, at
least on i386. This can cause segfaults during the build of the port.
If it is not the architecture default, as it is on amd64, -malign-double
should not be used without recompiling basically the entire userspace
runtime. Quoting the gcc docs:
> Warning: if you use the -malign-double switch, structures containing
> the above types are aligned differently than the published application
> binary interface specifications for the x86-32 and are not binary
> compatible with structures in code compiled without that switch.
Hence, remove -malign-double from CXXFLAGS for these ports.
PR: 277896
Approved by: maintainer timeout (2 weeks)
MFH: 2024Q1
Similar to bug 272295, building databases/mysql80-server with clang 16
or higher can result in an error:
/wrkdirs/usr/ports/databases/mysql80-server/work/mysql-8.0.35/boost/boost_1_77_0/boost/mpl/aux_/integral_wrapper.hpp:73:31: error: integer value -1 is outside the valid range of values [0, 3] for the enumeration type 'udt_builtin_mixture_enum' [-Wenum-constexpr-conversion]
73 | typedef AUX_WRAPPER_INST( BOOST_MPL_AUX_STATIC_CAST(AUX_WRAPPER_VALUE_TYPE, (value - 1)) ) prior;
| ^
/wrkdirs/usr/ports/databases/mysql80-server/work/mysql-8.0.35/boost/boost_1_77_0/boost/mpl/aux_/static_cast.hpp:24:47: note: expanded from macro 'BOOST_MPL_AUX_STATIC_CAST'
24 | # define BOOST_MPL_AUX_STATIC_CAST(T, expr) static_cast<T>(expr)
| ^
This is because the vendored copy of boost in mysql80-server is using
undefined behavior in a possibly constexpr context.
Fix this by unconditionally enabling the "boost workaround" for aux
wrapper value types in integral_wrapper.hpp.
PR: 276749
Approved by: joneum (maintainer)
MFH: 2024Q1
This is to fix the patch phase of databases/mysql80-client on i386,
where the extra-patch file could not be located because the relative
path was hardcoded in databases/mysql80-server.
===> Patching for mysql80-client-8.0.35
===> Applying extra patch files/extra-patch-boost-boost_1_77_0-boost-move-detail-type_traits.hpp
cat: files/extra-patch-boost-boost_1_77_0-boost-move-detail-type_traits.hpp: No such file or directory
===> FAILED Applying extra patch files/extra-patch-boost-boost_1_77_0-boost-move-detail-type_traits.hpp
*** Error code 1
Approved by: portmgr (blanket)
Upstream commit d737d2a [1] introduced three code paths for OpenSSL
<1.1, >=3.0 and between, none of which currently works with LibreSSL.
3.x APIs are not yet supported, and the code path for <1.1 directly
accesses struct members that were made opaque in LibreSSL as well.
Finally, the code path for >=1.1 uses DH_new_by_nid() which is missing
from LibreSSL.
Therefore add a patch introducing a fourth code path, doing essentially
the same as the version for OpenSSL <1.1, but using the accessor methods
instead of directly accessing struct members.
Also remove patches for viossl[factories].cc, which aren't needed any
more for current LibreSSL.
[1] d737d2a3ef
Approved by: joneum (maintainer, via private mail)
Differential Revision: https://reviews.freebsd.org/D42922
Building databases/mysql80-server with clang and libc++ 17 results in
the following errors:
In file included from /wrkdirs/usr/ports/databases/mysql80-server/work/mysql-8.0.33/sql/auth/sql_authorization.cc:23:
In file included from /wrkdirs/usr/ports/databases/mysql80-server/work/mysql-8.0.33/sql/auth/sql_authorization.h:26:
In file included from /usr/include/c++/v1/functional:515:
In file included from /usr/include/c++/v1/__algorithm/search.h:23:
/usr/include/c++/v1/__utility/pair.h:613:22: error: invalid operands to binary expression ('const Auth_id' and 'const MYSQL_LEX_CSTRING')
613 | return __x.first == __y.first && __x.second == __y.second;
| ~~~~~~~~~ ^ ~~~~~~~~~
/usr/include/c++/v1/__algorithm/find.h:34:41: note: in instantiation of function template specialization 'std::__1::operator==<const Auth_id, Auth_id, MYSQL_LEX_CSTRING, MYSQL_LEX_CSTRING>' requested here
34 | if (std::__invoke(__proj, *__first) == __value)
| ^
/usr/include/c++/v1/__algorithm/find.h:72:21: note: in instantiation of function template specialization 'std::__find_impl<std::__hash_map_iterator<std::__hash_iterator<std::__hash_node<std::__hash_value_type<Auth_id, Auth_id>, void *> *>>, std::__hash_map_iterator<std::__hash_iterator<std::__hash_node<std::__hash_value_type<Auth_id, Auth_id>, void *> *>>, std::pair<MYSQL_LEX_CSTRING, MYSQL_LEX_CSTRING>, std::__identity>' requested here
72 | __first, std::__find_impl(std::__unwrap_iter(__first), std::__unwrap_iter(__last), __value, __proj));
| ^
/wrkdirs/usr/ports/databases/mysql80-server/work/mysql-8.0.33/sql/auth/sql_authorization.cc:6591:11: note: in instantiation of function template specialization 'std::find<std::__hash_map_iterator<std::__hash_iterator<std::__hash_node<std::__hash_value_type<Auth_id, Auth_id>, void *> *>>, std::pair<MYSQL_LEX_CSTRING, MYSQL_LEX_CSTRING>>' requested here
6591 | if (find(role_it, role_end, *it) == role_end) {
| ^
[... long list of candidates elided ...]
This is because an equality operator for Role_id and LEX_CSTRING is
missing. Add such an operator to work around the problem.
PR: 274464
Approved by: joneum (maintainer)
MFH: 2023Q4
Bugs Fixed
NDB Cluster: Occasional temporary errors which could occur when
opening a table from the NDB dictionary while repeatedly performing
concurrent schema operations were not retried. (Bug #34843889)
NDB Cluster: During iteration, ordered index scans retain a cursor
position within each concurrently scanned ordered index fragment.
Ordered index fragments are modified and balanced as a result of
committing DML transactions, which can require scan cursors to be moved
within the tree. When running with query threads configured
(AutomaticThreadConfig set to 1), multiple threads can access the same
index fragment tree structure, and the scans of multiple threads can
have their cursors present in the same structure.
The current issue arose due to an assumption in the logic for moving
scan cursors when committing DML operations that all scan cursors
belonged to the LDM thread owning the index fragment, which did not
allow for the possibility that such fragments might belong to query
threads. (Bug #33379702)
References: See also: Bug #32257063.
InnoDB: Dead code removal. (Bug #35036850, Bug #109873)
InnoDB: Error messages related to innodb_doublewrite moved to the
error log. (Bug #34883045, Bug #109330)
InnoDB: Prevent online DDL operations from accessing out-of-bounds
memory. (Bug #34750489, Bug #108925)
InnoDB: ALTER TABLE ... AUTO_INCREMENT could be set to less than MAX
+ 1 and not forced to MAX + 1. (Bug #33419246, Bug #105092)
InnoDB: Innodb_data_pending_fsyncs could show extremely high
inaccurate values because of a variable overflow. (Bug #30133150)
Partitioning: Some IN() queries on partitioned tables were not
always handled correctly. (Bug #34801284)
References: This issue is a regression of: Bug #32311183.
Partitioning: Queries using the INDEX_MERGE optimizer hint was not
handled correctly in all cases. (Bug #34797257)
Replication: XA transactions whose XIDs contained null bytes could
not be recovered. (Bug #34918985)
Replication: When binlog_order_commits was set equal to 1, for any
two transactions and for any sub-step of the commit phase, the
transaction that was written to the binary log first did not always
execute the sub-step first, as expected. (Bug #34703698)
Replication: Some binary log events were not always handled
correctly. (Bug #34617506)
Replication: The binary log recovery process did not report all
possible error states. (Bug #33658850)
Replication: Following CHANGE REPLICATION SOURCE TO
SOURCE_CONNECTION_AUTO_FAILOVER=1, failover generated a number of
misleading warnings in the log that implied there were problems when in
fact conditions were those expected for such a failover. These log
messages have been updated accordingly. (Bug #32135376)
Replication: When a transaction failed, as a side effect, extraneous
error messages relating the replication data repositories were written
to the log. Now in such cases, we suppress such error messages, which
are not directly related to the issue of the failed transaction or its
cause. (Bug #19820134)
Replication: Setting binlog_order_commits to OFF could lead to a
missed GTID in the next binary log file's Previous_gtids event.
Our thanks to Yewei Xu and the Tencent team for the contribution.
(Bug #109485, Bug #34930969)
Replication: Corrected the SQL statements suggested in the error
message text for ER_RPL_REPLICA_ERROR_RUNNING_QUERY.
Our thanks to Dan McCombs for the contribution. (Bug #109154, Bug
Replication: A hash scan builds a hash of changes, scans the target
table or index, and applies any matching change for the current entry.
In the build phase, it uses only the before image, and skips any after
image. Problems arose in some cases because generated columns were
computed for the (skipped) after image, leading to replication errors.
This is fixed by not computing generated columns any longer for
seek-only calls such as hash scans.
Our thanks to dc huang for the contribution. (Bug #107366, Bug
Replication: In certain rare cases, it was possible to set
gtid_mode=OFF for one session while another session, after
WAIT_FOR_EXECUTED_GTID_SET() was issued by a user in this second
session, was still waiting for the next GTID set from the first session.
This could result in the second session waiting indefinitely for the
function to return. (Bug #99921, Bug #31505993)
Group Replication: Accessing the Performance Schema
replication_group_communication_information and
replication_group_member_stats tables in parallel sometimes caused
subsequent group replication operations to hang. (Bug #34870181)
Group Replication: In certain cases, the group replication secondary
node unexpectedly shut down while purging the relay log. (Bug #34397106)
Group Replication: When shutting down the Group Replication plugin,
the order in which the associated events were reported the error log
sometimes led to confusion. To remove any doubts, we now make sure that
Plugin group_replication reported: 'Plugin 'group_replication' has been
stopped. is in fact the last log message relating to the shutdown,
written only when all other events associated with shutting down the
plugin have been logged. (Bug #109345, Bug #34887491)
Microsoft Windows: The authentication_fido_client plugin stopped
responding during the authentication process if it was unable to find a
FIDO device on the Windows client host. (Bug #34918044)
In certain cases, CONVERT(utf8mb3_column USING UTF16) was rejected
with the error Cannot convert string '\x--...' from binary to utf16.
(Bug #35129361)
When joining two tables on a string column, and the column from one
of the tables has an additional predicate comparing it with a temporal
literal, constant propagation in some cases incorrectly caused the join
condition to be modified such that it used temporal rather than string
semantics when comparing the strings. This caused incorrect results to
be returned from the join. (Bug #35115909)
Error messages returned after calling the mysql_reset_connection() C
API function in a prepared statement did not identify the function name
properly. (Bug #35107280)
Fixed a regression in a previous fix for an issue with windowing
functions.
Our thanks to Dmitry Lenev for the contribution. (Bug #35061924)
References: This issue is a regression of: Bug #34572136.
When replacing subqueries in transforms, the internal flag showing
whether a given query block contains any subqueries (PROP_SUBQUERY) was
not updated afterwards. (Bug #35060385)
A client setting the character set to an impermissible client
character set (ucs2, utf16, utf16le, or utf32) could cause unexpected
behavior when the client used an authentication plugin. (Bug #35054579)
Changelog:
https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-33.html
Sponsored by: Netzkommune GmbH
- Bump PORTREVISION for package change
Not all supported FreeBSD releases has openssl.pc in base system. This patch
adds a check for openssl.pc. It helps to build databases/py-mysqlclient.
If you do not have openssl.pc from your SSL provider.
Before the fix:
% grep Requires.private: /usr/local/libdata/pkgconfig/mysqlclient.pc
Requires.private: openssl
After the fix:
% grep Requires.private: /usr/local/libdata/pkgconfig/mysqlclient.pc
Requires.private:
The build log [1] of databases/py-mysqlclient without the fix:
===> Building for py39-mysqlclient-2.2.0
* Getting build dependencies for wheel...
Package openssl was not found in the pkg-config search path.
Perhaps you should add the directory containing `openssl.pc'
to the PKG_CONFIG_PATH environment variable
Package 'openssl', required by 'mysqlclient', not found
Trying pkg-config --exists mysqlclient
Traceback (most recent call last):
File "/usr/local/lib/python3.9/site-packages/pyproject_hooks/_in_process/_in_process.py", line 353, in <module>
main()
File "/usr/local/lib/python3.9/site-packages/pyproject_hooks/_in_process/_in_process.py", line 335, in main
json_out['return_val'] = hook(**hook_input['kwargs'])
File "/usr/local/lib/python3.9/site-packages/pyproject_hooks/_in_process/_in_process.py", line 118, in get_requires_for_build_wheel
return hook(config_settings)
File "/usr/local/lib/python3.9/site-packages/setuptools/build_meta.py", line 177, in get_requires_for_build_wheel
return self._get_build_requires(
File "/usr/local/lib/python3.9/site-packages/setuptools/build_meta.py", line 159, in _get_build_requires
self.run_setup()
File "/usr/local/lib/python3.9/site-packages/setuptools/build_meta.py", line 174, in run_setup
exec(compile(code, __file__, 'exec'), locals())
File "setup.py", line 154, in <module>
ext_options = get_config_posix(get_options())
File "setup.py", line 50, in get_config_posix
cflags = subprocess.check_output(
File "/usr/local/lib/python3.9/subprocess.py", line 424, in check_output
return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
File "/usr/local/lib/python3.9/subprocess.py", line 528, in run
raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command 'pkg-config --cflags mysqlclient' returned non-zero exit status 1.
ERROR Backend subprocess exited when trying to invoke get_requires_for_build_wheel
*** Error code 1
Stop.
make: stopped in /usr/ports/databases/py-mysqlclient
Approved by: portmgr (blanket)
Reference: https://pkg-status.freebsd.org/beefy16/data/131amd64-default/0f3f003a3111/logs/py39-mysqlclient-2.2.0.log [1]
On powerpc, clang miscompiles comp_err, which later fails at runtime with:
-> 0x102ff48c <+16>: .long 0x0006ee74 ; unknown opcode
The problem happens because of line:
frame #0: 0x10323eb4 comp_err`set_my_errno(my_errno=-10608) at my_thr_init.cc:344:47
GCC can compile client, but without -malign-double. It also needs to link to
libatomic (so building without GCC installed wouldn't work anyway).
This only fixes client. Server still fails to build because of:
/wrkdirs/usr/ports/databases/mysql80-server/work/mysql-8.0.32/storage/innobase/include/log0sys.h:190:60: error: static assertion failed
190 | static_assert(decltype(write_to_file_requests_interval)::is_always_lock_free);
Bugs Fixed
Important Change: The implementation of the max_join_size system variable, although documented as a maximum number of rows or disk seeks, did not check the number of rows or disk seeks directly, but instead treated max_join_size as the maximum estimated cost to permit. While cost and row count are correlated, they are not the same, and this could lead to unexpected results when some large queries were allowed to proceed.
In this release, we change how max_join_size is used, so that it now actually limits the maximum number of row accesses in base tables. If the estimate indicates that a greater number of rows must be read from the base tables, an error is raised. This makes the actual behavior better reflect what is documented. (Bug #83885, Bug #25118903)
InnoDB: Undetectable problems after upgrade from 8.0.28, crash and corruption.
Any new row inserted after upgrade will have all columns added with ALGORITHM=INSTANT materialized and have version=0.
In the new implementation, a column added with ALGORITHM=INSTANT will fail if the maximum possible size of a row exceeds the row size limit. So new rows with materialized ALGORITHM=INSTANT columns will always be within row size limit. (Bug #34558510)
InnoDB: No more garbled UTF characters in SHOW ENGINE INNODB STATUS
Thank you Iiwo Panowicz for reporting this bug. (Bug #34486877, Bug #108111)
InnoDB: After a column added with ALGORITHM=INSTANT, an online rebuild DDL no longer crashes.
Thank you Qingda Hu for reporting this bug. (Bug #33788578, Bug #106279)
InnoDB: Several adaptive hash index (AHI) code optimizations and improvements were implemented, addressing various issues including potential race conditions. (Bug #33601434)
Replication: When SOURCE_HEARTBEAT_PERIOD was set to a very small value (such as 1 microsecond) on the server using CHANGE REPLICATION SOURCE TO, and the mysqlbinlog client program was started with --read-from-remote-server and --stop-never=1, it was possible for the binary log dump thread to send an EOF packet to the client before all events had been sent. (Bug #34860923)
Replication: Removed an assert from sql/rpl_group_replication.cc which triggered a false error in testing. (Bug #34619134)
Replication: After MySQL was started with --server-id=0, trying to change the server ID by using SET PERSIST server_id=N (where N is an integer greater than zero) and restarting the server had the following results:
SELECT @@server_id returned N.
Any replication SQL statement such as START REPLICA was rejected with ER_SLAVE_CONFIGURATION.
To fix this problem, we now ensure that such checks use the value of the server variable rather than the value passed to the startup option. (Bug #34412816)
Replication: When replicating compressed binary log events generated by the NDB binary log injector, relay log positions were not updated in the multithreaded applier, thus causing replication to hang. (Bug #33889030)
References: See also: Bug #33784241.
Replication: Issuing STOP REPLICA SQL_THREAD while the SQL thread was handling a transaction caused replication to stop immediately, instead of waiting 60 seconds for the event group to complete before shutting down the SQL thread as expected.
The root cause of this issue was due to the internal variable storing the last event start time not being reset after the SQL thread was restarted.
We fix this by resetting the variable holding the last event start time whenever the SQL thread is started. (Bug #33646899)
Replication: While their wording might imply otherwise, the log messages Setting super_read_only=ON (ER_GRP_RPL_SUPER_READ_ON) and Setting super_read_only=OFF (ER_GRP_RPL_SUPER_READ_OFF) were written only after the operations were attempted, and not beforehand, or while the operations were ongoing. This sometimes led to confusion when setting the variable was rejected, and this was logged prior to the set attempt itself being logged. To keep this from happening, these messages are now logged just prior to attempting the operation. (Bug #108843, Bug #34728079)
Replication: The relay_log_space_limit system variable is a 64-bit value, but its valid maximum was specified internally as that of a 32-bit value. (Bug #106323, Bug #33799840)
Replication: Eliminated an unnecessary update of the gtid_executed table which was performed when rotating the binary logs. (Bug #106116, Bug #33759477)
Group Replication: The WRITE_CONSENSUS_SINGLE_LEADER_CAPABLE column of the MySQL Performance Schema's replication_group_communication_information table reflects the runtime value of a Paxos Single Leader setup in a group, letting users know what the value of group_replication_paxos_single_leader must be on joining members.
A group that was bootstrapped with single-leader enabled but with its protocol version downgraded to one that did not support it reported WRITE_CONSENSUS_SINGLE_LEADER_CAPABLE equal to 0, as expected, but attempting to join an instance to the group using group_replication_paxos_single_leader = 0 was not possible.
To solve this problem, we change the behaviour and make the value of group_replication_paxos_single_leader consistent with the communication version that the group is running. Since this variable was introduced in MySQL 8.0.27, it is not known or used in any previous version, and so we now enforce the following rules:
When a node tries to join a group that is running MySQL 8.0.26 or earlier and we are version 8.0.27 or later, we reject the attempt with an error stating that group_replication_paxos_single_leader must be OFF before joining the group
When we try to use group_replication_set_communication_protocol() to set a version less than 8.0.27 and we are of version 8.0.27 or later, we reject the function call if group_replication_paxos_single_leader is not OFF.
In addition, we also change the value checked to determine whether changing the group leader is allowed after running group_replication_set_communication_protocol(). Previously, this was the runtime value of group_replication_paxos_single_leader, which takes effect only after a group reboot. Instead, when we run group_replication_set_communication_protocol(), we now use the value shown by the replication_group_communication_information table's WRITE_CONSENSUS_SINGLE_LEADER_CAPABLE column, described previously. (Bug #34555045, Bug #34828311)
Full Changelog: https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-32.html
Sponsored by: Netzkommune GmbH
Update deprecated configs in my.cnf.sample
Some configs in my.cnf.sample are now deprecated. These should be replaced with their replacement, or removed if there is no replacement.
- Replace deprecated slave-load-tmpdir with replica-load-tmpdir
- Remove deprecated master-info-repository (it was set to the default)
- Remove deprecated relay-log-info-repository (it was set to the default)
- Replace deprecated expire_logs_days with binlog_expire_logs_seconds (multiply 30 days by 24 * 60 * 60)
- Replace deprecated innodb_log_file_size with innodb_redo_log_capacity (preserving the same configured capacity, which was set to 256M * 2 log files)
- Remove deprecated skip-symbolic-links (it is the default)
PR: 266511
Sponsored by: Netzkommune GmbH
Bugs Fixed
Incompatible Change: The service pfs_plugin_table, deprecated since MySQL 8.0.14, is removed in this release.
Plugins or components using this service must be updated to use pfs_plugin_table_v1 and pfs_plugin_column_* instead. (Bug #34361827)
Important Change; Replication: Query log events filtered by the default database whenever --replicate-do-db or --replicate-ignore-db was used included XA START, XA END, XA COMMIT, and XA ROLLBACK (but not XA PREPARE or XA COMMIT ONE_PHASE), regardless of the binary log format.
This can lead to one of the issues listed here:
When XA START or XA END was filtered out, the sequence of XA statements within the first part of the transaction were rendered invalid, which made the replica stop with an error.
When XA START and XA END were preserved while XA COMMIT or XA ROLLBACK was filtered out, then a transaction could remain in the prepared state indefinitely on the replica.
To prevent either of these problems from occurring, we no longer filter XA START, XA END, XA COMMIT, or XA ROLLBACK statements by the default database with --replicate-do-db or --replica-ignore-db. (Bug #106201, Bug #33764808)
InnoDB: After upgrading to a release that supports row versions for columns added or dropped using ALGORITHM-INSTANT, a failure occurred during an instant ADD COLUMN operation on a table with a nullable column and an instantly added column. (Bug #34488482)
InnoDB: Adding a virtual column and dropping a column in the same ALTER TABLE statement raised an invalid debug assertion failure. (Bug #34467592)
InnoDB: The physical position of columns were not set correctly after dropping a column and renaming an existing column to the name of the dropped column. (Bug #34463089)
InnoDB: A Valgrind error detected in mtr_t::start() was corrected. (Bug #34327575)
InnoDB: A DDL operation on a corrupted partitioned table raised an assertion failure. (Bug #34293555)
InnoDB: An index block latch order violation during histogram sampling blocked concurrent inserts and could cause a deadlock failure. (Bug #34282448, Bug #34174927, Bug #107299)
InnoDB: An ALTER TABLE operation executed while a data load operation was in progress raised an assertion failure. (Bug #34267618)
InnoDB: InnoDB memory leaks during MySQL server initialization, identified by Address Sanitizer (ASAN) builds, were fixed. (Bug #34156050)
InnoDB: During recovery, a tablespace object associated with encrypted undo tablespace pages that were fetched from disk did not contain the encryption keys required to decrypt the pages, resulting in a failure. (Bug #34148143)
InnoDB: In debug builds, a descending b-tree scan raised a debug assertion failure. (Bug #34144951)
InnoDB: The innodb_redo_log_consumer_advance() function failed to handle an invalid argument. (Bug #34052884)
InnoDB: A column added using ALGORITHM=INSTANT was visible in read views created before the DDL operation that added the column. (Bug #33937504)
InnoDB: A failure occurred while upgrading a MySQL instance with a MySQL 5.6 data directory containing user-created table with a particular table ID. Assignment of that table ID resulted in assignment of conflicting data dictionary table IDs while upgrading from MySQL 5.7 to MySQL 8.0.
Thanks to Rahul Malik for the contribution. (Bug #33919635)
InnoDB: A buffer block containing intrinsic temporary table page was relocated during page traversal, causing an assertion failure. (Bug #33715694)
InnoDB: Dropping a table with a discarded tablespace caused an assertion failure. (Bug #33232978)
InnoDB: Page I/O reads not completed before shutdown reached the flush phase caused an assertion failure in cases where pages had change buffer merges to be completed after the I/O read. (Bug #33192496)
InnoDB: An index latch order violation in dict_table_x_lock_indexes() caused an assertion failure. (Bug #32912868)
InnoDB: A TRUNCATE TABLE operation failed to free an acquired mutex in specific cases. (Bug #107858, Bug #34380370)
InnoDB: In debug builds, importing a tablespace without a .cfg file for table with an instantly added or dropped column raised an assertion failure. (Bug #107517, Bug #34307874)
InnoDB: A potential memory leak in the trx_undo_prev_version_build() function was corrected.
Thanks to Alex Xing for the contribution. (Bug #106952, Bug #34051207)
InnoDB: A debug assertion failure occurred while redoing a space deletion during recovery. (Bug #103482, Bug #32819101)
InnoDB: An InnoDB startup message that specified the number of object pools was removed to avoid confusion with the number of buffer pool instances. (Bug #80248, Bug #22653060)
See full Changelog here: https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-31.html
Sponsored by: Netzkommune GmbH
PR: 265468
Bugs Fixed:
- InnoDB: A TRUNCATE TABLE operation failed to remove data dictionary entries for columns that were dropped using ALGORITHM=INSTANT.
- InnoDB: An incorrect nullable column calculation on tables with instantly added columns caused data to be interpreted incorrectly
- InnoDB: The read_2_bytes() function in the InnoDB sources, which reads bytes from the log buffer, returned a null pointer.
- Replication: The COUNT_TRANSACTIONS_REMOTE_IN_APPLIER_QUEUE column in the Performance Schema table replication_group_member_stats could persistently show transactions related to view change events (View_change_log_event) that had already been applied. These events are queued in the Group Replication applier channel but applied in the Group Replication recovery channel, causing a race condition that could result in the counter decrement being lost. The increment of the count now takes place at a more suitable point, and the counter for COUNT_TRANSACTIONS_REMOTE_IN_APPLIER_QUEUE is also now set to zero when the applier is not busy.
- Debug MySQL binaries can now be built using -0g and -fno-inline.
See full Changelog here: https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-30.html
Sponsored by: Netzkommune GmbH
Commit b7f05445c0 has added WWW entries to port Makefiles based on
WWW: lines in pkg-descr files.
This commit removes the WWW: lines of moved-over URLs from these
pkg-descr files.
Approved by: portmgr (tcberner)
It has been common practice to have one or more URLs at the end of the
ports' pkg-descr files, one per line and prefixed with "WWW:". These
URLs should point at a project website or other relevant resources.
Access to these URLs required processing of the pkg-descr files, and
they have often become stale over time. If more than one such URL was
present in a pkg-descr file, only the first one was tarnsfered into
the port INDEX, but for many ports only the last line did contain the
port specific URL to further information.
There have been several proposals to make a project URL available as
a macro in the ports' Makefiles, over time.
This commit implements such a proposal and moves one of the WWW: entries
of each pkg-descr file into the respective port's Makefile. A heuristic
attempts to identify the most relevant URL in case there is more than
one WWW: entry in some pkg-descr file. URLs that are not moved into the
Makefile are prefixed with "See also:" instead of "WWW:" in the pkg-descr
files in order to preserve them.
There are 1256 ports that had no WWW: entries in pkg-descr files. These
ports will not be touched in this commit.
The portlint port has been adjusted to expect a WWW entry in each port
Makefile, and to flag any remaining "WWW:" lines in pkg-descr files as
deprecated.
Approved by: portmgr (tcberner)
Bugs Fixed
InnoDB: A failure occurred when attempting to purge undo records for a table with an instantly added column. (Bug #33924532)
InnoDB: High-priority transactions were not permitted to stop waiting when interrupted or to timeout while waiting for a lock, preventing deadlocks from being resolved. In cases where the blocking transaction is also high-priority, high-priority transactions are now permitted to stop waiting when interrupted or timeout when exceeding the lock wait timeout period. If a blocking transaction is not high-priority, high-priority transactions wait for the blocking transaction to release its locks. (Bug #33856332)
InnoDB: The AIO synchronization queue used on Windows was removed. The synchronous file I/O read-write function (SyncFileIO::execute) was revised to handle files opened for both normal and overlapped I/O, as it does on Linux. (Bug #33840645)
InnoDB: Table version metadata was not reset after truncating all partitions of a table with an instantly added column. (Bug #33822729)
InnoDB: The srv_error_monitor_thread() function, which prints warnings about semaphore waits, failed to handle a long semaphore wait as expected. To address this issue, a blocking call was moved to a more appropriate location. Related monitor thread code was simplified and improved, and missing shutdown signals were added for several server threads.
Enabling and disabling of the standard monitor by InnoDB is now performed independently of the user-settable innodb_status_output variable. This change addresses an issue in which the monitor was enabled by InnoDB in a particular scenario but not set back to its previous value. Thanks to Yuhui Wang for the contribution. (Bug #33789526, Bug #93878)
InnoDB: Valgrind testing identified an off-by-one error in rec_convert_dtuple_to_rec_old() in the InnoDB sources. (Bug #33784672)
InnoDB: The UNIV_DEBUG variant of the mem_heap_alloc() function in the InnoDB sources was modified to improve Valgrind error detection. (Bug #33783709)
InnoDB: A fast shutdown did not wait for all active I/O operations to finish before closing all files. (Bug #33768584)
InnoDB: A Clang warning reported an incorrectly placed @return command. (Bug #33734011)
InnoDB: Values of the new record locks array (m_prebuilt->new_rec_locks[]) were not properly synchronized when switching between partitions, causing an assertion failure due to locks being freed or not freed as expected. (Bug #33724166)
InnoDB: A race condition in the function that updates the double write buffer when a write request is completed caused a long semaphore wait error. (Bug #33712370)
InnoDB: A function wrongly assumed that changing a record in an indexed column always requires creating a new record in the secondary index, resulting in an lock-related assertion failure. To address this and other similar cases, the lock_rec_convert_impl_to_expl() function that converts an implicit record lock to an explicit record lock is now used only when an implicit record lock is actually held. (Bug #33657235)
InnoDB: A number of Doxygen issues in the InnoDB sources were addressed. (Bug #33603036)
InnoDB: A missing null pointer check for an index instance caused a failure. (Bug #33600109)
Full (and long) relnotes: https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-29.html
Sponsored by: Netzkommune GmbH
- Replace getauxval with the FreeBSD variant (elf_aux_info)
- ifdef some gcc'ism and pass the correct cflags for clang
Approved by: portmgr (build fix blanket)
PR: 261660
There have been lots of missing CONFLICTS_INSTALL entries, either
because conflicting ports were added without updating existing ports,
due to name changes of generated packages, due to mis-understanding
the format and semantics of the conflicts entries, or just due to
typoes in package names.
This patch is the result of a comparison of all files contained in
the official packages with each other. This comparison was based on
packages built with default options and may therefore have missed
further conflicts with optionally installed files.
Where possible, version numbers in conflicts entries have been
generalized, some times taking advantage of the fact that a port
cannot conflict with itself (due to logic in bsd.port.mk that
supresses the pattern match result in that case).
A few ports that set the conflicts variables depending on complex
conditions (e.g. port options), have been left unmodified, despite
probably containing outdated package names.
These changes should only affect the installation of locally built
ports, not the package building with poudriere. They should give an
early indication of the install conflict in cases where currently
the pkg command aborts an installation when it detects that an
existing file would be overwritten,
Approved by: portmgr (implicit)
The conflict checks compare the patterns first against the package
names without version (as reported by "pkg query "%n"), then - if
there was no match - agsinst the full package names including the
version (as reported by "pkg query "%n-%v").
Approved by: portmgr (blanket)