databases/galera: Upgrade from 25.3.21 to 25.3.22

This commit is contained in:
Vasil Dimov 2017-10-25 13:44:59 +00:00
parent 762aa7c943
commit 3b315e8a8d
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=452858
3 changed files with 4 additions and 120 deletions

View file

@ -2,9 +2,8 @@
# $FreeBSD$
PORTNAME= galera
PORTVERSION?= 25.3.21
PORTVERSION?= 25.3.22
DISTVERSIONPREFIX?= release_
PORTREVISION= 2
CATEGORIES= databases
MAINTAINER= devel@galeracluster.com

View file

@ -1,3 +1,3 @@
TIMESTAMP = 1501158019
SHA256 (codership-galera-release_25.3.21_GH0.tar.gz) = dc0d8e9bcbd16de98c3ee558f7e7e2cf4596670a2e2e38a03d3e45bf5c9ebd5e
SIZE (codership-galera-release_25.3.21_GH0.tar.gz) = 3276033
TIMESTAMP = 1508930849
SHA256 (codership-galera-release_25.3.22_GH0.tar.gz) = cf9d13af44411c8e09222554eb7b6dd82896ad4fe8c2cb54066862abbefef8fb
SIZE (codership-galera-release_25.3.22_GH0.tar.gz) = 3278520

View file

@ -1,115 +0,0 @@
--- 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<AsioProtonet> 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<asio::const_buffer, 2> 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<asio::const_buffer, 2> 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)