Tarantool development patches archive
 help / color / mirror / Atom feed
From: Serge Petrenko via Tarantool-patches <tarantool-patches@dev.tarantool.org>
To: Cyrill Gorcunov <gorcunov@gmail.com>,
	tml <tarantool-patches@dev.tarantool.org>
Cc: Vladislav Shpilevoy <v.shpilevoy@tarantool.org>
Subject: Re: [Tarantool-patches] [PATCH v30 2/3] qsync: order access to the limbo terms
Date: Mon, 28 Feb 2022 11:24:32 +0300	[thread overview]
Message-ID: <e08dca65-60db-411c-c77a-6f9bd428ce8d@tarantool.org> (raw)
In-Reply-To: <20220224201841.412565-3-gorcunov@gmail.com>



24.02.2022 23:18, Cyrill Gorcunov пишет:
> ---

Thanks for the fixes!
Only two minor comments left. Please find them below.

Also, please, consider this diff fixing code style:

==============================

diff --git a/src/box/txn_limbo.c b/src/box/txn_limbo.c
index 7607e084b..8634b63b4 100644
--- a/src/box/txn_limbo.c
+++ b/src/box/txn_limbo.c
@@ -726,8 +726,7 @@ txn_limbo_wait_empty(struct txn_limbo *limbo, double 
timeout)
  }

  void
-txn_limbo_apply(struct txn_limbo *limbo,
-               const struct synchro_request *req)
+txn_limbo_apply(struct txn_limbo *limbo, const struct synchro_request *req)
  {
         assert(latch_is_locked(&limbo->promote_latch));

@@ -792,8 +791,7 @@ txn_limbo_apply(struct txn_limbo *limbo,
  }

  void
-txn_limbo_process(struct txn_limbo *limbo,
-                 const struct synchro_request *req)
+txn_limbo_process(struct txn_limbo *limbo, const struct synchro_request 
*req)
  {
         txn_limbo_begin(limbo);
         txn_limbo_apply(limbo, req);
diff --git a/src/box/txn_limbo.h b/src/box/txn_limbo.h
index 1f5da7abb..8c9671ca5 100644
--- a/src/box/txn_limbo.h
+++ b/src/box/txn_limbo.h
@@ -235,8 +235,7 @@ txn_limbo_replica_term(const struct txn_limbo 
*limbo, uint32_t replica_id)
   * data from it. The check is only valid when elections are enabled.
   */
  static inline bool
-txn_limbo_is_replica_outdated(struct txn_limbo *limbo,
-                             uint32_t replica_id)
+txn_limbo_is_replica_outdated(struct txn_limbo *limbo, uint32_t replica_id)
  {
         latch_lock(&limbo->promote_latch);
         uint64_t v = vclock_get(&limbo->promote_term_map, replica_id);

==============================


...

> diff --git a/src/box/txn_limbo.h b/src/box/txn_limbo.h
> index 53e52f676..1f5da7abb 100644
> --- a/src/box/txn_limbo.h
> +++ b/src/box/txn_limbo.h
> @@ -31,6 +31,7 @@
>    */
>   #include "small/rlist.h"
>   #include "vclock/vclock.h"
> +#include "latch.h"
>   
>   #include <stdint.h>
>   
> @@ -147,6 +148,14 @@ struct txn_limbo {
>   	 * limbo and raft are in sync and the terms are the same.
>   	 */
>   	uint64_t promote_greatest_term;
> +	/**
> +	 * To order access to the promote data.
> +	 */
> +	struct latch promote_latch;
> +	/**
> +	 * A flag to inform if limbo is locked (for tests mostly).
> +	 */
> +	bool promote_is_latched;

1. As I can see, you only use `promote_is_latched` to
     push box.info.synchro.queue.latched.

    I suggest you simply use latch_is_locked instead.

2. Also, let's rename `box.info.synchro.queue.latched`
    to something like `box.info.synchro.queue.busy`.
    Feel free to suggest other variants.

    "Latched" just sounds too technical IMO.

>   	/**
>   	 * Maximal LSN gathered quorum and either already confirmed in WAL, or
>   	 * whose confirmation is in progress right now. Any attempt to confirm
> @@ -226,11 +235,14 @@ txn_limbo_replica_term(const struct txn_limbo *limbo, uint32_t replica_id)
>    * data from it. The check is only valid when elections are enabled.
>    */
>   static inline bool
> -txn_limbo_is_replica_outdated(const struct txn_limbo *limbo,
> +txn_limbo_is_replica_outdated(struct txn_limbo *limbo,
>   			      uint32_t replica_id)
>   {
> -	return txn_limbo_replica_term(limbo, replica_id) <
> -	       limbo->promote_greatest_term;
> +	latch_lock(&limbo->promote_latch);
> +	uint64_t v = vclock_get(&limbo->promote_term_map, replica_id);
> +	bool res = v < limbo->promote_greatest_term;
> +	latch_unlock(&limbo->promote_latch);
> +	return res;
>   }
>   
>
...

-- 
Serge Petrenko


  reply	other threads:[~2022-02-28  8:24 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-02-24 20:18 [Tarantool-patches] [RFC v30 0/3] qsync: implement packet filtering (part 1) Cyrill Gorcunov via Tarantool-patches
2022-02-24 20:18 ` [Tarantool-patches] [PATCH v30 1/3] latch: add latch_is_locked helper Cyrill Gorcunov via Tarantool-patches
2022-02-28  8:13   ` Serge Petrenko via Tarantool-patches
2022-02-24 20:18 ` [Tarantool-patches] [PATCH v30 2/3] qsync: order access to the limbo terms Cyrill Gorcunov via Tarantool-patches
2022-02-28  8:24   ` Serge Petrenko via Tarantool-patches [this message]
2022-02-24 20:18 ` [Tarantool-patches] [PATCH v30 3/3] test: add gh-6036-qsync-order test Cyrill Gorcunov via Tarantool-patches
2022-02-28  8:13   ` Serge Petrenko via Tarantool-patches

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=e08dca65-60db-411c-c77a-6f9bd428ce8d@tarantool.org \
    --to=tarantool-patches@dev.tarantool.org \
    --cc=gorcunov@gmail.com \
    --cc=sergepetrenko@tarantool.org \
    --cc=v.shpilevoy@tarantool.org \
    --subject='Re: [Tarantool-patches] [PATCH v30 2/3] qsync: order access to the limbo terms' \
    /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