Tarantool development patches archive
 help / color / mirror / Atom feed
* [tarantool-patches] [PATCH] Close socket explicitly before wal_dir at exit
@ 2019-02-22 12:05 Ilya Kosarev
  2019-02-25 11:28 ` Vladimir Davydov
  0 siblings, 1 reply; 2+ messages in thread
From: Ilya Kosarev @ 2019-02-22 12:05 UTC (permalink / raw)
  To: tarantool-patches; +Cc: georgy, i.kosarev, Ilya Kosarev

tarantool instance didn't close socket explicitly which could cause hot standby instance to fail to bind in case it tries to bind before socket is closed by OS. Now it is fixed by closing socket explicitly before wal_dir.

Closes #3967
---
Branch: https://github.com/tarantool/tarantool/tree/i.kosarev/gh-3967-close-socket-explicitly
Issue: https://github.com/tarantool/tarantool/issues/3967

 src/box/box.cc    | 1 +
 src/box/iproto.cc | 7 +++++++
 src/box/iproto.h  | 3 +++
 3 files changed, 11 insertions(+)

diff --git a/src/box/box.cc b/src/box/box.cc
index 9a8ca1585..38bdebeba 100644
--- a/src/box/box.cc
+++ b/src/box/box.cc
@@ -1666,6 +1666,7 @@ box_free(void)
 		tuple_free();
 		port_free();
 #endif
+		iproto_socket_free();
 		replication_free();
 		sequence_free();
 		gc_free();
diff --git a/src/box/iproto.cc b/src/box/iproto.cc
index 19a945d2a..1d2fb3bdd 100644
--- a/src/box/iproto.cc
+++ b/src/box/iproto.cc
@@ -2075,3 +2075,10 @@ iproto_set_msg_max(int new_iproto_msg_max)
 	iproto_do_cfg(&cfg_msg);
 	cpipe_set_max_input(&net_pipe, new_iproto_msg_max / 2);
 }
+
+void
+iproto_socket_free()
+{
+	tt_pthread_cancel(net_cord.id);
+	close(binary.ev.fd);
+}
diff --git a/src/box/iproto.h b/src/box/iproto.h
index b9a6cf8f7..6a9627705 100644
--- a/src/box/iproto.h
+++ b/src/box/iproto.h
@@ -80,6 +80,9 @@ iproto_listen(const char *uri);
 void
 iproto_set_msg_max(int iproto_msg_max);
 
+void
+iproto_socket_free();
+
 #endif /* defined(__cplusplus) */
 
 #endif
-- 
2.17.1

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [tarantool-patches] [PATCH] Close socket explicitly before wal_dir at exit
  2019-02-22 12:05 [tarantool-patches] [PATCH] Close socket explicitly before wal_dir at exit Ilya Kosarev
@ 2019-02-25 11:28 ` Vladimir Davydov
  0 siblings, 0 replies; 2+ messages in thread
From: Vladimir Davydov @ 2019-02-25 11:28 UTC (permalink / raw)
  To: Ilya Kosarev; +Cc: tarantool-patches, georgy, i.kosarev

On Fri, Feb 22, 2019 at 03:05:00PM +0300, Ilya Kosarev wrote:
> tarantool instance didn't close socket explicitly which could cause hot standby instance to fail to bind in case it tries to bind before socket is closed by OS. Now it is fixed by closing socket explicitly before wal_dir.

Please keep the description text within 72 characters (it's a common
practice for git commit messages). Also, the subject line should be
prefixed with the subsystem name if applicable. In this particular case
it should be "iproto":

	iproto: close socket explicitly before wal_dir at exit

> 
> Closes #3967

This line is missing in the commit on the branch. Please fix.

> ---
> Branch: https://github.com/tarantool/tarantool/tree/i.kosarev/gh-3967-close-socket-explicitly
> Issue: https://github.com/tarantool/tarantool/issues/3967

"Branch" and "Issue" prefixes are useless - it's obvious which is which
without them. You could just add the two links.

> 
>  src/box/box.cc    | 1 +
>  src/box/iproto.cc | 7 +++++++
>  src/box/iproto.h  | 3 +++
>  3 files changed, 11 insertions(+)

It's unfortunate there's no test, but I couldn't reproduce the issue
either so I guess it's OK.

> 
> diff --git a/src/box/box.cc b/src/box/box.cc
> index 9a8ca1585..38bdebeba 100644
> --- a/src/box/box.cc
> +++ b/src/box/box.cc
> @@ -1666,6 +1666,7 @@ box_free(void)
>  		tuple_free();
>  		port_free();
>  #endif
> +		iproto_socket_free();
>  		replication_free();
>  		sequence_free();
>  		gc_free();
> diff --git a/src/box/iproto.cc b/src/box/iproto.cc
> index 19a945d2a..1d2fb3bdd 100644
> --- a/src/box/iproto.cc
> +++ b/src/box/iproto.cc
> @@ -2075,3 +2075,10 @@ iproto_set_msg_max(int new_iproto_msg_max)
>  	iproto_do_cfg(&cfg_msg);
>  	cpipe_set_max_input(&net_pipe, new_iproto_msg_max / 2);
>  }
> +
> +void
> +iproto_socket_free()

We typically call a subsystem constructor and destructor <subsys>_init
and <subsys>_free, respectively. Let's rename to iproto_free() please.

> +{
> +	tt_pthread_cancel(net_cord.id);

I think we should wait for the thread to exit before closing the fd,
otherwise it may spit an error message to the log. Take a look at how
replication_free does that, for instance.

Also, I think it's worth adding a comment to the code why it's important
to close the fd on shutdown.

> +	close(binary.ev.fd);
> +}

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2019-02-25 11:28 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-02-22 12:05 [tarantool-patches] [PATCH] Close socket explicitly before wal_dir at exit Ilya Kosarev
2019-02-25 11:28 ` Vladimir Davydov

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox