- Subject: Re: [PATCH] ipcs: allow connections only after all services are ready (needle)
- From: "Fabio M. Di Nitto" <fdinitto@xxxxxxxxxx>
- Date: Wed, 18 Apr 2012 05:57:37 +0200
- Delivered-to: discuss@xxxxxxxxxxxx
- In-reply-to: <CA+xvd32EWuQGauVQhsDP_ZP=3W9HBWmEeAa++5yvBRwCJmbVJg@mail.gmail.com>
- References: <1334576449-445-1-git-send-email-fdinitto@redhat.com> <CA+xvd32EWuQGauVQhsDP_ZP=3W9HBWmEeAa++5yvBRwCJmbVJg@mail.gmail.com>
- User-agent: Mozilla/5.0 (X11; Linux i686; rv:11.0) Gecko/20120316 Thunderbird/11.0
On 04/17/2012 08:10 PM, dan clark wrote:
> Would this qualify for a back port to 1.4.3?
We haven't seen this problem 1.4 and i haven't been able to reproduce it
there. IPC is a total rewrite between 1.4 and 2.0.
Fabio
> dan
>
> On Mon, Apr 16, 2012 at 4:40 AM, Fabio M. Di Nitto <fdinitto@xxxxxxxxxx
> <mailto:fdinitto@xxxxxxxxxx>> wrote:
>
> From: "Fabio M. Di Nitto" <fdinitto@xxxxxxxxxx
> <mailto:fdinitto@xxxxxxxxxx>>
>
> this fixes a rather annoying race condition at startup where a client
> connects to corosync "too fast" before the service is ready to operate
> and client gets some random data during initialization phase.
>
> With this fix, we allow connections to ipc only after the main engine
> is operational and configured (and after the first totem transition).
>
> Signed-off-by: Fabio M. Di Nitto <fdinitto@xxxxxxxxxx
> <mailto:fdinitto@xxxxxxxxxx>>
> Reviewed-by: Angus Salkeld <asalkeld@xxxxxxxxxx
> <mailto:asalkeld@xxxxxxxxxx>>
> ---
> exec/ipc_glue.c | 11 +++++++++++
> exec/main.c | 1 +
> exec/main.h | 2 ++
> 3 files changed, 14 insertions(+), 0 deletions(-)
>
> diff --git a/exec/ipc_glue.c b/exec/ipc_glue.c
> index c1d6034..592f9f6 100644
> --- a/exec/ipc_glue.c
> +++ b/exec/ipc_glue.c
> @@ -69,6 +69,7 @@ static int32_t ipc_not_enough_fds_left = 0;
> static int32_t ipc_fc_is_quorate; /* boolean */
> static int32_t ipc_fc_totem_queue_level; /* percentage used */
> static int32_t ipc_fc_sync_in_process; /* boolean */
> +static int32_t ipc_allow_connections = 0; /* boolean */
>
> struct cs_ipcs_mapper {
> int32_t id;
> @@ -149,6 +150,11 @@ static const char*
> cs_ipcs_serv_short_name(int32_t service_id)
> return name;
> }
>
> +void cs_ipc_allow_connections(int32_t allow)
> +{
> + ipc_allow_connections = allow;
> +}
> +
> int32_t cs_ipcs_service_destroy(int32_t service_id)
> {
> if (ipcs_mapper[service_id].inst) {
> @@ -164,6 +170,11 @@ static int32_t cs_ipcs_connection_accept
> (qb_ipcs_connection_t *c, uid_t euid, g
> uint8_t u8;
> char key_name[ICMAP_KEYNAME_MAXLEN];
>
> + if (!ipc_allow_connections) {
> + log_printf(LOGSYS_LEVEL_DEBUG, "Denied connection,
> corosync is not ready");
> + return -EAGAIN;
> + }
> +
> if (corosync_service[service] == NULL ||
> corosync_service_exiting[service] ||
> ipcs_mapper[service].inst == NULL) {
> diff --git a/exec/main.c b/exec/main.c
> index 474e0c2..2f3d242 100644
> --- a/exec/main.c
> +++ b/exec/main.c
> @@ -252,6 +252,7 @@ static void corosync_sync_completed (void)
> sync_in_process = 0;
>
> cs_ipcs_sync_state_changed(sync_in_process);
> + cs_ipc_allow_connections(1);
> }
>
> static int corosync_sync_callbacks_retrieve (
> diff --git a/exec/main.h b/exec/main.h
> index 9d27670..13b7e12 100644
> --- a/exec/main.h
> +++ b/exec/main.h
> @@ -119,6 +119,8 @@ extern void cs_ipc_refcnt_inc(void *conn);
>
> extern void cs_ipc_refcnt_dec(void *conn);
>
> +extern void cs_ipc_allow_connections(int32_t allow);
> +
> int coroparse_configparse (const char **error_string);
>
> #endif /* MAIN_H_DEFINED */
> --
> 1.7.7.6
>
> _______________________________________________
> discuss mailing list
> discuss@xxxxxxxxxxxx <mailto:discuss@xxxxxxxxxxxx>
> http://lists.corosync.org/mailman/listinfo/discuss
>
>
>
>
> _______________________________________________
> discuss mailing list
> discuss@xxxxxxxxxxxx
> http://lists.corosync.org/mailman/listinfo/discuss
_______________________________________________
discuss mailing list
discuss@xxxxxxxxxxxx
http://lists.corosync.org/mailman/listinfo/discuss
[Corosync Project]
[Linux USB Devel]
[Video for Linux]
[Linux Audio Users]
[Photo]
[Yosemite News]
[Yosemite Photos]
[Free Online Dating]
[Linux Kernel]
[Linux SCSI]
[XFree86]