Index: head/databases/galera/Makefile =================================================================== --- head/databases/galera/Makefile (revision 444982) +++ head/databases/galera/Makefile (revision 444983) @@ -1,84 +1,86 @@ # Created by: Horia Racoviceanu # $FreeBSD$ PORTNAME= galera -PORTVERSION?= 25.3.20 -PORTREVISION?= 2 +PORTVERSION?= 25.3.21 CATEGORIES= databases MAINTAINER= devel@galeracluster.com COMMENT= Synchronous multi-master replication engine LICENSE= GPLv2 BUILD_DEPENDS= checkmk:devel/check \ ${LOCALBASE}/include/boost/shared_ptr.hpp:devel/boost-libs LIB_DEPENDS= libboost_date_time.so:devel/boost-libs BROKEN_aarch64= fails to compile: gu_int128.h: use of undeclared identifier '__bswap64_var' BROKEN_armv6= fails to compile: gu_int128.h: use of undeclared identifier '__bswap64_var' NOT_FOR_ARCHS= i386 # On i386 older versions of clang produce: # cannot compile this atomic library call yet ... __atomic_add_fetch # whereas newer ones generate a call to __atomic_add_fetch which ends up with # undefined reference at link time: # undefined reference to `__atomic_fetch_add_8' # https://bugs.llvm.org//show_bug.cgi?id=23262 # https://bugs.llvm.org//show_bug.cgi?id=24908 # https://tracker.crystax.net/issues/1263 NOT_FOR_ARCHS_REASON_i386=Uses 64 bit atomics that clang cannot generate on i386 USES= execinfo python:build scons ssl USE_LDCONFIG= yes USE_GITHUB= yes GH_ACCOUNT= codership GH_TAGNAME?= release_${DISTVERSION} LDFLAGS+= -lboost_program_options -lboost_system MAKE_ARGS+= revno=${GH_TAGNAME} system_asio=0 tests=0 USE_RC_SUBR= garb.sh # Abuse TEST_TARGET to append tests=1 (which is not a target, strictly # speaking) at the end of the "scons ..." command so that it overrides # tests=0 from ${MAKE_ARGS}. To rerun the tests a second time, remove # all *.passed files: find ./work -name *.passed -print -delete TEST_TARGET= deterministic_tests=1 tests=1 PLIST_FILES= bin/garbd \ lib/libgalera.so \ lib/libgalera_smm.so OPTIONS_DEFINE= BOOSTPOOL BPOSTATIC DEBUG BOOSTPOOL_DESC= Use boost pool allocator BPOSTATIC_DESC= Use static boost_program_options .include -# COMPILER_TYPE could be empty on older FreeBSD versions. -.if "${COMPILER_TYPE}" == gcc || ${OSVERSION} < 1000000 -USE_GCC= 4.8+ +# Clang is available on FreeBSD 9.x but the default +# compiler (e.g. /usr/bin/cc) is GCC. Force the usage of Clang. +.if ${OSVERSION} < 1000024 +CC= clang +CXX= clang++ +CPP= clang-cpp .endif .if ${PORT_OPTIONS:MBOOSTPOOL} MAKE_ARGS+= boost_pool=1 .endif .if ${PORT_OPTIONS:MBPOSTATIC} MAKE_ARGS+= bpostatic=${LOCALBASE}/lib/libboost_program_options.a .endif .if ${PORT_OPTIONS:MDEBUG} -MAKE_ARGS+= debug=3 +MAKE_ARGS+= debug=0 .endif do-install: ${INSTALL_PROGRAM} ${WRKSRC}/garb/garbd ${STAGEDIR}${PREFIX}/bin/ ${INSTALL_LIB} ${WRKSRC}/libgalera_smm.so ${STAGEDIR}${PREFIX}/lib/ @(cd ${STAGEDIR}${PREFIX}/lib && ${LN} -sf libgalera_smm.so \ libgalera.so) .include Index: head/databases/galera/distinfo =================================================================== --- head/databases/galera/distinfo (revision 444982) +++ head/databases/galera/distinfo (revision 444983) @@ -1,3 +1,3 @@ -TIMESTAMP = 1495385457 -SHA256 (codership-galera-25.3.20-release_25.3.20_GH0.tar.gz) = bcfe8cc188b19a9dec2c4c07d09c53ea8b2d4dd0479d412d82528583f6c91310 -SIZE (codership-galera-25.3.20-release_25.3.20_GH0.tar.gz) = 3271813 +TIMESTAMP = 1499109333 +SHA256 (codership-galera-25.3.21-release_25.3.21_GH0.tar.gz) = dc0d8e9bcbd16de98c3ee558f7e7e2cf4596670a2e2e38a03d3e45bf5c9ebd5e +SIZE (codership-galera-25.3.21-release_25.3.21_GH0.tar.gz) = 3276033 Index: head/databases/galera/files/patch-SConstruct =================================================================== --- head/databases/galera/files/patch-SConstruct (revision 444982) +++ head/databases/galera/files/patch-SConstruct (nonexistent) @@ -1,68 +0,0 @@ ---- SConstruct.orig 2017-01-25 07:55:06 UTC -+++ SConstruct -@@ -28,6 +28,7 @@ - import os - import platform - import string -+import subprocess - - sysname = os.uname()[0].lower() - machine = platform.machine() -@@ -182,10 +183,10 @@ env.Replace(RPATH = [os.getenv('RPAT - # enabled on all platforms. - env.Append(CCFLAGS = ' -pthread') - --# Freebsd ports are installed under /usr/local -+# FreeBSD ports are usually installed under /usr/local - if sysname == 'freebsd' or sysname == 'sunos': -- env.Append(LIBPATH = ['/usr/local/lib']) -- env.Append(CPPFLAGS = ' -I/usr/local/include ') -+ env.Append(LIBPATH = ['/usr/local/lib']) -+ env.Append(CPPPATH = ['/usr/local/include']) - if sysname == 'sunos': - env.Replace(SHLINKFLAGS = '-shared ') - -@@ -418,8 +419,10 @@ else: - print "Falling back to bundled asio" - - if not system_asio: -- # Fall back to embedded asio -- conf.env.Append(CPPPATH = [ '#/asio' ]) -+ # Make sure that -Iasio goes before other paths (e.g. -I/usr/local/include) -+ # that may contain a system wide installed asio. We should use the bundled -+ # asio if "scons system_asio=0" is specified. Thus use Prepend(). -+ conf.env.Prepend(CPPPATH = [ '#/asio' ]) - if conf.CheckCXXHeader('asio.hpp'): - conf.env.Append(CPPFLAGS = ' -DHAVE_ASIO_HPP') - else: -@@ -442,17 +445,26 @@ if ssl == 1: - Exit(1) - - --# these will be used only with our softaware -+# get compiler name/version, CXX may be set to "c++" which may be clang or gcc -+try: -+ compiler_version = subprocess.check_output([conf.env['CXX'], '--version'], -+ stderr=subprocess.STDOUT) -+except: -+ # in case "$CXX --version" returns an error, e.g. "unknown option" -+ compiler_version = 'unknown' -+ -+# these will be used only with our software - if strict_build_flags == 1: - conf.env.Append(CCFLAGS = ' -Werror -pedantic') -- if 'clang' not in conf.env['CXX']: -- conf.env.Prepend(CXXFLAGS = '-Weffc++ -Wold-style-cast ') -- else: -+ if 'clang' in compiler_version: - conf.env.Append(CCFLAGS = ' -Wno-self-assign') - conf.env.Append(CCFLAGS = ' -Wno-gnu-zero-variadic-macro-arguments') - conf.env.Append(CXXFLAGS = ' -Wno-variadic-macros') -+ # CXX may be something like "ccache clang++" - if 'ccache' in conf.env['CXX']: - conf.env.Append(CCFLAGS = ' -Qunused-arguments') -+ else: -+ conf.env.Prepend(CXXFLAGS = '-Weffc++ -Wold-style-cast ') - - env = conf.Finish() - Property changes on: head/databases/galera/files/patch-SConstruct ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: head/databases/galera/files/patch-galerautils__src__gu_asio.hpp =================================================================== --- head/databases/galera/files/patch-galerautils__src__gu_asio.hpp (revision 444982) +++ head/databases/galera/files/patch-galerautils__src__gu_asio.hpp (nonexistent) @@ -1,22 +0,0 @@ ---- galerautils/src/gu_asio.hpp.orig 2017-01-25 07:55:06 UTC -+++ galerautils/src/gu_asio.hpp -@@ -32,6 +32,19 @@ - #endif // __GNUG__ - #endif // ! HAVE_SYSTEM_ASIO - -+#ifdef ASIO_HPP -+#error asio.hpp is already included before gu_asio.hpp, can't customize asio.hpp -+#endif // ASIO_HPP -+ -+#include "asio/version.hpp" -+ -+// ASIO does not interact well with kqueue before ASIO 1.10.5, see -+// https://readlist.com/lists/freebsd.org/freebsd-current/23/119264.html -+// http://think-async.com/Asio/asio-1.10.6/doc/asio/history.html#asio.history.asio_1_10_5 -+#if ASIO_VERSION < 101005 -+# define ASIO_DISABLE_KQUEUE -+#endif // ASIO_VERSION < 101005 -+ - #include "asio.hpp" - #include "asio/ssl.hpp" - Property changes on: head/databases/galera/files/patch-galerautils__src__gu_asio.hpp ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: head/databases/galera/files/patch-gcomm__src__asio_tcp.cpp =================================================================== --- head/databases/galera/files/patch-gcomm__src__asio_tcp.cpp (nonexistent) +++ head/databases/galera/files/patch-gcomm__src__asio_tcp.cpp (revision 444983) @@ -0,0 +1,115 @@ +--- gcomm/src/asio_tcp.cpp.orig 2017-01-25 07:55:06 UTC ++++ gcomm/src/asio_tcp.cpp +@@ -231,10 +231,18 @@ void gcomm::AsioTcpSocket::close() + } + } + ++// Enable to introduce random errors for write handler ++// #define GCOMM_ASIO_TCP_SIMULATE_WRITE_HANDLER_ERROR + + void gcomm::AsioTcpSocket::write_handler(const asio::error_code& ec, + size_t bytes_transferred) + { ++#ifdef GCOMM_ASIO_TCP_SIMULATE_WRITE_HANDLER_ERROR ++ static const long empty_rate(10000); ++ static const long bytes_transferred_less_than_rate(10000); ++ static const long bytes_transferred_not_zero_rate(10000); ++#endif // GCOMM_ASIO_TCP_SIMULATE_WRITE_HANDLER_ERROR ++ + Critical crit(net_); + + if (state() != S_CONNECTED && state() != S_CLOSING) +@@ -252,34 +260,70 @@ void gcomm::AsioTcpSocket::write_handler + + if (!ec) + { +- gcomm_assert(send_q_.empty() == false); +- gcomm_assert(send_q_.front().len() >= bytes_transferred); +- +- while (send_q_.empty() == false && +- bytes_transferred >= send_q_.front().len()) ++ if (send_q_.empty() == true ++#ifdef GCOMM_ASIO_TCP_SIMULATE_WRITE_HANDLER_ERROR ++ || ::rand() % empty_rate == 0 ++#endif // GCOMM_ASIO_TCP_SIMULATE_WRITE_HANDLER_ERROR ++ ) + { +- const Datagram& dg(send_q_.front()); +- bytes_transferred -= dg.len(); +- send_q_.pop_front(); ++ log_warn << "write_handler() called with empty send_q_. " ++ << "Transport may not be reliable, closing the socket"; ++ FAILED_HANDLER(asio::error_code(EPROTO, ++ asio::error::system_category)); + } +- gcomm_assert(bytes_transferred == 0); +- +- if (send_q_.empty() == false) ++ else if (send_q_.front().len() < bytes_transferred ++#ifdef GCOMM_ASIO_TCP_SIMULATE_WRITE_HANDLER_ERROR ++ || ::rand() % bytes_transferred_less_than_rate == 0 ++#endif // GCOMM_ASIO_TCP_SIMULATE_WRITE_HANDLER_ERROR ++ ) + { +- const Datagram& dg(send_q_.front()); +- boost::array cbs; +- cbs[0] = asio::const_buffer(dg.header() +- + dg.header_offset(), +- dg.header_len()); +- cbs[1] = asio::const_buffer(&dg.payload()[0], +- dg.payload().size()); +- write_one(cbs); ++ log_warn << "write_handler() bytes_transferred " ++ << bytes_transferred ++ << " less than sent " ++ << send_q_.front().len() ++ << ". Transport may not be reliable, closing the socket"; ++ FAILED_HANDLER(asio::error_code(EPROTO, ++ asio::error::system_category)); + } +- else if (state_ == S_CLOSING) ++ else + { +- log_debug << "deferred close of " << id(); +- close_socket(); +- state_ = S_CLOSED; ++ while (send_q_.empty() == false && ++ bytes_transferred >= send_q_.front().len()) ++ { ++ const Datagram& dg(send_q_.front()); ++ bytes_transferred -= dg.len(); ++ send_q_.pop_front(); ++ } ++ if (bytes_transferred != 0 ++#ifdef GCOMM_ASIO_TCP_SIMULATE_WRITE_HANDLER_ERROR ++ || ::rand() % bytes_transferred_not_zero_rate == 0 ++#endif // GCOMM_ASIO_TCP_SIMULATE_WRITE_HANDLER_ERROR ++ ) ++ { ++ log_warn << "write_handler() bytes_transferred " ++ << bytes_transferred ++ << " after processing the send_q_. " ++ << "Transport may not be reliable, closing the socket"; ++ FAILED_HANDLER(asio::error_code(EPROTO, ++ asio::error::system_category)); ++ } ++ else if (send_q_.empty() == false) ++ { ++ const Datagram& dg(send_q_.front()); ++ boost::array cbs; ++ cbs[0] = asio::const_buffer(dg.header() ++ + dg.header_offset(), ++ dg.header_len()); ++ cbs[1] = asio::const_buffer(&dg.payload()[0], ++ dg.payload().size()); ++ write_one(cbs); ++ } ++ else if (state_ == S_CLOSING) ++ { ++ log_debug << "deferred close of " << id(); ++ close_socket(); ++ state_ = S_CLOSED; ++ } + } + } + else if (state_ == S_CLOSING) Property changes on: head/databases/galera/files/patch-gcomm__src__asio_tcp.cpp ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property