[ 
https://issues.apache.org/jira/browse/HDFS-7207?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14172520#comment-14172520
 ] 

Colin Patrick McCabe commented on HDFS-7207:
--------------------------------------------

bq. Since Status is passed by value in the API as return value, copying a 
string may throw std::bad_alloc and it is very bad to the application.

This is not a problem.  The HDFS Java client behaves the same way: it tries to 
allocate memory, but if it fails, the JVM's out of memory mechanism is invoked. 
 The same thing is happening here, only the C++ out of memory mechanism is 
being invoked.

Most Linux systems can't ever fail to do a memory allocation anyway, because of 
what is called "memory overcommit."  What this means is essentially that the 
system continues to give out memory until there is no more to give, and then 
the "OOM killer" is invoked to kill a process.  So there is no chance of 
getting a null pointer or {{std::bad_alloc}}-- the system never does this.  
Linux systems may still fail very large memory allocations (there is a bit of a 
different policy for those).

> libhdfs3 should not expose exceptions in public C++ API
> -------------------------------------------------------
>
>                 Key: HDFS-7207
>                 URL: https://issues.apache.org/jira/browse/HDFS-7207
>             Project: Hadoop HDFS
>          Issue Type: Sub-task
>            Reporter: Haohui Mai
>            Assignee: Colin Patrick McCabe
>            Priority: Blocker
>         Attachments: HDFS-7207.001.patch
>
>
> There are three major disadvantages of exposing exceptions in the public API:
> * Exposing exceptions in public APIs forces the downstream users to be 
> compiled with {{-fexceptions}}, which might be infeasible in many use cases.
> * It forces other bindings to properly handle all C++ exceptions, which might 
> be infeasible especially when the binding is generated by tools like SWIG.
> * It forces the downstream users to properly handle all C++ exceptions, which 
> can be cumbersome as in certain cases it will lead to undefined behavior 
> (e.g., throwing an exception in a destructor is undefined.)



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to