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

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

Hi Zhanwei,

The full text of the Google Coding style says "On their face, the benefits of 
using exceptions outweigh the costs, especially in new projects."  Then it goes 
on to explain why exceptions in C\+\+ are not really a good idea.  I realize 
this is a tricky verbal construction.  "On their face" means "at first glance" 
or "if we did not look deeper, we would think that..."

The reality is that exceptions in C\+\+ are just a bad idea.  Most people who 
have worked with really big C++ codebases share this belief.  The LLVM / Clang 
compiler doesn't use exceptions, nor does Firefox's C++ code base.  Nor does 
the V8 Javascript engine, or the Chrome browser, LevelDB, the protobuf 
compiler, or Cloudera Impala.

bq. blocksize is 64bit integer in JAVA code and JAVA API. I cannot find any 
reason to restrict it to 32bit in C API.

I agree with you that the API is poorly designed.  It should have been an 
{{int64_t}} to match the Java code, not a 32-bit number.

But unfortunately, changing the type is a compatibility-breaking change.  All 
existing applications will break if we change this.  And the way that they will 
break is undefined.  The library will try to interpret a 32-bit number on the 
stack or in a register as 64-bit.  This could result in garbage being used for 
the block size.  It is like casting a structure of one type to another.

We cannot assume that all applications will be recompiled every time libhdfs 
changes.  It must maintain backwards compatibility at a binary level.  Adding 
new functions is fine, but changing the types in existing ones is not OK.

Once this branch is merged, we can make a change or two in Hadoop 3.x.  We 
should get rid of time_t in seconds as well, and just use a 64-bit type that is 
in milliseconds.  But please, let's not open that can of worms right now, or 
else we will not be able to merge this to Hadoop 2.x.

It's very rare for people to want block sizes above 2 GB anyway.  They were 
broken in HDFS for a long time, and nobody noticed (although it was fixed 
recently).  Please let's just leave this alone for now.  I would say, open a 
JIRA against trunk (not this branch) to fix it in the Hadoop 3.0 release.

> Implement C interface for libhdfs3
> ----------------------------------
>
>                 Key: HDFS-7018
>                 URL: https://issues.apache.org/jira/browse/HDFS-7018
>             Project: Hadoop HDFS
>          Issue Type: Sub-task
>          Components: hdfs-client
>            Reporter: Zhanwei Wang
>            Assignee: Zhanwei Wang
>         Attachments: HDFS-7018-pnative.002.patch, 
> HDFS-7018-pnative.003.patch, HDFS-7018-pnative.004.patch, HDFS-7018.patch
>
>
> Implement C interface for libhdfs3



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

Reply via email to