[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