Tarantool development patches archive
 help / color / mirror / Atom feed
* [PATCH v2] iproto: close socket explicitly before wal_dir at exit
@ 2019-02-25 14:56 Ilya Kosarev
  2019-02-25 15:07 ` Vladimir Davydov
  2019-02-25 16:50 ` [tarantool-patches] " Konstantin Osipov
  0 siblings, 2 replies; 5+ messages in thread
From: Ilya Kosarev @ 2019-02-25 14:56 UTC (permalink / raw)
  To: tarantool-patches; +Cc: vdavydov.dev, i.kosarev, Ilya Kosarev

From: Ilya Kosarev <ilyanapar@yandex.ru>

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
---
https://github.com/tarantool/tarantool/tree/i.kosarev/gh-3967-close-socket-explicitly
https://github.com/tarantool/tarantool/issues/3967

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

diff --git a/src/box/box.cc b/src/box/box.cc
index e7ec2891c..73d94f79b 100644
--- a/src/box/box.cc
+++ b/src/box/box.cc
@@ -1666,6 +1666,7 @@ box_free(void)
 		tuple_free();
 		port_free();
 #endif
+		iproto_free();
 		replication_free();
 		sequence_free();
 		gc_free();
diff --git a/src/box/iproto.cc b/src/box/iproto.cc
index bea35ce87..b1d24910f 100644
--- a/src/box/iproto.cc
+++ b/src/box/iproto.cc
@@ -2080,3 +2080,16 @@ 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_free()
+{
+	tt_pthread_cancel(net_cord.id);
+	tt_pthread_join(net_cord.id, NULL);
+	/*
+	* Close socket descriptor to prevent hot standby instance
+	* failing to bind in case it tries to bind
+	* before socket is closed by OS.
+	*/
+	close(binary.ev.fd);
+}
diff --git a/src/box/iproto.h b/src/box/iproto.h
index b9a6cf8f7..8f3607ffc 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_free();
+
 #endif /* defined(__cplusplus) */
 
 #endif
-- 
2.17.1

^ permalink raw reply	[flat|nested] 5+ messages in thread
* [Tarantool-patches] [PATCH v2] iproto: close socket explicitly before wal_dir at exit
@ 2020-08-14 10:46 Ilya Kosarev
  0 siblings, 0 replies; 5+ messages in thread
From: Ilya Kosarev @ 2020-08-14 10:46 UTC (permalink / raw)
  To: alyapunov; +Cc: Ilya Kosarev, tarantool-patches

From: Ilya Kosarev <ilyanapar@yandex.ru>

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
---
https://github.com/tarantool/tarantool/tree/i.kosarev/gh-3967-close-socket-explicitly
https://github.com/tarantool/tarantool/issues/3967

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

diff --git a/src/box/box.cc b/src/box/box.cc
index e7ec2891c..73d94f79b 100644
--- a/src/box/box.cc
+++ b/src/box/box.cc
@@ -1666,6 +1666,7 @@ box_free(void)
 		tuple_free();
 		port_free();
 #endif
+		iproto_free();
 		replication_free();
 		sequence_free();
 		gc_free();
diff --git a/src/box/iproto.cc b/src/box/iproto.cc
index bea35ce87..b1d24910f 100644
--- a/src/box/iproto.cc
+++ b/src/box/iproto.cc
@@ -2080,3 +2080,16 @@ 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_free()
+{
+	tt_pthread_cancel(net_cord.id);
+	tt_pthread_join(net_cord.id, NULL);
+	/*
+	* Close socket descriptor to prevent hot standby instance
+	* failing to bind in case it tries to bind
+	* before socket is closed by OS.
+	*/
+	close(binary.ev.fd);
+}
diff --git a/src/box/iproto.h b/src/box/iproto.h
index b9a6cf8f7..8f3607ffc 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_free();
+
 #endif /* defined(__cplusplus) */
 
 #endif
-- 
2.17.1

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

end of thread, other threads:[~2020-08-14 10:46 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-02-25 14:56 [PATCH v2] iproto: close socket explicitly before wal_dir at exit Ilya Kosarev
2019-02-25 15:07 ` Vladimir Davydov
2019-02-25 16:50 ` [tarantool-patches] " Konstantin Osipov
2019-02-25 17:08   ` Vladimir Davydov
2020-08-14 10:46 [Tarantool-patches] " Ilya Kosarev

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