[ https://issues.apache.org/jira/browse/ZOOKEEPER-2841?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16090919#comment-16090919 ]
Hadoop QA commented on ZOOKEEPER-2841: -------------------------------------- +1 overall. GitHub Pull Request Build +1 @author. The patch does not contain any @author tags. +1 tests included. The patch appears to include 12 new or modified tests. +1 javadoc. The javadoc tool did not generate any warning messages. +1 javac. The applied patch does not increase the total number of javac compiler warnings. +1 findbugs. The patch does not introduce any new Findbugs (version 3.0.1) warnings. +1 release audit. The applied patch does not increase the total number of release audit warnings. +1 core tests. The patch passed core unit tests. +1 contrib tests. The patch passed contrib unit tests. Test results: https://builds.apache.org/job/PreCommit-ZOOKEEPER-github-pr-build/884//testReport/ Findbugs warnings: https://builds.apache.org/job/PreCommit-ZOOKEEPER-github-pr-build/884//artifact/trunk/build/test/findbugs/newPatchFindbugsWarnings.html Console output: https://builds.apache.org/job/PreCommit-ZOOKEEPER-github-pr-build/884//console This message is automatically generated. > ZooKeeper public include files leak porting changes > --------------------------------------------------- > > Key: ZOOKEEPER-2841 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2841 > Project: ZooKeeper > Issue Type: Bug > Components: c client > Environment: Windows 10 with Visual Studio 2017 > Reporter: Andrew Schwartzmeyer > Assignee: Andrew Schwartzmeyer > Labels: windows > > The fundamental problem is that the port of the C client to Windows is now > close to six years old, with very few updates. This port leaks a lot of > changes that should be internal to ZooKeeper, and many of those changes are > simply no longer relevant. The correct thing to do is attempt to refactor the > Windows port for new versions of ZooKeeper, removing dead/unneeded porting > code, and moving dangerous porting code to C files instead of public headers. > Two primary examples of this problem are > [ZOOKEEPER-2491|https://issues.apache.org/jira/browse/ZOOKEEPER-2491] and > [MESOS-7541|https://issues.apache.org/jira/browse/MESOS-7541]. > The first issue stems from this ancient porting code: > {noformat} > #define snprintf _snprintf > {noformat} > in > [winconfig.h|https://github.com/apache/zookeeper/blob/ddf0364903bf7ac7cd25b2e1927f0d9d3c7203c4/src/c/include/winconfig.h#L179]. > Newer versions of Windows C libraries define {{snprintf}} as a function, and > so it cannot be redefined. > The second issue comes from this undocumented change: > {noformat} > #undef AF_INET6 > {noformat} > again in > [winconfig.h|https://github.com/apache/zookeeper/blob/ddf0364903bf7ac7cd25b2e1927f0d9d3c7203c4/src/c/include/winconfig.h#L169] > which breaks any library that uses IPv6 and {{winsock2.h}}. > Furthermore, the inclusion of the following defines and headers causes > terrible problems for consuming libraries, as they leak into ZooKeeper's > public headers: > {noformat} > #define _CRT_SECURE_NO_WARNINGS > #define WIN32_LEAN_AND_MEAN > #include <Windows.h> > #include <Winsock2.h> > #include <winstdint.h> > #include <process.h> > #include <ws2tcpip.h> > {noformat} > Depending on the order that a project includes or compiles files, this may or > may not cause {{WIN32_LEAN_AND_MEAN}} to become unexpectedly defined, and > {{windows.h}} to be unexpectedly included. This problem is exacberated by the > fact that the {{winsock2.h}} and {{windows.h}} headers are order-dependent > (if you read up on this, you'll see that defining {{WIN32_LEAN_AND_MEAN}} was > meant to work-around this). > Going forward, porting changes should live next to where they are used, > preferably in source files, not header files, so they remain contained. -- This message was sent by Atlassian JIRA (v6.4.14#64029)