From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp45.i.mail.ru (smtp45.i.mail.ru [94.100.177.105]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id 376A1440F3F for ; Tue, 19 Nov 2019 19:05:02 +0300 (MSK) From: Georgy Kirichenko Date: Tue, 19 Nov 2019 19:04:54 +0300 Message-Id: <513167ba5e8823d58cbe101e10bfa423fff083a1.1574178520.git.georgy@tarantool.org> In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [Tarantool-patches] [PATCH 3/6] xstream: get rid of an exception List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: tarantool-patches@dev.tarantool.org Refactoring: make xstream C-compliant Part of #380 --- src/box/box.cc | 5 +++-- src/box/relay.cc | 23 +++++++++++++---------- src/box/xstream.cc | 7 +------ src/box/xstream.h | 2 +- 4 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/box/box.cc b/src/box/box.cc index 6323e5e6e..f41ef9ce8 100644 --- a/src/box/box.cc +++ b/src/box/box.cc @@ -321,7 +321,7 @@ recovery_journal_create(struct recovery_journal *journal, struct vclock *v) journal->vclock = v; } -static void +static int apply_wal_row(struct xstream *stream, struct xrow_header *row) { struct request request; @@ -330,7 +330,7 @@ apply_wal_row(struct xstream *stream, struct xrow_header *row) struct space *space = space_cache_find_xc(request.space_id); if (box_process_rw(&request, space, NULL) != 0) { say_error("error applying row: %s", request_str(&request)); - diag_raise(); + return -1; } } struct wal_stream *xstream = @@ -341,6 +341,7 @@ apply_wal_row(struct xstream *stream, struct xrow_header *row) */ if (++xstream->rows % WAL_ROWS_PER_YIELD == 0) fiber_sleep(0); + return 0; } static void diff --git a/src/box/relay.cc b/src/box/relay.cc index 202620694..fe5e0cfc9 100644 --- a/src/box/relay.cc +++ b/src/box/relay.cc @@ -165,11 +165,11 @@ relay_last_row_time(const struct relay *relay) return relay->last_row_time; } -static void +static int relay_send(struct relay *relay, struct xrow_header *packet); -static void +static int relay_send_initial_join_row(struct xstream *stream, struct xrow_header *row); -static void +static int relay_send_row(struct xstream *stream, struct xrow_header *row); struct relay * @@ -192,7 +192,7 @@ relay_new(struct replica *replica) static void relay_start(struct relay *relay, int fd, uint64_t sync, - void (*stream_write)(struct xstream *, struct xrow_header *)) + int (*stream_write)(struct xstream *, struct xrow_header *)) { xstream_create(&relay->stream, stream_write); /* @@ -711,7 +711,7 @@ relay_subscribe(struct replica *replica, int fd, uint64_t sync, diag_raise(); } -static void +static int relay_send(struct relay *relay, struct xrow_header *packet) { ERROR_INJECT_YIELD(ERRINJ_RELAY_SEND_DELAY); @@ -719,15 +719,16 @@ relay_send(struct relay *relay, struct xrow_header *packet) packet->sync = relay->sync; relay->last_row_time = ev_monotonic_now(loop()); if (coio_write_xrow(&relay->io, packet) < 0) - diag_raise(); + return -1; fiber_gc(); struct errinj *inj = errinj(ERRINJ_RELAY_TIMEOUT, ERRINJ_DOUBLE); if (inj != NULL && inj->dparam > 0) fiber_sleep(inj->dparam); + return 0; } -static void +static int relay_send_initial_join_row(struct xstream *stream, struct xrow_header *row) { struct relay *relay = container_of(stream, struct relay, stream); @@ -736,11 +737,12 @@ relay_send_initial_join_row(struct xstream *stream, struct xrow_header *row) * vclock while sending a snapshot. */ if (row->group_id != GROUP_LOCAL) - relay_send(relay, row); + return relay_send(relay, row); + return 0; } /** Send a single row to the client. */ -static void +static int relay_send_row(struct xstream *stream, struct xrow_header *packet) { struct relay *relay = container_of(stream, struct relay, stream); @@ -778,6 +780,7 @@ relay_send_row(struct xstream *stream, struct xrow_header *packet) say_warn("injected broken lsn: %lld", (long long) packet->lsn); } - relay_send(relay, packet); + return relay_send(relay, packet); } + return 0; } diff --git a/src/box/xstream.cc b/src/box/xstream.cc index c77e4360e..80f3030d0 100644 --- a/src/box/xstream.cc +++ b/src/box/xstream.cc @@ -35,10 +35,5 @@ int xstream_write(struct xstream *stream, struct xrow_header *row) { - try { - stream->write(stream, row); - } catch (Exception *e) { - return -1; - } - return 0; + return stream->write(stream, row); } diff --git a/src/box/xstream.h b/src/box/xstream.h index d29ff4213..dbeea3d5b 100644 --- a/src/box/xstream.h +++ b/src/box/xstream.h @@ -41,7 +41,7 @@ extern "C" { struct xrow_header; struct xstream; -typedef void (*xstream_write_f)(struct xstream *, struct xrow_header *); +typedef int (*xstream_write_f)(struct xstream *, struct xrow_header *); struct xstream { xstream_write_f write; -- 2.24.0