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)