[infinispan-dev] HotRodMarshaller interface

Galder Zamarreño galder at redhat.com
Wed Jul 14 02:08:57 EDT 2010


Manik,

WRT StreamingMarshaller in 4.1.x, shouldn't this method live in Marshaller instead?

ByteBuffer objectToBuffer(Object o) throws IOException;

Cheers,

On Jul 9, 2010, at 12:43 PM, Mircea Markus wrote:

> 
> On 8 Jul 2010, at 14:57, Manik Surtani wrote:
> 
>> Guys,
>> 
>> I just created ISPN-532 (HotRodMarshaller needs cleaning up) targeted for Radegast CR2 and Final.  I know it is late in the day to be making API changes in an interface, but I would much rather this is done right prior to being baked into Final and hence eternity.  :)
>> 
>> 	http://fisheye.jboss.org/browse/Infinispan/trunk/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/HotRodMarshaller.java?r=1850
>> 
>> So I have 3 issues to address with this interface.
>> 
>> 1.  Methods on the interface
>> 
>> The purpose of this is simple: the 2 methods, readObject() and marshallObject() are meant to perform diametrically opposed tasks (byte[] -> object in one case, object -> byte[] in the other) but the names are far from that.
>> 
>> I propose either of the following:
>> 
>> 	1) readObject() and writeObject()
>> 	2) Simply, read() and write()
>> 	3) Or if we want to follow org.infinispan.marshall.Marshaller conventions, objectFromByteBuffer(), objectToByteBuffer()
>> 
>> My preference would be (3).
>> 
>> 
>> 2.  Interface name and package
>> 
>> Further, any reason why we call this HotRodMarshaller?  Isn't it just a marshaller that serializes arbitrary objects <--> byte[] and should contain no HotRod-specific logic?  I can see why we did not use the org.infinispan.marshall.Marshaller interface for this (too complex?) but perhaps we could create a org.infinispan.marshall.BasicMarshaller which just contains objectFromByteBuffer() and objectToByteBuffer(), and Marshaller can extend BasicMarshaller for Infinispan's internals and HotRod clients can directly implement BasicMarshaller?
>> 
>> This would allow people who write custom marshallers to reuse them for both the HotRod client as well as for Infinispan's internal marshalling.
> +1
> We can reuse the optimised marshalling logic from core this way, so that makes a lot of sense.
> I'm thinking a better name would be ByteArrayMarshaller/BitesMarshaller (vs BasicMarshaller) - but obviously I'm not good with the names (see 1).
>> 
>> 3.  isKeyHint parameter on marshallObject()
>> 
>> What is this for?  
> Here is the kind of application that would benefit from this: small keys with large values (e.g. an mp3 files kept in the grid, where file name is the key and the file is the value, or the gridFS). 
> You are allowed to specify an default size for ExposedByteArrayOutputStream's underlaying byte[]. When this is exceeded the byte[] "doubles".
> So for the above example specifying an 128bytes default value would be optimal for key serialization, but rather bad for values serialization: underlying byte[] would be created several times.
> Also setting an value of e.g. 4MB for the default value would be not good for the keys, for same reasons.
>> And surely there is a more elegant/generic way to achieve this?  
> Perhaps overloading objectToByteBuffer(byte[] estimatedSize) ?
>> 
>> Cheers
>> Manik
>> 
>> --
>> Manik Surtani
>> manik at jboss.org
>> Lead, Infinispan
>> Lead, JBoss Cache
>> http://www.infinispan.org
>> http://www.jbosscache.org
>> 
>> 
>> 
>> 
>> 
>> _______________________________________________
>> infinispan-dev mailing list
>> infinispan-dev at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/infinispan-dev
> 
> 
> _______________________________________________
> infinispan-dev mailing list
> infinispan-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/infinispan-dev

--
Galder Zamarreño
Sr. Software Engineer
Infinispan, JBoss Cache




More information about the infinispan-dev mailing list