On Wed, Dec 10, 2014 at 2:31 AM, malcolm <malcolm.kaval...@oracle.com> wrote:
> Hi Colin,
>
> Thanks for the hints around JIRAs.
>
> You are correct errno still exists, however sys_errlist does not.
>
> Hadoop uses a function terror (defined in exception.c) which indexes
> sys_errlist by errno to return the error message from the array. This
> function is called 26 times in various places (in 2.2)
>
> Originally, I thought to replace all calls to terror with strerror, but
> there can be issues with multi-threading (it returns a buffer which can be
> overwritten), so it seemed simpler just to recreate the sys_errlist message
> array.
>
> There is also a multi-threaded version strerror_r where you pass the buffer
> as a parameter, but this would necessitate changing every call to terror
> with mutiple lines of code.

Why don't you just use strerror_r inside terror()?

I wrote that code originally.  The reason I didn't want to use
strerror_r there is because GNU libc provides a non-POSIX definition
of strerror_r, and forcing it to use the POSIX one is a pain.  But you
can do it.  You also will require a thread-local buffer to hold the
return from strerror_r, since it is not guaranteed to be static
(although in practice it is 99% of the time-- another annoyance with
the API).

>
> Sorry, I wasn't clear.
>
> Also, I have been requested to ensure my port is available on 2.4, perceived
> as a more stable release. If I make changes to this branch are they
> automatically available for 2.6, or will I need multiple JIRAs ?

As Steve commented, 2.4 is pretty much "done."  I don't think this
kind of thing would get backported there.  Even getting it in a 2.6
release seems unlikely to me (but I haven't thought about it that
hard).  I would just get the work done, and let it show up in the
release it's ready in.

cheers,
Colin

>
> Thanks,
> Malcolm
>
>
> On 12/10/2014 10:45 AM, Colin McCabe wrote:
>>
>> Hi Malcolm,
>>
>> In general we file JIRAs for particular issues.  So if one issue is
>> handling errlist on Solaris, that might be one JIRA.  Another issue
>> might be handling socket write timeouts on Solaris.  And so on.  Most
>> of these should probably be HADOOP tickets since they sound like they
>> are mostly in the generic hadoop-common code.
>>
>> "solaris does not have errno" seems like a bold statement.  errno is
>> part of POSIX, and Solaris is a POSIX os, right?  Am I way off base on
>> this?
>> I googled around and one of the first results I found talked about
>> errno values on Solaris.
>>
>> http://www.pixelstech.net/article/1413273556-A-trick-of-building-multithreaded-application-on-Solaris
>>   Perhaps I misunderstood what you meant by this statement.
>>
>> Anyway, please file JIRAs for any portability improvements you can think
>> of!
>>
>> best,
>> Colin
>>
>> On Mon, Dec 8, 2014 at 9:09 PM, malcolm <malcolm.kaval...@oracle.com>
>> wrote:
>>>
>>> Hi Colin,
>>>
>>> A short summary of my changes are as follows:
>>>
>>> - Native C source files: added 5,  modified 6, requiring also changes to
>>> CMakeLists.txt. Of course, all changes are "ifdeffed" for Solaris
>>> appropriately and new files, are prefixed with solaris_ as well.
>>>
>>> For example, Solaris does not have errno, or errlist any more which are
>>> used
>>> quite a lot in hadoop native code. I could have replaced all calls to use
>>> strerror instead which would be compatible with Linux, however in the
>>> interests of making minimal changes, I recreated and added these files
>>> from
>>> a running Solaris machine instead.
>>>
>>> Another issue is that Solaris doesn't have the timeout option for
>>> sockets,
>>> so I had to write my own solaris_read routine with timeout and added it
>>> to
>>> DomainSocket.c . A few issues with lz4 on Sparc needed modification, and
>>> some other OS specific issues: getgrouplist, container-executer (from
>>> yarn).
>>>
>>> - Some very minor changes were made to some Java source files (mainly
>>> tests
>>> to get them to pass on Solaris)
>>>
>>> The above changes were made to 2.2, I will recheck everything against the
>>> latest trunk, maybe some fixes aren't needed any more.
>>>
>>> I have generated a single patch file with all changes. Perhaps it would
>>> be
>>> better to file multiple JIRAs for each change, perhaps grouped, one per
>>> issue ? Or should I file a JIRA for each modified source file ?
>>>
>>> Thank you,
>>> Malcolm
>>>
>>>
>>> On 12/08/2014 09:53 PM, Colin McCabe wrote:
>>>>
>>>> Hi Malcolm,
>>>>
>>>> It's great that you are going to contribute!  Please make your patches
>>>> against trunk.
>>>>
>>>> 2.2 is fairly old at this point.  It hasn't been the focus of
>>>> development in more than a year.
>>>>
>>>> We don't use github or pull requests.
>>>>
>>>> Check the section on http://wiki.apache.org/hadoop/HowToContribute
>>>> that talks about "Contributing your work".  Excerpt:
>>>> "Finally, patches should be attached to an issue report in Jira via
>>>> the Attach File link on the issue's Jira. Please add a comment that
>>>> asks for a code review following our code review checklist. Please
>>>> note that the attachment should be granted license to ASF for
>>>> inclusion in ASF works (as per the Apache License ยง5)."
>>>>
>>>> As this says, you attach the patch file to a JIRA that you have
>>>> created, and then hit "submit patch."
>>>>
>>>> I don't think a branch is required for this work since it is just
>>>> build fixes, right?
>>>>
>>>> best,
>>>> Colin
>>>>
>>>>
>>>> On Mon, Dec 8, 2014 at 3:30 AM, malcolm <malcolm.kaval...@oracle.com>
>>>> wrote:
>>>>>
>>>>> I have ported Hadoop  native libraries to Solaris 11 (both Sparc and
>>>>> Intel )
>>>>> Oracle have agreed to release my changes to the community so that
>>>>> Solaris
>>>>> platforms can benefit.
>>>>> Reading the HowToContribute and GitandHadoop documents, I am not 100%
>>>>> clear
>>>>> on how to get my changes into the main tree. I am also a Git(hub)
>>>>> newbie,
>>>>> and was using svn previously.
>>>>>
>>>>> Please let me know if I am going the correct path:
>>>>>
>>>>> 1. I forked Hadoop on Github and downloaded a clone to my development
>>>>> machine.
>>>>>
>>>>> 2. The changes I made were to 2.2.0, can I still add changes to this
>>>>> branch,
>>>>> and hopefully get them accepted or must I migrate my changes to 2.6 ?
>>>>> (On
>>>>> the main Hadoop download page, 2.2 is still listed as the GA version )
>>>>>
>>>>> 3. I understand that I should create a new branch for my changes, and
>>>>> then
>>>>> generate pull requests after uploading them to Github.
>>>>>
>>>>> 4. I also registered  at Jira in the understanding that I need to
>>>>> generate a
>>>>> Jira number for my changes, and to name my branch accordingly ?
>>>>>
>>>>> Does all this make sense ?
>>>>>
>>>>> Thanks,
>>>>> Malcolm
>>>>>
>>>>>
>

Reply via email to