Since the map type is important to me, i decided to use proto3, so i moved 
hashLong method from  com.google.protobuf.Internal.hashLong/hashEnum/xx to 
GeneratedMessage in proto3 source code and solved the problem,  however, to 
maintain a special version by myself is really a bad idea. 
I do think it's  very import to keep full backward compatibility with code 
generated by proto2 since so many widely used opensource libs depends on 
protobuf as i have mentioned before,   especially protobuf2.5.
Thanks

在 2015年9月7日星期一 UTC+8下午3:05:50,sam sun写道:
>
> I knew it, because yarn depends on proto2 but my lib depends on proto3. 
> The reason is that proto3 runtime doesn't keep backward compatibility. The 
> problem can be reproduced if set option java_generate_equals_and_hash = 
> true with proto2.
>
> I hope msg with proto2 still work with proto3 jar since proto2 has been 
> widely used in opensource system like yarn, hbase, etc.
>
>
>
> 在 2015年9月7日星期一 UTC+8下午2:31:04,Feng Xiao写道:
>>
>> On Sat, Sep 5, 2015 at 9:08 PM, sam sun <[email protected]> wrote:
>>
>>> I use proto3 to log user event and then run a mapreduce to stat same 
>>> metrics. But it reports an error:
>>>
>>> Exception in thread "Thread-2" java.lang.NoSuchMethodError: 
>>> org.apache.hadoop.yarn.proto.YarnProtos$LocalResourceProto.hashLong(J)I
>>> at 
>>> org.apache.hadoop.yarn.proto.YarnProtos$LocalResourceProto.hashCode(YarnProtos.java:11555)
>>> at 
>>> org.apache.hadoop.yarn.api.records.impl.pb.LocalResourcePBImpl.hashCode(LocalResourcePBImpl.java:62)
>>> at java.util.HashMap.hash(HashMap.java:338)
>>> at java.util.HashMap.put(HashMap.java:611)
>>>
>>> The problem is proto3 doesn't keep backward compatibility with proto2. 
>>> hashLong is no longer exists in generated code with proto3. Now I faced a 
>>> deed situation that neither proto2 nor proto3 can be loaded when i run a 
>>>  mapreduce job.
>>>
>> It seems the problem is that your binary depends on both proto2 Java 
>> runtime and also proto3 Java runtime. One of them will be shadowed by the 
>> other and you will see such runtime errors. The suggestion is to stick with 
>> one version through out your project (including all your project's 
>> dependencies).
>>  
>>
>>>
>>>
>>> -- 
>>> You received this message because you are subscribed to the Google 
>>> Groups "Protocol Buffers" group.
>>> To unsubscribe from this group and stop receiving emails from it, send 
>>> an email to [email protected].
>>> To post to this group, send email to [email protected].
>>> Visit this group at http://groups.google.com/group/protobuf.
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>
>>

-- 
You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/protobuf.
For more options, visit https://groups.google.com/d/optout.

Reply via email to