Hello Friends,

I have a diff up that substantially changes our API, 
https://issues.apache.org/jira/browse/GIRAPH-684, which I would like to get 
people's vote on.

Basically the question is whether we think that forcing the graph types 
(I,V,E,M1,M2) to be Writable/Comparable is the right thing to do.
This requirement means we cannot easily externalize how a type gets serialized 
(for example if you wanted to test out different ways of serializing an 
integer).
It also makes it more difficult to implement things like the Jython integration 
because every Jython object must be constantly wrapped/unwrapped in a Writable 
wrapper in order to conform to Giraph. Personally I have never liked the fact 
that we have serialization tied to the object in terms of code design patterns, 
but that is just me.
The diff I have up removes the requirement of IVEMM being Writable, and allows 
you to specify, via a separate parameter, the serializer to use for each type. 
Note that it is completely backwards compatible. That is, if we detect that you 
are actually using a Writable then we stick in an internal WritableSerializer 
(which just calls readFields()/write()) and you do not need to specify anything.

The major con of removing the Writable interface is it makes things less clear 
for our users. So, the potential solutions to vote on here are:

1) Leave things as they are. Let Jython be ugly. Serialization stays tied to 
the object. No external serializers.
2) Remove Writable everywhere (as diff currently does). Explain to users that 
they can use Writable or define their own Serializer.
3) Remove Writable _internally_ only. Keep the outermost-facing Java API 
(Computation, VertexInputFormat, etc) still allowing Writable only, but 
internally no Writable required. This allows Jython and any expert users to 
work with the more internal types that have no type restrictions yet leaves our 
Java API Writable. Don't mention external serializers to average users so our 
story stays the same. Essentially this option makes things a bit more confusing 
for developers instead of users.

We have discussed this at Facebook (Avery, Alessandro, Maja and myself) for a 
while, and would like to get your opinions as well since this is a large change.
What do folks think? Please weigh in.

Thanks,
- Nitay

Reply via email to