Skip to content

Commit ab5d892

Browse files
committed
Merge branch 'mysql-8.0' into mysql-trunk
Change-Id: I30be6c9461763b417e7f080f3eb1f0d963ad4a96
2 parents 98c7a77 + eaf4d85 commit ab5d892

File tree

3 files changed

+66
-36
lines changed

3 files changed

+66
-36
lines changed

router/src/routing/src/await_client_or_server.cc

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,6 @@ stdx::expected<Processor::Result, std::error_code>
4848
AwaitClientOrServerProcessor::init() {
4949
stage(Stage::WaitBoth);
5050

51-
connection()->recv_from_either(
52-
MysqlRoutingClassicConnectionBase::FromEither::Started);
53-
5451
return Result::RecvFromBoth;
5552
}
5653

router/src/routing/src/classic_connection_base.cc

Lines changed: 64 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -234,39 +234,19 @@ void MysqlRoutingClassicConnectionBase::async_recv_client(Function next) {
234234
}
235235

236236
++active_work_;
237-
this->socket_splicer()->async_recv_client([this, next](std::error_code ec,
238-
size_t transferred) {
239-
(void)transferred;
240-
241-
--active_work_;
242-
243-
if (ec == std::errc::operation_canceled) {
244-
// cancelled by:
245-
//
246-
// - request to shutdown
247-
// - timer
248-
// - read-from-client-xor-server
249-
if (recv_from_either() ==
250-
MysqlRoutingClassicConnectionBase::FromEither::RecvedFromServer) {
251-
recv_from_either(MysqlRoutingClassicConnectionBase::FromEither::None);
252-
253-
return call_next_function(next);
254-
}
255-
} else {
256-
read_timer().cancel();
257-
}
237+
this->socket_splicer()->async_recv_client(
238+
[this, next](std::error_code ec, size_t transferred [[maybe_unused]]) {
239+
--active_work_;
258240

259-
if (ec) return recv_client_failed(ec);
241+
if (ec != std::errc::operation_canceled) {
242+
read_timer().cancel();
243+
}
260244

261-
if (recv_from_either() ==
262-
MysqlRoutingClassicConnectionBase::FromEither::Started) {
263-
recv_from_either(
264-
MysqlRoutingClassicConnectionBase::FromEither::RecvedFromClient);
265-
}
245+
if (ec) return recv_client_failed(ec);
266246

267-
return trace_and_call_function(Tracer::Event::Direction::kClientToRouter,
268-
"io::recv", next);
269-
});
247+
return trace_and_call_function(
248+
Tracer::Event::Direction::kClientToRouter, "io::recv", next);
249+
});
270250
}
271251

272252
void MysqlRoutingClassicConnectionBase::async_send_server(Function next) {
@@ -302,6 +282,59 @@ void MysqlRoutingClassicConnectionBase::async_recv_server(Function next) {
302282
}
303283

304284
++active_work_;
285+
286+
this->socket_splicer()->async_recv_server(
287+
[this, next](std::error_code ec, size_t transferred [[maybe_unused]]) {
288+
--active_work_;
289+
290+
if (ec) return recv_server_failed(ec);
291+
292+
return trace_and_call_function(
293+
Tracer::Event::Direction::kServerToRouter, "io::recv", next);
294+
});
295+
}
296+
297+
void MysqlRoutingClassicConnectionBase::async_recv_both(Function next) {
298+
if (disconnect_requested()) {
299+
return recv_client_failed(make_error_code(std::errc::operation_canceled));
300+
}
301+
302+
recv_from_either(MysqlRoutingClassicConnectionBase::FromEither::Started);
303+
304+
++active_work_; // client
305+
++active_work_; // server
306+
307+
this->socket_splicer()->async_recv_client([this, next](std::error_code ec,
308+
size_t transferred
309+
[[maybe_unused]]) {
310+
--active_work_;
311+
312+
if (ec == std::errc::operation_canceled) {
313+
// cancelled by:
314+
//
315+
// - request to shutdown
316+
// - timer
317+
// - read-from-client-xor-server
318+
if (recv_from_either() ==
319+
MysqlRoutingClassicConnectionBase::FromEither::RecvedFromServer) {
320+
recv_from_either(MysqlRoutingClassicConnectionBase::FromEither::None);
321+
322+
return call_next_function(next);
323+
}
324+
}
325+
326+
if (ec) return recv_client_failed(ec);
327+
328+
if (recv_from_either() ==
329+
MysqlRoutingClassicConnectionBase::FromEither::Started) {
330+
recv_from_either(
331+
MysqlRoutingClassicConnectionBase::FromEither::RecvedFromClient);
332+
}
333+
334+
return trace_and_call_function(Tracer::Event::Direction::kClientToRouter,
335+
"io::recv", next);
336+
});
337+
305338
this->socket_splicer()->async_recv_server([this, next](std::error_code ec,
306339
size_t transferred) {
307340
(void)transferred;
@@ -764,9 +797,7 @@ void MysqlRoutingClassicConnectionBase::loop() {
764797
case Processor::Result::RecvFromServer:
765798
return async_recv_server(Function::kLoop);
766799
case Processor::Result::RecvFromBoth:
767-
async_recv_client(Function::kLoop);
768-
async_recv_server(Function::kLoop);
769-
return;
800+
return async_recv_both(Function::kLoop);
770801
case Processor::Result::SendToClient:
771802
return async_send_client(Function::kLoop);
772803
case Processor::Result::SendToServer:

router/src/routing/src/classic_connection_base.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -421,6 +421,8 @@ class MysqlRoutingClassicConnectionBase
421421

422422
void async_recv_server(Function next);
423423

424+
void async_recv_both(Function next);
425+
424426
void async_send_client_and_finish();
425427

426428
void async_wait_client_closed();

0 commit comments

Comments
 (0)