You are viewing a plain text version of this content. The canonical link for it is here.
Posted to reviews@kudu.apache.org by "Alexey Serbin (Code Review)" <ge...@cloudera.org> on 2020/09/17 04:10:21 UTC

[kudu-CR] [util] fix BaseName() on BSD-derived systems

Alexey Serbin has uploaded this change for review. ( http://gerrit.cloudera.org:8080/16466


Change subject: [util] fix BaseName() on BSD-derived systems
......................................................................

[util] fix BaseName() on BSD-derived systems

basename() is thread-safe on Linux in relatively new glibc
implementations as per its manual page [1].

However, basename() is not thread-safe at least on contemporary
version of Darwin/macOS as per basename() manual page ([2], [3], [4]):

  The basename() function returns a pointer to internal static storage
  space that will be overwritten by subsequent calls.

So, let's use thread-safe basename_r() on macOS.

As a bit of bigger picture, in FreeBSD 12.0, basename() function was
reimplemented to store its result in the provided input buffer. There
is no longer any need to use the basename_r() function (see [5]).

[1] https://www.man7.org/linux/man-pages/man3/basename.3.html
[2] https://www.freebsd.org/cgi/man.cgi?query=basename&sektion=3&manpath=Darwin+7.0.1
[3] https://www.unix.com/man-page/mojave/3/basename/
[4] https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man3/basename.3.html
[5] https://www.freebsd.org/cgi/man.cgi?query=basename&sektion=3&manpath=FreeBSD+12.0-RELEASE

Change-Id: I26b81757e48e0b7d5f79582349548f6e9e474d90
---
M src/kudu/util/path_util.cc
1 file changed, 8 insertions(+), 0 deletions(-)



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

Gerrit-Project: kudu
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: I26b81757e48e0b7d5f79582349548f6e9e474d90
Gerrit-Change-Number: 16466
Gerrit-PatchSet: 1
Gerrit-Owner: Alexey Serbin <as...@cloudera.com>

[kudu-CR] [util] fix BaseName() on BSD-derived systems

Posted by "Grant Henke (Code Review)" <ge...@cloudera.org>.
Grant Henke has posted comments on this change. ( http://gerrit.cloudera.org:8080/16466 )

Change subject: [util] fix BaseName() on BSD-derived systems
......................................................................


Patch Set 2:

(2 comments)

http://gerrit.cloudera.org:8080/#/c/16466/2/src/kudu/util/path_util.cc
File src/kudu/util/path_util.cc:

http://gerrit.cloudera.org:8080/#/c/16466/2/src/kudu/util/path_util.cc@108
PS2, Line 108:   static std::mutex lock;
I missed this approach of using a lock on Apple. Is that an easier fix?


http://gerrit.cloudera.org:8080/#/c/16466/2/src/kudu/util/path_util.cc@116
PS2, Line 116: MAXPATHLEN
The basename is guaranteed to be the same size or smaller than the passed path right?



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

Gerrit-Project: kudu
Gerrit-Branch: master
Gerrit-MessageType: comment
Gerrit-Change-Id: I26b81757e48e0b7d5f79582349548f6e9e474d90
Gerrit-Change-Number: 16466
Gerrit-PatchSet: 2
Gerrit-Owner: Alexey Serbin <as...@cloudera.com>
Gerrit-Reviewer: Alexey Serbin <as...@cloudera.com>
Gerrit-Reviewer: Grant Henke <gr...@apache.org>
Gerrit-Reviewer: Kudu Jenkins (120)
Gerrit-Comment-Date: Thu, 17 Sep 2020 12:46:15 +0000
Gerrit-HasComments: Yes

[kudu-CR] [util] fix BaseName() on BSD-derived systems

Posted by "Alexey Serbin (Code Review)" <ge...@cloudera.org>.
Alexey Serbin has posted comments on this change. ( http://gerrit.cloudera.org:8080/16466 )

Change subject: [util] fix BaseName() on BSD-derived systems
......................................................................


Patch Set 2: Verified+1

Unrelated test failures:
  * TSAN: testInsertIntoUnavailableTablet(org.apache.kudu.client.TestAsyncKuduSession)
  * ASAN: https://issues.apache.org/jira/browse/KUDU-3171


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

Gerrit-Project: kudu
Gerrit-Branch: master
Gerrit-MessageType: comment
Gerrit-Change-Id: I26b81757e48e0b7d5f79582349548f6e9e474d90
Gerrit-Change-Number: 16466
Gerrit-PatchSet: 2
Gerrit-Owner: Alexey Serbin <as...@cloudera.com>
Gerrit-Reviewer: Alexey Serbin <as...@cloudera.com>
Gerrit-Reviewer: Grant Henke <gr...@apache.org>
Gerrit-Reviewer: Kudu Jenkins (120)
Gerrit-Comment-Date: Thu, 17 Sep 2020 07:55:19 +0000
Gerrit-HasComments: No

[kudu-CR] [util] fix BaseName() on BSD-derived systems

Posted by "Grant Henke (Code Review)" <ge...@cloudera.org>.
Grant Henke has posted comments on this change. ( http://gerrit.cloudera.org:8080/16466 )

Change subject: [util] fix BaseName() on BSD-derived systems
......................................................................


Patch Set 2: Code-Review+2


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

Gerrit-Project: kudu
Gerrit-Branch: master
Gerrit-MessageType: comment
Gerrit-Change-Id: I26b81757e48e0b7d5f79582349548f6e9e474d90
Gerrit-Change-Number: 16466
Gerrit-PatchSet: 2
Gerrit-Owner: Alexey Serbin <as...@cloudera.com>
Gerrit-Reviewer: Alexey Serbin <as...@cloudera.com>
Gerrit-Reviewer: Grant Henke <gr...@apache.org>
Gerrit-Reviewer: Kudu Jenkins (120)
Gerrit-Comment-Date: Thu, 17 Sep 2020 20:19:20 +0000
Gerrit-HasComments: No

[kudu-CR] [util] fix BaseName() on BSD-derived systems

Posted by "Alexey Serbin (Code Review)" <ge...@cloudera.org>.
Alexey Serbin has submitted this change and it was merged. ( http://gerrit.cloudera.org:8080/16466 )

Change subject: [util] fix BaseName() on BSD-derived systems
......................................................................

[util] fix BaseName() on BSD-derived systems

basename() is thread-safe on Linux in relatively new glibc
implementations as per its manual page [1].

However, basename() is not thread-safe at least on contemporary
version of Darwin/macOS as per basename() manual page ([2], [3], [4]):

  The basename() function returns a pointer to internal static storage
  space that will be overwritten by subsequent calls.

So, let's use thread-safe basename_r() on macOS. With that, the only
test scenario in file_cache-stress-test no longer fails on macOS.

As a bit of bigger picture, starting FreeBSD 12.0, the basename()
function was reimplemented to store its result in the provided
input buffer [5].

[1] https://www.man7.org/linux/man-pages/man3/basename.3.html
[2] https://www.freebsd.org/cgi/man.cgi?query=basename&sektion=3&manpath=Darwin+7.0.1
[3] https://www.unix.com/man-page/mojave/3/basename/
[4] https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man3/basename.3.html
[5] https://www.freebsd.org/cgi/man.cgi?query=basename&sektion=3&manpath=FreeBSD+12.0-RELEASE

Change-Id: I26b81757e48e0b7d5f79582349548f6e9e474d90
Reviewed-on: http://gerrit.cloudera.org:8080/16466
Tested-by: Alexey Serbin <as...@cloudera.com>
Reviewed-by: Grant Henke <gr...@apache.org>
---
M src/kudu/util/path_util.cc
1 file changed, 26 insertions(+), 3 deletions(-)

Approvals:
  Alexey Serbin: Verified
  Grant Henke: Looks good to me, approved

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

Gerrit-Project: kudu
Gerrit-Branch: master
Gerrit-MessageType: merged
Gerrit-Change-Id: I26b81757e48e0b7d5f79582349548f6e9e474d90
Gerrit-Change-Number: 16466
Gerrit-PatchSet: 3
Gerrit-Owner: Alexey Serbin <as...@cloudera.com>
Gerrit-Reviewer: Alexey Serbin <as...@cloudera.com>
Gerrit-Reviewer: Grant Henke <gr...@apache.org>
Gerrit-Reviewer: Kudu Jenkins (120)

[kudu-CR] [util] fix BaseName() on BSD-derived systems

Posted by "Alexey Serbin (Code Review)" <ge...@cloudera.org>.
Alexey Serbin has posted comments on this change. ( http://gerrit.cloudera.org:8080/16466 )

Change subject: [util] fix BaseName() on BSD-derived systems
......................................................................


Patch Set 2:

(2 comments)

http://gerrit.cloudera.org:8080/#/c/16466/2/src/kudu/util/path_util.cc
File src/kudu/util/path_util.cc:

http://gerrit.cloudera.org:8080/#/c/16466/2/src/kudu/util/path_util.cc@108
PS2, Line 108:   static std::mutex lock;
> I missed this approach of using a lock on Apple. Is that an easier fix?
I addressed this separately in a follow-up changelist: https://gerrit.cloudera.org/#/c/16467/


http://gerrit.cloudera.org:8080/#/c/16466/2/src/kudu/util/path_util.cc@116
PS2, Line 116: MAXPATHLEN
> The basename is guaranteed to be the same size or smaller than the passed p
Yes, it does.  But it's not guaranteed to be less than MAXPATHLEN.



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

Gerrit-Project: kudu
Gerrit-Branch: master
Gerrit-MessageType: comment
Gerrit-Change-Id: I26b81757e48e0b7d5f79582349548f6e9e474d90
Gerrit-Change-Number: 16466
Gerrit-PatchSet: 2
Gerrit-Owner: Alexey Serbin <as...@cloudera.com>
Gerrit-Reviewer: Alexey Serbin <as...@cloudera.com>
Gerrit-Reviewer: Grant Henke <gr...@apache.org>
Gerrit-Reviewer: Kudu Jenkins (120)
Gerrit-Comment-Date: Thu, 17 Sep 2020 15:08:42 +0000
Gerrit-HasComments: Yes

[kudu-CR] [util] fix BaseName() on BSD-derived systems

Posted by "Alexey Serbin (Code Review)" <ge...@cloudera.org>.
Alexey Serbin has removed a vote on this change.

Change subject: [util] fix BaseName() on BSD-derived systems
......................................................................


Removed Verified-1 by Kudu Jenkins (120)
-- 
To view, visit http://gerrit.cloudera.org:8080/16466
To unsubscribe, visit http://gerrit.cloudera.org:8080/settings

Gerrit-Project: kudu
Gerrit-Branch: master
Gerrit-MessageType: deleteVote
Gerrit-Change-Id: I26b81757e48e0b7d5f79582349548f6e9e474d90
Gerrit-Change-Number: 16466
Gerrit-PatchSet: 2
Gerrit-Owner: Alexey Serbin <as...@cloudera.com>
Gerrit-Reviewer: Alexey Serbin <as...@cloudera.com>
Gerrit-Reviewer: Grant Henke <gr...@apache.org>
Gerrit-Reviewer: Kudu Jenkins (120)

[kudu-CR] [util] fix BaseName() on BSD-derived systems

Posted by "Alexey Serbin (Code Review)" <ge...@cloudera.org>.
Hello Kudu Jenkins, Grant Henke, 

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

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

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

Change subject: [util] fix BaseName() on BSD-derived systems
......................................................................

[util] fix BaseName() on BSD-derived systems

basename() is thread-safe on Linux in relatively new glibc
implementations as per its manual page [1].

However, basename() is not thread-safe at least on contemporary
version of Darwin/macOS as per basename() manual page ([2], [3], [4]):

  The basename() function returns a pointer to internal static storage
  space that will be overwritten by subsequent calls.

So, let's use thread-safe basename_r() on macOS. With that, the only
test scenario in file_cache-stress-test no longer fails on macOS.

As a bit of bigger picture, starting FreeBSD 12.0, the basename()
function was reimplemented to store its result in the provided
input buffer [5].

[1] https://www.man7.org/linux/man-pages/man3/basename.3.html
[2] https://www.freebsd.org/cgi/man.cgi?query=basename&sektion=3&manpath=Darwin+7.0.1
[3] https://www.unix.com/man-page/mojave/3/basename/
[4] https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man3/basename.3.html
[5] https://www.freebsd.org/cgi/man.cgi?query=basename&sektion=3&manpath=FreeBSD+12.0-RELEASE

Change-Id: I26b81757e48e0b7d5f79582349548f6e9e474d90
---
M src/kudu/util/path_util.cc
1 file changed, 26 insertions(+), 3 deletions(-)


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

Gerrit-Project: kudu
Gerrit-Branch: master
Gerrit-MessageType: newpatchset
Gerrit-Change-Id: I26b81757e48e0b7d5f79582349548f6e9e474d90
Gerrit-Change-Number: 16466
Gerrit-PatchSet: 2
Gerrit-Owner: Alexey Serbin <as...@cloudera.com>
Gerrit-Reviewer: Grant Henke <gr...@apache.org>
Gerrit-Reviewer: Kudu Jenkins (120)