[kudu-CR] net: make Sockaddr more generic for other address families

2020-04-14 Thread Todd Lipcon (Code Review)
Todd Lipcon has submitted this change and it was merged. ( 
http://gerrit.cloudera.org:8080/15690 )

Change subject: net: make Sockaddr more generic for other address families
..

net: make Sockaddr more generic for other address families

This paves the way for supporting other socket address types: namely
IPv6 and Unix domain sockets. This patch doesn't add any new support,
but increases the size of Sockaddr appropriately and making the methods
more generic.

The approach here is to use a union inside of the Sockaddr class which
could store an address of any type. An alternative (taken by a long-ago
attempt at unix sockets) would be to make Sockaddr an abstract base
class with derived classes for each socket type. I went with this
approach since all of the POSIX socket APIs expect this "tagged union"
approach -- the same APIs are used whether we want to talk to a unix
socket or an IPv4. The downside of this approach is a slightly larger
Sockaddr object footprint, but we shouldn't have a lot of these on the
heap.

One functional change: the default constructor for Sockaddr now creates
an "uninitialized" instance, whereas it used to create a wildcard
address. That's now an explicit static method.

Change-Id: Ifff57e13a0e9b86b191d776ead67371b1e2ed4e3
Reviewed-on: http://gerrit.cloudera.org:8080/15690
Tested-by: Kudu Jenkins
Reviewed-by: Andrew Wong 
Reviewed-by: Alexey Serbin 
---
M src/kudu/clock/builtin_ntp.cc
M src/kudu/rpc/mt-rpc-test.cc
M src/kudu/rpc/negotiation-test.cc
M src/kudu/rpc/proxy.cc
M src/kudu/rpc/rpc-test-base.h
M src/kudu/rpc/rpc-test.cc
M src/kudu/server/webserver.cc
M src/kudu/tserver/scanners.cc
M src/kudu/util/net/net_util-test.cc
M src/kudu/util/net/net_util.cc
M src/kudu/util/net/sockaddr.cc
M src/kudu/util/net/sockaddr.h
M src/kudu/util/net/socket.cc
13 files changed, 217 insertions(+), 85 deletions(-)

Approvals:
  Kudu Jenkins: Verified
  Andrew Wong: Looks good to me, approved
  Alexey Serbin: Looks good to me, approved

--
To view, visit http://gerrit.cloudera.org:8080/15690
To unsubscribe, visit http://gerrit.cloudera.org:8080/settings

Gerrit-Project: kudu
Gerrit-Branch: master
Gerrit-MessageType: merged
Gerrit-Change-Id: Ifff57e13a0e9b86b191d776ead67371b1e2ed4e3
Gerrit-Change-Number: 15690
Gerrit-PatchSet: 5
Gerrit-Owner: Todd Lipcon 
Gerrit-Reviewer: Alexey Serbin 
Gerrit-Reviewer: Andrew Wong 
Gerrit-Reviewer: Bankim Bhavsar 
Gerrit-Reviewer: Kudu Jenkins (120)
Gerrit-Reviewer: Mike Percy 
Gerrit-Reviewer: Tidy Bot (241)
Gerrit-Reviewer: Todd Lipcon 
Gerrit-Reviewer: Volodymyr Verovkin 


[kudu-CR] net: make Sockaddr more generic for other address families

2020-04-14 Thread Alexey Serbin (Code Review)
Alexey Serbin has posted comments on this change. ( 
http://gerrit.cloudera.org:8080/15690 )

Change subject: net: make Sockaddr more generic for other address families
..


Patch Set 4: Code-Review+2


--
To view, visit http://gerrit.cloudera.org:8080/15690
To unsubscribe, visit http://gerrit.cloudera.org:8080/settings

Gerrit-Project: kudu
Gerrit-Branch: master
Gerrit-MessageType: comment
Gerrit-Change-Id: Ifff57e13a0e9b86b191d776ead67371b1e2ed4e3
Gerrit-Change-Number: 15690
Gerrit-PatchSet: 4
Gerrit-Owner: Todd Lipcon 
Gerrit-Reviewer: Alexey Serbin 
Gerrit-Reviewer: Andrew Wong 
Gerrit-Reviewer: Bankim Bhavsar 
Gerrit-Reviewer: Kudu Jenkins (120)
Gerrit-Reviewer: Mike Percy 
Gerrit-Reviewer: Tidy Bot (241)
Gerrit-Reviewer: Todd Lipcon 
Gerrit-Reviewer: Volodymyr Verovkin 
Gerrit-Comment-Date: Tue, 14 Apr 2020 21:56:41 +
Gerrit-HasComments: No


[kudu-CR] net: make Sockaddr more generic for other address families

2020-04-14 Thread Andrew Wong (Code Review)
Andrew Wong has posted comments on this change. ( 
http://gerrit.cloudera.org:8080/15690 )

Change subject: net: make Sockaddr more generic for other address families
..


Patch Set 4: Code-Review+2


--
To view, visit http://gerrit.cloudera.org:8080/15690
To unsubscribe, visit http://gerrit.cloudera.org:8080/settings

Gerrit-Project: kudu
Gerrit-Branch: master
Gerrit-MessageType: comment
Gerrit-Change-Id: Ifff57e13a0e9b86b191d776ead67371b1e2ed4e3
Gerrit-Change-Number: 15690
Gerrit-PatchSet: 4
Gerrit-Owner: Todd Lipcon 
Gerrit-Reviewer: Alexey Serbin 
Gerrit-Reviewer: Andrew Wong 
Gerrit-Reviewer: Bankim Bhavsar 
Gerrit-Reviewer: Kudu Jenkins (120)
Gerrit-Reviewer: Mike Percy 
Gerrit-Reviewer: Tidy Bot (241)
Gerrit-Reviewer: Todd Lipcon 
Gerrit-Reviewer: Volodymyr Verovkin 
Gerrit-Comment-Date: Tue, 14 Apr 2020 21:47:00 +
Gerrit-HasComments: No


[kudu-CR] net: make Sockaddr more generic for other address families

2020-04-14 Thread Todd Lipcon (Code Review)
Hello Tidy Bot, Mike Percy, Alexey Serbin, Kudu Jenkins, Andrew Wong, Bankim 
Bhavsar, Volodymyr Verovkin,

I'd like you to reexamine a change. Please visit

http://gerrit.cloudera.org:8080/15690

to look at the new patch set (#4).

Change subject: net: make Sockaddr more generic for other address families
..

net: make Sockaddr more generic for other address families

This paves the way for supporting other socket address types: namely
IPv6 and Unix domain sockets. This patch doesn't add any new support,
but increases the size of Sockaddr appropriately and making the methods
more generic.

The approach here is to use a union inside of the Sockaddr class which
could store an address of any type. An alternative (taken by a long-ago
attempt at unix sockets) would be to make Sockaddr an abstract base
class with derived classes for each socket type. I went with this
approach since all of the POSIX socket APIs expect this "tagged union"
approach -- the same APIs are used whether we want to talk to a unix
socket or an IPv4. The downside of this approach is a slightly larger
Sockaddr object footprint, but we shouldn't have a lot of these on the
heap.

One functional change: the default constructor for Sockaddr now creates
an "uninitialized" instance, whereas it used to create a wildcard
address. That's now an explicit static method.

Change-Id: Ifff57e13a0e9b86b191d776ead67371b1e2ed4e3
---
M src/kudu/clock/builtin_ntp.cc
M src/kudu/rpc/mt-rpc-test.cc
M src/kudu/rpc/negotiation-test.cc
M src/kudu/rpc/proxy.cc
M src/kudu/rpc/rpc-test-base.h
M src/kudu/rpc/rpc-test.cc
M src/kudu/server/webserver.cc
M src/kudu/tserver/scanners.cc
M src/kudu/util/net/net_util-test.cc
M src/kudu/util/net/net_util.cc
M src/kudu/util/net/sockaddr.cc
M src/kudu/util/net/sockaddr.h
M src/kudu/util/net/socket.cc
13 files changed, 217 insertions(+), 85 deletions(-)


  git pull ssh://gerrit.cloudera.org:29418/kudu refs/changes/90/15690/4
--
To view, visit http://gerrit.cloudera.org:8080/15690
To unsubscribe, visit http://gerrit.cloudera.org:8080/settings

Gerrit-Project: kudu
Gerrit-Branch: master
Gerrit-MessageType: newpatchset
Gerrit-Change-Id: Ifff57e13a0e9b86b191d776ead67371b1e2ed4e3
Gerrit-Change-Number: 15690
Gerrit-PatchSet: 4
Gerrit-Owner: Todd Lipcon 
Gerrit-Reviewer: Alexey Serbin 
Gerrit-Reviewer: Andrew Wong 
Gerrit-Reviewer: Bankim Bhavsar 
Gerrit-Reviewer: Kudu Jenkins (120)
Gerrit-Reviewer: Mike Percy 
Gerrit-Reviewer: Tidy Bot (241)
Gerrit-Reviewer: Todd Lipcon 
Gerrit-Reviewer: Volodymyr Verovkin 


[kudu-CR] net: make Sockaddr more generic for other address families

2020-04-14 Thread Todd Lipcon (Code Review)
Todd Lipcon has posted comments on this change. ( 
http://gerrit.cloudera.org:8080/15690 )

Change subject: net: make Sockaddr more generic for other address families
..


Patch Set 3:

(2 comments)

http://gerrit.cloudera.org:8080/#/c/15690/3/src/kudu/util/net/net_util-test.cc
File src/kudu/util/net/net_util-test.cc:

http://gerrit.cloudera.org:8080/#/c/15690/3/src/kudu/util/net/net_util-test.cc@232
PS3, Line 232:   ASSERT_TRUE(uninitialized_1 == uninitialized_2);
 :
 :   Sockaddr wildcard = Sockaddr::Wildcard();
 :   ASSERT_FALSE(wildcard == uninitialized_1);
 :   ASSERT_FALSE(uninitialized_1 == wildcard);
 :
 :   Sockaddr wildcard_2 = Sockaddr::Wildcard();
 :   ASSERT_TRUE(wildcard == wildcard_2);
 :   ASSERT_TRUE(wildcard_2 == wildcard);
 :
 :   Sockaddr ip_port;
 :   ASSERT_OK(ip_port.ParseString("127.0.0.1:12345", 0));
 :   ASSERT_FALSE(ip_port == uninitialized_1);
 :   ASSERT_FALSE(ip_port == wildcard);
 :   ASSERT_TRUE(ip_port == ip_port);
> nit: any reason to not use ASSERT_EQ and ASSERT_NE for these?
that requires defining either an operator<< or some kind of gtest printer 
method for Sockaddr, and I was too lazy to do that


http://gerrit.cloudera.org:8080/#/c/15690/3/src/kudu/util/net/sockaddr.h
File src/kudu/util/net/sockaddr.h:

http://gerrit.cloudera.org:8080/#/c/15690/3/src/kudu/util/net/sockaddr.h@134
PS3, Line 134:   // Set the type of the internal storage to 'family' and adjust 
ASAN poisoning
 :   // appropriately.
> nit: meant for another method?
Ack



--
To view, visit http://gerrit.cloudera.org:8080/15690
To unsubscribe, visit http://gerrit.cloudera.org:8080/settings

Gerrit-Project: kudu
Gerrit-Branch: master
Gerrit-MessageType: comment
Gerrit-Change-Id: Ifff57e13a0e9b86b191d776ead67371b1e2ed4e3
Gerrit-Change-Number: 15690
Gerrit-PatchSet: 3
Gerrit-Owner: Todd Lipcon 
Gerrit-Reviewer: Alexey Serbin 
Gerrit-Reviewer: Andrew Wong 
Gerrit-Reviewer: Bankim Bhavsar 
Gerrit-Reviewer: Kudu Jenkins (120)
Gerrit-Reviewer: Mike Percy 
Gerrit-Reviewer: Tidy Bot (241)
Gerrit-Reviewer: Todd Lipcon 
Gerrit-Reviewer: Volodymyr Verovkin 
Gerrit-Comment-Date: Tue, 14 Apr 2020 16:13:32 +
Gerrit-HasComments: Yes


[kudu-CR] net: make Sockaddr more generic for other address families

2020-04-11 Thread Andrew Wong (Code Review)
Andrew Wong has posted comments on this change. ( 
http://gerrit.cloudera.org:8080/15690 )

Change subject: net: make Sockaddr more generic for other address families
..


Patch Set 3: Code-Review+1

(2 comments)

http://gerrit.cloudera.org:8080/#/c/15690/3/src/kudu/util/net/net_util-test.cc
File src/kudu/util/net/net_util-test.cc:

http://gerrit.cloudera.org:8080/#/c/15690/3/src/kudu/util/net/net_util-test.cc@232
PS3, Line 232:   ASSERT_TRUE(uninitialized_1 == uninitialized_2);
 :
 :   Sockaddr wildcard = Sockaddr::Wildcard();
 :   ASSERT_FALSE(wildcard == uninitialized_1);
 :   ASSERT_FALSE(uninitialized_1 == wildcard);
 :
 :   Sockaddr wildcard_2 = Sockaddr::Wildcard();
 :   ASSERT_TRUE(wildcard == wildcard_2);
 :   ASSERT_TRUE(wildcard_2 == wildcard);
 :
 :   Sockaddr ip_port;
 :   ASSERT_OK(ip_port.ParseString("127.0.0.1:12345", 0));
 :   ASSERT_FALSE(ip_port == uninitialized_1);
 :   ASSERT_FALSE(ip_port == wildcard);
 :   ASSERT_TRUE(ip_port == ip_port);
nit: any reason to not use ASSERT_EQ and ASSERT_NE for these?


http://gerrit.cloudera.org:8080/#/c/15690/3/src/kudu/util/net/sockaddr.h
File src/kudu/util/net/sockaddr.h:

http://gerrit.cloudera.org:8080/#/c/15690/3/src/kudu/util/net/sockaddr.h@134
PS3, Line 134:   // Set the type of the internal storage to 'family' and adjust 
ASAN poisoning
 :   // appropriately.
nit: meant for another method?



--
To view, visit http://gerrit.cloudera.org:8080/15690
To unsubscribe, visit http://gerrit.cloudera.org:8080/settings

Gerrit-Project: kudu
Gerrit-Branch: master
Gerrit-MessageType: comment
Gerrit-Change-Id: Ifff57e13a0e9b86b191d776ead67371b1e2ed4e3
Gerrit-Change-Number: 15690
Gerrit-PatchSet: 3
Gerrit-Owner: Todd Lipcon 
Gerrit-Reviewer: Alexey Serbin 
Gerrit-Reviewer: Andrew Wong 
Gerrit-Reviewer: Bankim Bhavsar 
Gerrit-Reviewer: Kudu Jenkins (120)
Gerrit-Reviewer: Mike Percy 
Gerrit-Reviewer: Tidy Bot (241)
Gerrit-Reviewer: Todd Lipcon 
Gerrit-Reviewer: Volodymyr Verovkin 
Gerrit-Comment-Date: Sat, 11 Apr 2020 19:32:51 +
Gerrit-HasComments: Yes


[kudu-CR] net: make Sockaddr more generic for other address families

2020-04-10 Thread Bankim Bhavsar (Code Review)
Bankim Bhavsar has posted comments on this change. ( 
http://gerrit.cloudera.org:8080/15690 )

Change subject: net: make Sockaddr more generic for other address families
..


Patch Set 3: Code-Review+1

(1 comment)

http://gerrit.cloudera.org:8080/#/c/15690/2/src/kudu/util/net/sockaddr.cc
File src/kudu/util/net/sockaddr.cc:

http://gerrit.cloudera.org:8080/#/c/15690/2/src/kudu/util/net/sockaddr.cc@62
PS2, Line 62:   struct sockaddr_in addr;
:   memset(, 0, sizeof(addr));
:   addr.sin_family = AF_INET;
:   addr.sin_addr.s_addr = INADDR_ANY;
:   return Sockaddr(addr);
> was curious so I tried this on godbolt: https://godbolt.org/z/xC8qqF
Ack



--
To view, visit http://gerrit.cloudera.org:8080/15690
To unsubscribe, visit http://gerrit.cloudera.org:8080/settings

Gerrit-Project: kudu
Gerrit-Branch: master
Gerrit-MessageType: comment
Gerrit-Change-Id: Ifff57e13a0e9b86b191d776ead67371b1e2ed4e3
Gerrit-Change-Number: 15690
Gerrit-PatchSet: 3
Gerrit-Owner: Todd Lipcon 
Gerrit-Reviewer: Alexey Serbin 
Gerrit-Reviewer: Bankim Bhavsar 
Gerrit-Reviewer: Kudu Jenkins (120)
Gerrit-Reviewer: Mike Percy 
Gerrit-Reviewer: Tidy Bot (241)
Gerrit-Reviewer: Todd Lipcon 
Gerrit-Reviewer: Volodymyr Verovkin 
Gerrit-Comment-Date: Fri, 10 Apr 2020 18:59:09 +
Gerrit-HasComments: Yes


[kudu-CR] net: make Sockaddr more generic for other address families

2020-04-10 Thread Alexey Serbin (Code Review)
Alexey Serbin has posted comments on this change. ( 
http://gerrit.cloudera.org:8080/15690 )

Change subject: net: make Sockaddr more generic for other address families
..


Patch Set 3: Code-Review+2


--
To view, visit http://gerrit.cloudera.org:8080/15690
To unsubscribe, visit http://gerrit.cloudera.org:8080/settings

Gerrit-Project: kudu
Gerrit-Branch: master
Gerrit-MessageType: comment
Gerrit-Change-Id: Ifff57e13a0e9b86b191d776ead67371b1e2ed4e3
Gerrit-Change-Number: 15690
Gerrit-PatchSet: 3
Gerrit-Owner: Todd Lipcon 
Gerrit-Reviewer: Alexey Serbin 
Gerrit-Reviewer: Bankim Bhavsar 
Gerrit-Reviewer: Kudu Jenkins (120)
Gerrit-Reviewer: Mike Percy 
Gerrit-Reviewer: Tidy Bot (241)
Gerrit-Reviewer: Todd Lipcon 
Gerrit-Reviewer: Volodymyr Verovkin 
Gerrit-Comment-Date: Fri, 10 Apr 2020 18:03:20 +
Gerrit-HasComments: No


[kudu-CR] net: make Sockaddr more generic for other address families

2020-04-09 Thread Todd Lipcon (Code Review)
Hello Tidy Bot, Mike Percy, Alexey Serbin, Kudu Jenkins, Bankim Bhavsar, 
Volodymyr Verovkin,

I'd like you to reexamine a change. Please visit

http://gerrit.cloudera.org:8080/15690

to look at the new patch set (#3).

Change subject: net: make Sockaddr more generic for other address families
..

net: make Sockaddr more generic for other address families

This paves the way for supporting other socket address types: namely
IPv6 and Unix domain sockets. This patch doesn't add any new support,
but increases the size of Sockaddr appropriately and making the methods
more generic.

The approach here is to use a union inside of the Sockaddr class which
could store an address of any type. An alternative (taken by a long-ago
attempt at unix sockets) would be to make Sockaddr an abstract base
class with derived classes for each socket type. I went with this
approach since all of the POSIX socket APIs expect this "tagged union"
approach -- the same APIs are used whether we want to talk to a unix
socket or an IPv4. The downside of this approach is a slightly larger
Sockaddr object footprint, but we shouldn't have a lot of these on the
heap.

One functional change: the default constructor for Sockaddr now creates
an "uninitialized" instance, whereas it used to create a wildcard
address. That's now an explicit static method.

Change-Id: Ifff57e13a0e9b86b191d776ead67371b1e2ed4e3
---
M src/kudu/clock/builtin_ntp.cc
M src/kudu/rpc/mt-rpc-test.cc
M src/kudu/rpc/negotiation-test.cc
M src/kudu/rpc/proxy.cc
M src/kudu/rpc/rpc-test-base.h
M src/kudu/rpc/rpc-test.cc
M src/kudu/server/webserver.cc
M src/kudu/tserver/scanners.cc
M src/kudu/util/net/net_util-test.cc
M src/kudu/util/net/net_util.cc
M src/kudu/util/net/sockaddr.cc
M src/kudu/util/net/sockaddr.h
M src/kudu/util/net/socket.cc
13 files changed, 217 insertions(+), 85 deletions(-)


  git pull ssh://gerrit.cloudera.org:29418/kudu refs/changes/90/15690/3
--
To view, visit http://gerrit.cloudera.org:8080/15690
To unsubscribe, visit http://gerrit.cloudera.org:8080/settings

Gerrit-Project: kudu
Gerrit-Branch: master
Gerrit-MessageType: newpatchset
Gerrit-Change-Id: Ifff57e13a0e9b86b191d776ead67371b1e2ed4e3
Gerrit-Change-Number: 15690
Gerrit-PatchSet: 3
Gerrit-Owner: Todd Lipcon 
Gerrit-Reviewer: Alexey Serbin 
Gerrit-Reviewer: Bankim Bhavsar 
Gerrit-Reviewer: Kudu Jenkins (120)
Gerrit-Reviewer: Mike Percy 
Gerrit-Reviewer: Tidy Bot (241)
Gerrit-Reviewer: Todd Lipcon 
Gerrit-Reviewer: Volodymyr Verovkin 


[kudu-CR] net: make Sockaddr more generic for other address families

2020-04-09 Thread Todd Lipcon (Code Review)
Todd Lipcon has posted comments on this change. ( 
http://gerrit.cloudera.org:8080/15690 )

Change subject: net: make Sockaddr more generic for other address families
..


Patch Set 2:

(12 comments)

http://gerrit.cloudera.org:8080/#/c/15690/2//COMMIT_MSG
Commit Message:

http://gerrit.cloudera.org:8080/#/c/15690/2//COMMIT_MSG@10
PS2, Line 10: Unix domain sockets
> Curious about the motivation of this change.
yea, was trying to prototype some unix domain socket based transport, 
potentially involving passing a memfd to do shared memory. Tis was something we 
tried many years ago (via an intern) but never got working great. Figured I'd 
give it another go.

This will also help Facebook who needs ipv6 support.


http://gerrit.cloudera.org:8080/#/c/15690/2/src/kudu/rpc/rpc-test-base.h
File src/kudu/rpc/rpc-test-base.h:

http://gerrit.cloudera.org:8080/#/c/15690/2/src/kudu/rpc/rpc-test-base.h@606
PS2, Line 606:   Status StartFakeServer(Socket *listen_sock, Sockaddr 
*listen_addr) {
> warning: method 'StartFakeServer' can be made static [readability-convert-m
Done


http://gerrit.cloudera.org:8080/#/c/15690/2/src/kudu/util/net/sockaddr.h
File src/kudu/util/net/sockaddr.h:

http://gerrit.cloudera.org:8080/#/c/15690/2/src/kudu/util/net/sockaddr.h@39
PS2, Line 39:   // Create an uninitialized socket. This instance must be 
assigned to before usage.
:   Sockaddr();
> Can the default constructor be deleted instead?
It's needed for APIs like:

Sockaddr addr;
CHECK_OK(sock.GetPeerAddress());


http://gerrit.cloudera.org:8080/#/c/15690/2/src/kudu/util/net/sockaddr.h@59
PS2, Line 59:   // Compare two addresses bytewise.
:   static bool BytewiseLess(const Sockaddr& a, const Sockaddr& b);
:
:   // Return the IPv4 wildcard address.
:   static Sockaddr Wildcard();
> style nit: move these two static methods up to be in the very beginning of
i'll go halfway here -- I think the Wildcard() "static factory" makes sense to 
be up near the constructor, but BytewiseLess probably belongs near operator==


http://gerrit.cloudera.org:8080/#/c/15690/2/src/kudu/util/net/sockaddr.h@69
PS2, Line 69: Parse a string IP address
> From the implementation this function only parses IPV4 addresses. Comment s
Done


http://gerrit.cloudera.org:8080/#/c/15690/2/src/kudu/util/net/sockaddr.h@81
PS2, Line 81: int
> nit: while you are here, maybe change this to be uint16_t ?
the google style guide recommends sticking to 'int' unless trying to represent 
bit patterns, etc. I'll add an assertion, though


http://gerrit.cloudera.org:8080/#/c/15690/2/src/kudu/util/net/sockaddr.h@96
PS2, Line 96: return storage_.generic.ss_family;
> Should there be  a check for is_initialized()?
Done


http://gerrit.cloudera.org:8080/#/c/15690/2/src/kudu/util/net/sockaddr.h@131
PS2, Line 131:   union {
> Clearly sockaddr_storage was designed to be used in this way but I never kn
yea I went halfway down the road of making my own version of it, and then 
discovered it in some man page somewhere


http://gerrit.cloudera.org:8080/#/c/15690/2/src/kudu/util/net/sockaddr.cc
File src/kudu/util/net/sockaddr.cc:

http://gerrit.cloudera.org:8080/#/c/15690/2/src/kudu/util/net/sockaddr.cc@62
PS2, Line 62:   struct sockaddr_in addr;
:   memset(, 0, sizeof(addr));
:   addr.sin_family = AF_INET;
:   addr.sin_addr.s_addr = INADDR_ANY;
:   return Sockaddr(addr);
> Alternatively a static const object could be created just once and a copy s
was curious so I tried this on godbolt: https://godbolt.org/z/xC8qqF

It looks like the "copy from static" is slightly shorter on the hot path but 
adds a branch for the static initialization which makes the whole function 
larger (and less inlinable). The "construct on the fly" as seen here is 
relatively concise -- it elides the extra memcpy etc and just sets up the 
result object "in place".

Given this isn't a hot path anyway I think I prefer this option - fewer lines 
of code and more straightforward to read. I just did the above test because I 
was curios which optimizations would apply.


http://gerrit.cloudera.org:8080/#/c/15690/2/src/kudu/util/net/sockaddr.cc@108
PS2, Line 108: addrlen
> Might it be the case that other.addrlen() != addrlen() ?
nice catch!


http://gerrit.cloudera.org:8080/#/c/15690/2/src/kudu/util/net/sockaddr.cc@173
PS2, Line 173:
> style nit: remove the extra space
Done


http://gerrit.cloudera.org:8080/#/c/15690/2/src/kudu/util/net/sockaddr.cc@173
PS2, Line 173: const_cast
> I might be missing something, but it seems const_cast is not needed?
Done



--
To view, visit http://gerrit.cloudera.org:8080/15690
To unsubscribe, visit http://gerrit.cloudera.org:8080/settings

Gerrit-Project: kudu
Gerrit-Branch: master
Gerrit-MessageType: comment
Gerrit-Change-Id: Ifff57e13a0e9b86b191d776ead67371b1e2ed4e3
Gerrit-Change-Number: 15690
Gerrit-PatchSet: 2

[kudu-CR] net: make Sockaddr more generic for other address families

2020-04-08 Thread Alexey Serbin (Code Review)
Alexey Serbin has posted comments on this change. ( 
http://gerrit.cloudera.org:8080/15690 )

Change subject: net: make Sockaddr more generic for other address families
..


Patch Set 2:

(7 comments)

http://gerrit.cloudera.org:8080/#/c/15690/2/src/kudu/util/net/sockaddr.h
File src/kudu/util/net/sockaddr.h:

http://gerrit.cloudera.org:8080/#/c/15690/2/src/kudu/util/net/sockaddr.h@59
PS2, Line 59:   // Compare two addresses bytewise.
:   static bool BytewiseLess(const Sockaddr& a, const Sockaddr& b);
:
:   // Return the IPv4 wildcard address.
:   static Sockaddr Wildcard();
style nit: move these two static methods up to be in the very beginning of the 
method list?


http://gerrit.cloudera.org:8080/#/c/15690/2/src/kudu/util/net/sockaddr.h@81
PS2, Line 81: int
nit: while you are here, maybe change this to be uint16_t ?


http://gerrit.cloudera.org:8080/#/c/15690/2/src/kudu/util/net/sockaddr.h@85
PS2, Line 85: int
ditto


http://gerrit.cloudera.org:8080/#/c/15690/2/src/kudu/util/net/sockaddr.cc
File src/kudu/util/net/sockaddr.cc:

http://gerrit.cloudera.org:8080/#/c/15690/2/src/kudu/util/net/sockaddr.cc@108
PS2, Line 108: addrlen
Might it be the case that other.addrlen() != addrlen() ?


http://gerrit.cloudera.org:8080/#/c/15690/2/src/kudu/util/net/sockaddr.cc@173
PS2, Line 173:
ditto


http://gerrit.cloudera.org:8080/#/c/15690/2/src/kudu/util/net/sockaddr.cc@173
PS2, Line 173:
style nit: remove the extra space


http://gerrit.cloudera.org:8080/#/c/15690/2/src/kudu/util/net/sockaddr.cc@173
PS2, Line 173: const_cast
I might be missing something, but it seems const_cast is not needed?

http://man7.org/linux/man-pages/man3/getnameinfo.3.html



--
To view, visit http://gerrit.cloudera.org:8080/15690
To unsubscribe, visit http://gerrit.cloudera.org:8080/settings

Gerrit-Project: kudu
Gerrit-Branch: master
Gerrit-MessageType: comment
Gerrit-Change-Id: Ifff57e13a0e9b86b191d776ead67371b1e2ed4e3
Gerrit-Change-Number: 15690
Gerrit-PatchSet: 2
Gerrit-Owner: Todd Lipcon 
Gerrit-Reviewer: Alexey Serbin 
Gerrit-Reviewer: Bankim Bhavsar 
Gerrit-Reviewer: Kudu Jenkins (120)
Gerrit-Reviewer: Mike Percy 
Gerrit-Reviewer: Tidy Bot (241)
Gerrit-Reviewer: Volodymyr Verovkin 
Gerrit-Comment-Date: Thu, 09 Apr 2020 04:45:22 +
Gerrit-HasComments: Yes


[kudu-CR] net: make Sockaddr more generic for other address families

2020-04-08 Thread Mike Percy (Code Review)
Mike Percy has posted comments on this change. ( 
http://gerrit.cloudera.org:8080/15690 )

Change subject: net: make Sockaddr more generic for other address families
..


Patch Set 2: Code-Review+2

(1 comment)

Looks like a step in the right direction for this API.

http://gerrit.cloudera.org:8080/#/c/15690/2/src/kudu/util/net/sockaddr.h
File src/kudu/util/net/sockaddr.h:

http://gerrit.cloudera.org:8080/#/c/15690/2/src/kudu/util/net/sockaddr.h@131
PS2, Line 131:   union {
Clearly sockaddr_storage was designed to be used in this way but I never knew 
about this. Very nice.



--
To view, visit http://gerrit.cloudera.org:8080/15690
To unsubscribe, visit http://gerrit.cloudera.org:8080/settings

Gerrit-Project: kudu
Gerrit-Branch: master
Gerrit-MessageType: comment
Gerrit-Change-Id: Ifff57e13a0e9b86b191d776ead67371b1e2ed4e3
Gerrit-Change-Number: 15690
Gerrit-PatchSet: 2
Gerrit-Owner: Todd Lipcon 
Gerrit-Reviewer: Alexey Serbin 
Gerrit-Reviewer: Bankim Bhavsar 
Gerrit-Reviewer: Kudu Jenkins (120)
Gerrit-Reviewer: Mike Percy 
Gerrit-Reviewer: Tidy Bot (241)
Gerrit-Reviewer: Volodymyr Verovkin 
Gerrit-Comment-Date: Thu, 09 Apr 2020 03:58:07 +
Gerrit-HasComments: Yes


[kudu-CR] net: make Sockaddr more generic for other address families

2020-04-08 Thread Volodymyr Verovkin (Code Review)
Volodymyr Verovkin has posted comments on this change. ( 
http://gerrit.cloudera.org:8080/15690 )

Change subject: net: make Sockaddr more generic for other address families
..


Patch Set 2: Code-Review+1


--
To view, visit http://gerrit.cloudera.org:8080/15690
To unsubscribe, visit http://gerrit.cloudera.org:8080/settings

Gerrit-Project: kudu
Gerrit-Branch: master
Gerrit-MessageType: comment
Gerrit-Change-Id: Ifff57e13a0e9b86b191d776ead67371b1e2ed4e3
Gerrit-Change-Number: 15690
Gerrit-PatchSet: 2
Gerrit-Owner: Todd Lipcon 
Gerrit-Reviewer: Alexey Serbin 
Gerrit-Reviewer: Bankim Bhavsar 
Gerrit-Reviewer: Kudu Jenkins (120)
Gerrit-Reviewer: Mike Percy 
Gerrit-Reviewer: Tidy Bot (241)
Gerrit-Reviewer: Volodymyr Verovkin 
Gerrit-Comment-Date: Thu, 09 Apr 2020 00:19:36 +
Gerrit-HasComments: No


[kudu-CR] net: make Sockaddr more generic for other address families

2020-04-08 Thread Bankim Bhavsar (Code Review)
Bankim Bhavsar has posted comments on this change. ( 
http://gerrit.cloudera.org:8080/15690 )

Change subject: net: make Sockaddr more generic for other address families
..


Patch Set 2:

(1 comment)

http://gerrit.cloudera.org:8080/#/c/15690/2//COMMIT_MSG
Commit Message:

http://gerrit.cloudera.org:8080/#/c/15690/2//COMMIT_MSG@10
PS2, Line 10: Unix domain sockets
Curious about the motivation of this change.
Plan to use Unix domain sockets instead of network for IPC on same host for 
better performance?



--
To view, visit http://gerrit.cloudera.org:8080/15690
To unsubscribe, visit http://gerrit.cloudera.org:8080/settings

Gerrit-Project: kudu
Gerrit-Branch: master
Gerrit-MessageType: comment
Gerrit-Change-Id: Ifff57e13a0e9b86b191d776ead67371b1e2ed4e3
Gerrit-Change-Number: 15690
Gerrit-PatchSet: 2
Gerrit-Owner: Todd Lipcon 
Gerrit-Reviewer: Alexey Serbin 
Gerrit-Reviewer: Bankim Bhavsar 
Gerrit-Reviewer: Kudu Jenkins (120)
Gerrit-Reviewer: Mike Percy 
Gerrit-Reviewer: Tidy Bot (241)
Gerrit-Comment-Date: Wed, 08 Apr 2020 23:41:54 +
Gerrit-HasComments: Yes


[kudu-CR] net: make Sockaddr more generic for other address families

2020-04-08 Thread Bankim Bhavsar (Code Review)
Bankim Bhavsar has posted comments on this change. ( 
http://gerrit.cloudera.org:8080/15690 )

Change subject: net: make Sockaddr more generic for other address families
..


Patch Set 2:

(4 comments)

http://gerrit.cloudera.org:8080/#/c/15690/2/src/kudu/util/net/sockaddr.h
File src/kudu/util/net/sockaddr.h:

http://gerrit.cloudera.org:8080/#/c/15690/2/src/kudu/util/net/sockaddr.h@39
PS2, Line 39:   // Create an uninitialized socket. This instance must be 
assigned to before usage.
:   Sockaddr();
Can the default constructor be deleted instead?


http://gerrit.cloudera.org:8080/#/c/15690/2/src/kudu/util/net/sockaddr.h@69
PS2, Line 69: Parse a string IP address
>From the implementation this function only parses IPV4 addresses. Comment 
>should be updated.


http://gerrit.cloudera.org:8080/#/c/15690/2/src/kudu/util/net/sockaddr.h@96
PS2, Line 96: return storage_.generic.ss_family;
Should there be  a check for is_initialized()?


http://gerrit.cloudera.org:8080/#/c/15690/2/src/kudu/util/net/sockaddr.cc
File src/kudu/util/net/sockaddr.cc:

http://gerrit.cloudera.org:8080/#/c/15690/2/src/kudu/util/net/sockaddr.cc@62
PS2, Line 62:   struct sockaddr_in addr;
:   memset(, 0, sizeof(addr));
:   addr.sin_family = AF_INET;
:   addr.sin_addr.s_addr = INADDR_ANY;
:   return Sockaddr(addr);
Alternatively a static const object could be created just once and a copy 
simply returned.



--
To view, visit http://gerrit.cloudera.org:8080/15690
To unsubscribe, visit http://gerrit.cloudera.org:8080/settings

Gerrit-Project: kudu
Gerrit-Branch: master
Gerrit-MessageType: comment
Gerrit-Change-Id: Ifff57e13a0e9b86b191d776ead67371b1e2ed4e3
Gerrit-Change-Number: 15690
Gerrit-PatchSet: 2
Gerrit-Owner: Todd Lipcon 
Gerrit-Reviewer: Alexey Serbin 
Gerrit-Reviewer: Bankim Bhavsar 
Gerrit-Reviewer: Kudu Jenkins (120)
Gerrit-Reviewer: Mike Percy 
Gerrit-Reviewer: Tidy Bot (241)
Gerrit-Comment-Date: Wed, 08 Apr 2020 23:32:42 +
Gerrit-HasComments: Yes


[kudu-CR] net: make Sockaddr more generic for other address families

2020-04-08 Thread Todd Lipcon (Code Review)
Hello Mike Percy, Alexey Serbin, Kudu Jenkins,

I'd like you to reexamine a change. Please visit

http://gerrit.cloudera.org:8080/15690

to look at the new patch set (#2).

Change subject: net: make Sockaddr more generic for other address families
..

net: make Sockaddr more generic for other address families

This paves the way for supporting other socket address types: namely
IPv6 and Unix domain sockets. This patch doesn't add any new support,
but increases the size of Sockaddr appropriately and making the methods
more generic.

The approach here is to use a union inside of the Sockaddr class which
could store an address of any type. An alternative (taken by a long-ago
attempt at unix sockets) would be to make Sockaddr an abstract base
class with derived classes for each socket type. I went with this
approach since all of the POSIX socket APIs expect this "tagged union"
approach -- the same APIs are used whether we want to talk to a unix
socket or an IPv4. The downside of this approach is a slightly larger
Sockaddr object footprint, but we shouldn't have a lot of these on the
heap.

One functional change: the default constructor for Sockaddr now creates
an "uninitialized" instance, whereas it used to create a wildcard
address. That's now an explicit static method.

Change-Id: Ifff57e13a0e9b86b191d776ead67371b1e2ed4e3
---
M src/kudu/clock/builtin_ntp.cc
M src/kudu/rpc/mt-rpc-test.cc
M src/kudu/rpc/negotiation-test.cc
M src/kudu/rpc/proxy.cc
M src/kudu/rpc/rpc-test-base.h
M src/kudu/rpc/rpc-test.cc
M src/kudu/server/webserver.cc
M src/kudu/tserver/scanners.cc
M src/kudu/util/net/net_util-test.cc
M src/kudu/util/net/net_util.cc
M src/kudu/util/net/sockaddr.cc
M src/kudu/util/net/sockaddr.h
M src/kudu/util/net/socket.cc
13 files changed, 188 insertions(+), 81 deletions(-)


  git pull ssh://gerrit.cloudera.org:29418/kudu refs/changes/90/15690/2
--
To view, visit http://gerrit.cloudera.org:8080/15690
To unsubscribe, visit http://gerrit.cloudera.org:8080/settings

Gerrit-Project: kudu
Gerrit-Branch: master
Gerrit-MessageType: newpatchset
Gerrit-Change-Id: Ifff57e13a0e9b86b191d776ead67371b1e2ed4e3
Gerrit-Change-Number: 15690
Gerrit-PatchSet: 2
Gerrit-Owner: Todd Lipcon 
Gerrit-Reviewer: Alexey Serbin 
Gerrit-Reviewer: Kudu Jenkins (120)
Gerrit-Reviewer: Mike Percy 


[kudu-CR] net: make Sockaddr more generic for other address families

2020-04-08 Thread Todd Lipcon (Code Review)
Hello Mike Percy, Alexey Serbin,

I'd like you to do a code review. Please visit

http://gerrit.cloudera.org:8080/15690

to review the following change.


Change subject: net: make Sockaddr more generic for other address families
..

net: make Sockaddr more generic for other address families

This paves the way for supporting other socket address types: namely
IPv6 and Unix domain sockets. This patch doesn't add any new support,
but increases the size of Sockaddr appropriately and making the methods
more generic.

The approach here is to use a union inside of the Sockaddr class which
could store an address of any type. An alternative (taken by a long-ago
attempt at unix sockets) would be to make Sockaddr an abstract base
class with derived classes for each socket type. I went with this
approach since all of the POSIX socket APIs expect this "tagged union"
approach -- the same APIs are used whether we want to talk to a unix
socket or an IPv4. The downside of this approach is a slightly larger
Sockaddr object footprint, but we shouldn't have a lot of these on the
heap.

One functional change: the default constructor for Sockaddr now creates
an "uninitialized" instance, whereas it used to create a wildcard
address. That's now an explicit static method.

Change-Id: Ifff57e13a0e9b86b191d776ead67371b1e2ed4e3
---
M src/kudu/clock/builtin_ntp.cc
M src/kudu/rpc/mt-rpc-test.cc
M src/kudu/rpc/negotiation-test.cc
M src/kudu/rpc/proxy.cc
M src/kudu/rpc/rpc-test-base.h
M src/kudu/rpc/rpc-test.cc
M src/kudu/server/webserver.cc
M src/kudu/tserver/scanners.cc
M src/kudu/util/net/net_util-test.cc
M src/kudu/util/net/net_util.cc
M src/kudu/util/net/sockaddr.cc
M src/kudu/util/net/sockaddr.h
M src/kudu/util/net/socket.cc
13 files changed, 179 insertions(+), 81 deletions(-)



  git pull ssh://gerrit.cloudera.org:29418/kudu refs/changes/90/15690/1
--
To view, visit http://gerrit.cloudera.org:8080/15690
To unsubscribe, visit http://gerrit.cloudera.org:8080/settings

Gerrit-Project: kudu
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ifff57e13a0e9b86b191d776ead67371b1e2ed4e3
Gerrit-Change-Number: 15690
Gerrit-PatchSet: 1
Gerrit-Owner: Todd Lipcon 
Gerrit-Reviewer: Alexey Serbin 
Gerrit-Reviewer: Mike Percy