Tarantool development patches archive
 help / color / mirror / Atom feed
From: Vladislav Shpilevoy <v.shpilevoy@tarantool.org>
To: Konstantin Osipov <kostja@tarantool.org>
Cc: tarantool-patches@freelists.org
Subject: [tarantool-patches] Re: [PATCH 4/5] swim: allow to omit host in URI
Date: Thu, 2 May 2019 18:10:04 +0300	[thread overview]
Message-ID: <98cf0bc9-8b4a-cbb0-7656-4b83d6dc3d58@tarantool.org> (raw)
In-Reply-To: <20190501052026.GD1139@atlas>



On 01/05/2019 08:20, Konstantin Osipov wrote:
> * Vladislav Shpilevoy <v.shpilevoy@tarantool.org> [19/05/01 08:07]:
>> Before the patch swim.cfg() was returning an error on an attempt
>> to use URI like 'port', without a host. But it would be useful,
>> easy, and short to allow that, and use '127.0.0.1' host by
>> default. Compare:
>>
>>     swim:cfg({uri = 1234})
>>             vs
>>     swim:cfg({uri = '127.0.0.1:1234'})
>>
>> It is remarkable that box.cfg{listen} also allows to omit host.
>>
>> Note, that use '0.0.0.0' (INADDR_ANY) is forbidden. Otherwise
>>
>>     1) Different instances interacting with this one via not the
>>        same interfaces would see different source IP addresses.
>>        It would mess member tables;
>>
>>     2) This instance would not be able to encode its IP address
>>        in the meta section, because it has no a fixed IP. At the
>>        same time omission of it and usage of UDP header source
>>        address is not possible as well, because UDP header is not
>>        encrypted and therefore is not safe to look at.
>>
> 
> Thank you for an elaborate description. Please squash the patch
> with the previous one. I believe at least some of this extensive
> comment belongs to the source code. The patch is OK to push after
> adding a comment.
> 

Added:

================================================================
diff --git a/src/lib/swim/swim.c b/src/lib/swim/swim.c
index c806000df..ada36156e 100644
--- a/src/lib/swim/swim.c
+++ b/src/lib/swim/swim.c
@@ -1710,6 +1710,27 @@ swim_uri_to_addr(const char *uri, struct sockaddr_in *addr,
 	}
 	*addr = *((struct sockaddr_in *) &storage);
 	if (is_host_empty) {
+		/*
+		 * This condition is satisfied when host is
+		 * omitted and URI is "port". Note, that
+		 * traditionally "port" is converted to
+		 * "0.0.0.0:port" what means binding to all the
+		 * interfaces simultaneously, but it would not
+		 * work for SWIM. There is why:
+		 *
+		 *     - Different instances interacting with this
+		 *       one via not the same interface would see
+		 *       different source IP addresses. It would
+		 *       mess member tables;
+		 *
+		 *     - This instance would not be able to encode
+		 *       its IP address in the meta section,
+		 *       because it has no a fixed IP. At the same
+		 *       time omission of it and usage of UDP
+		 *       header source address is not possible as
+		 *       well, because UDP header is not encrypted
+		 *       and therefore is not safe to look at.
+		 */
 		addr->sin_addr.s_addr = htonl(INADDR_LOOPBACK);
 	} else if (addr->sin_addr.s_addr == 0) {
 		diag_set(IllegalParams, "%s INADDR_ANY is not supported",
diff --git a/src/lib/swim/swim.h b/src/lib/swim/swim.h
index 2f53716c7..a3711dc27 100644
--- a/src/lib/swim/swim.h
+++ b/src/lib/swim/swim.h
@@ -77,7 +77,8 @@ swim_is_configured(const struct swim *swim);
  * Configure or reconfigure a SWIM instance.
  *
  * @param swim SWIM instance to configure.
- * @param uri URI in the format "ip:port".
+ * @param uri URI in the format "ip:port", or "port". In the
+ *        latter case host is "127.0.0.1" by default.
  * @param heartbeat_rate Rate of sending round messages. It does
  *        not mean that each member will be checked each
  *        @heartbeat_rate seconds. It is rather the protocol
================================================================

  reply	other threads:[~2019-05-02 15:10 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-04-30 22:31 [tarantool-patches] [PATCH 0/5] swim lua preparation Vladislav Shpilevoy
2019-04-30 22:31 ` [tarantool-patches] [PATCH 1/5] swim: do not use ev_timer_start Vladislav Shpilevoy
2019-05-01  5:09   ` [tarantool-patches] " Konstantin Osipov
2019-04-30 22:31 ` [tarantool-patches] [PATCH 2/5] swim: introduce member reference API Vladislav Shpilevoy
2019-05-01  5:15   ` [tarantool-patches] " Konstantin Osipov
2019-05-02 15:10     ` Vladislav Shpilevoy
2019-05-02 15:46       ` Konstantin Osipov
2019-05-02 17:32         ` Vladislav Shpilevoy
2019-04-30 22:31 ` [tarantool-patches] [PATCH 3/5] sio: return 'no host' flag from sio_uri_to_addr() Vladislav Shpilevoy
2019-05-01  5:18   ` [tarantool-patches] " Konstantin Osipov
2019-04-30 22:31 ` [tarantool-patches] [PATCH 4/5] swim: allow to omit host in URI Vladislav Shpilevoy
2019-05-01  5:20   ` [tarantool-patches] " Konstantin Osipov
2019-05-02 15:10     ` Vladislav Shpilevoy [this message]
2019-04-30 22:31 ` [tarantool-patches] [PATCH 5/5] swim: explicitly stop old ev_io input/output on rebind Vladislav Shpilevoy
2019-05-01  5:21   ` [tarantool-patches] " Konstantin Osipov
2019-05-02 17:32 ` [tarantool-patches] Re: [PATCH 0/5] swim lua preparation Vladislav Shpilevoy

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=98cf0bc9-8b4a-cbb0-7656-4b83d6dc3d58@tarantool.org \
    --to=v.shpilevoy@tarantool.org \
    --cc=kostja@tarantool.org \
    --cc=tarantool-patches@freelists.org \
    --subject='[tarantool-patches] Re: [PATCH 4/5] swim: allow to omit host in URI' \
    /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