[Tarantool-patches] [PATCH v15 11/11] box/journal: redesign journal operations
Konstantin Osipov
kostja.osipov at gmail.com
Fri Mar 20 13:22:54 MSK 2020
* Cyrill Gorcunov <gorcunov at gmail.com> [20/03/20 11:25]:
> Redesing notes:
Redesign
> +int
> +journal_no_write_async(struct journal *journal,
> + struct journal_entry *entry)
> +{
> + (void)journal;
> +
> + assert(true);
> + entry->res = -1;
You have to set the diagnostics area if you return -1, otherwise
you'll get a crash in production.
> + return -1;
> +}
> +
> +void
> +journal_no_write_async_cb(struct journal_entry *entry)
> +{
> + assert(true);
> + entry->res = -1;
Same here.
> @@ -636,21 +628,28 @@ txn_commit(struct txn *txn)
> return -1;
> }
>
> - if (txn_write_to_wal(req) != 0)
> + fiber_set_txn(fiber(), NULL);
> + if (journal_write(req) != 0) {
> + fiber_set_txn(fiber(), txn);
I wonder why do you need to clear/set txn in txn_commit()?
> + txn_rollback(txn);
> + txn_free(txn);
> +
> + diag_set(ClientError, ER_WAL_IO);
> + diag_log();
> return -1;
> + }
>
> - /*
> - * In case of non-yielding journal the transaction could already
> - * be done and there is nothing to wait in such cases.
> - */
> if (!txn_has_flag(txn, TXN_IS_DONE)) {
> - bool cancellable = fiber_set_cancellable(false);
> - fiber_yield();
> - fiber_set_cancellable(cancellable);
> + txn->signature = req->res;
> + txn_complete(txn);
> + fiber_set_txn(fiber(), NULL);
Seems you do it twice ?
--
Konstantin Osipov, Moscow, Russia
More information about the Tarantool-patches
mailing list