From: Georgy Kirichenko <georgy@tarantool.org> To: tarantool-patches@dev.tarantool.org Subject: [Tarantool-patches] [PATCH 3/6] xstream: get rid of an exception Date: Tue, 19 Nov 2019 19:04:54 +0300 [thread overview] Message-ID: <513167ba5e8823d58cbe101e10bfa423fff083a1.1574178520.git.georgy@tarantool.org> (raw) In-Reply-To: <cover.1574178520.git.georgy@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
next prev parent reply other threads:[~2019-11-19 16:05 UTC|newest] Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-11-19 16:04 [Tarantool-patches] [PATCH 0/6] Synchronous replication preparation Georgy Kirichenko 2019-11-19 16:04 ` [Tarantool-patches] [PATCH 1/6] recovery: do not throw an error Georgy Kirichenko 2019-11-23 13:45 ` Vladislav Shpilevoy 2019-11-19 16:04 ` [Tarantool-patches] [PATCH 2/6] coio: do not htrow an exception Georgy Kirichenko 2019-11-23 13:45 ` Vladislav Shpilevoy 2019-11-19 16:04 ` Georgy Kirichenko [this message] 2019-11-23 13:45 ` [Tarantool-patches] [PATCH 3/6] xstream: get rid of " Vladislav Shpilevoy 2019-11-19 16:04 ` [Tarantool-patches] [PATCH 4/6] vinyl: do not insert vy_tx twice into writers list Georgy Kirichenko 2019-11-19 16:04 ` [Tarantool-patches] [PATCH 5/6] box: improve recovery journal Georgy Kirichenko 2019-11-23 13:46 ` Vladislav Shpilevoy 2019-11-19 16:04 ` [Tarantool-patches] [PATCH 6/6] recovery: follow transaction boundaries while recovery or join Georgy Kirichenko 2019-11-23 13:46 ` Vladislav Shpilevoy 2019-11-20 17:15 ` [Tarantool-patches] [PATCH 0/6] Synchronous replication preparation Konstantin Osipov 2019-11-23 13:45 ` Vladislav Shpilevoy
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=513167ba5e8823d58cbe101e10bfa423fff083a1.1574178520.git.georgy@tarantool.org \ --to=georgy@tarantool.org \ --cc=tarantool-patches@dev.tarantool.org \ --subject='Re: [Tarantool-patches] [PATCH 3/6] xstream: get rid of an exception' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox