On Apr 8, 2013, at 1:46 PM, Sanne Grinovero <sa...@infinispan.org> wrote:
> I fail to understand the purpose of the feature then. What prevents me > to use the existing code today just storing some extra fields in my > custom values? ^ Nothing, this is doable. > What do we get by adding this code? ^ You avoid the need of the wrapper since we already have a wrapper internally, which is ICE. ICEs can already keep versions around, why do I need a wrapper class that stores a version for Hot Rod server? Down the line, we could decide to leave the metadata around to better support use cases like this: https://issues.jboss.org/browse/ISPN-506 https://community.jboss.org/wiki/VersioningDesignDocument - The tombstones that Max refers to could potentially be tombstone ICEs with only metadata info. Cheers, > > Sanne > > On 8 April 2013 12:40, Galder Zamarreño <gal...@redhat.com> wrote: >> >> On Apr 8, 2013, at 1:26 PM, Sanne Grinovero <sa...@infinispan.org> wrote: >> >>> On 8 April 2013 12:06, Galder Zamarreño <gal...@redhat.com> wrote: >>>> >>>> On Apr 8, 2013, at 12:56 PM, Sanne Grinovero <sa...@infinispan.org> wrote: >>>> >>>>> >>>>> >>>>> >>>>> On 8 April 2013 11:44, Galder Zamarreño <gal...@redhat.com> wrote: >>>>> >>>>> On Apr 8, 2013, at 12:35 PM, Galder Zamarreño <gal...@redhat.com> wrote: >>>>> >>>>>> >>>>>> On Apr 8, 2013, at 11:17 AM, Manik Surtani <msurt...@redhat.com> wrote: >>>>>> >>>>>>> All sounds very good. One important thing to consider is that the >>>>>>> reference to Metadata passed in by the client app will be tied to the >>>>>>> ICE for the entire lifespan of the ICE. You'll need to think about a >>>>>>> defensive copy or some other form of making the Metadata immutable (by >>>>>>> the user application, at least) the moment it is passed in. >>>>>> >>>>>> ^ Excellent point, it could be a nightmare if users could change the >>>>>> metadata reference by the ICE at will. I'll have a think on how to best >>>>>> achieve this. >>>>> >>>>> ^ The metadata is gonna have to be marshalled somehow to ship to other >>>>> nodes, so that could be a way to achieve it, by enforcing this somehow. >>>>> When the cache receives it, it can marshaller/unmarshall it to make a copy >>>>> >>>>> One way would be to make Metadata extend Serializable, but not keen on >>>>> that. Another would be to somehow force the interface to define the >>>>> Externalizer to use (i.e. an interface method like getExternalizer()), >>>>> but that's akward when it comes to unmarshalling… what about forcing the >>>>> Metadata object to be provided with a @SerializeWith annotation? >>>>> >>>>> Why is getExternalizer() awkward for unmarshalling? >>>> >>>> ^ Because you don't have an instance yet, so what's the Externalizer for >>>> it? IOW, there's no much point to doing that, simply register it depending >>>> on your desire: >>>> https://docs.jboss.org/author/display/ISPN/Plugging+Infinispan+With+User+Defined+Externalizers >>> >>> That's what I would expect. >>> >>>> >>>>> I would expect you to have the marshaller already known during >>>>> deserialization. >>>> >>>> You would, as long as you follow the instructions in >>>> https://docs.jboss.org/author/display/ISPN/Plugging+Infinispan+With+User+Defined+Externalizers >>>> >>>>> Agreed that extensing Serializable is not a good idea. >>>>> >>>>> Are you thinking about the impact on CacheStore(s) and state transfer? >>>> >>>> ^ What about it in particular? >>>> >>>>> Eviction of no longer used metadata ? >>>> >>>> ^ Since the metadata is part of the entry, it'd initially go when the >>>> entry is evicted. We might wanna leave it around in some cases… but it'd >>>> be for other use cases. >>> >>> I thought the plan was to have entries refer to the metadata, but that >>> different entries sharing the same metadata would point to the same >>> instance. >> >> ^ Could be, but most likely not. >> >>> So this metadata needs to be stored separately in the CacheStore, >>> preloaded as appropriate, transferred during state transfer, >>> passivated when convenient and cleaned up when no longer referred to. >> >> ^ Well, it's part of the internal cache entry, so it'd be treated just like >> ICE. >> >>> Am I wrong? Seems you plan to store a copy of the metadata within each ICE. >> >> ^ The idea is to store it alongside right now, but maybe at some point it >> might make sense to leave it around (i.e. for 2LC use case), but this won't >> be done yet. >> >>> >>> >>>> >>>> I'm also considering separating the serialization/marshalling concerns >>>> from the defensive copying concerns. IOW, add a copy() method to the >>>> Metadata interface, or have a separate interface for those externally >>>> provided objects that require to be defensive copied. IOW, do something >>>> like what Scala Case Classes do with their copy() method, but without the >>>> issues of clone… I need to investigate this further to come up with a nice >>>> solution. >>>> >>>> One positive side to splitting both concerns is speed. A Metadata >>>> implementation might have ways to make a copy of itself which are more >>>> efficient than marshalling/unmarshalling. >>>> >>>> Thoughts? >>>> >>>>> >>>>> Sanne >>>>> >>>>> >>>>> Any other ideas? >>>>> >>>>>> >>>>>> Cheers, >>>>>> >>>>>>> >>>>>>> On 8 Apr 2013, at 09:24, Galder Zamarreño <gal...@redhat.com> wrote: >>>>>>> >>>>>>>> Hi all, >>>>>>>> >>>>>>>> As mentioned in >>>>>>>> http://lists.jboss.org/pipermail/infinispan-dev/2013-March/012348.html, >>>>>>>> in paralell to the switch to Equivalent* collections, I was also >>>>>>>> working on being able to pass metadata into Infinispan caches. This is >>>>>>>> done to better support the ability to store custom metadata in >>>>>>>> Infinispan without the need of extra wrappers. So, the idea is that >>>>>>>> InternalCacheEntry instances will have a a reference to this Metadata. >>>>>>>> >>>>>>>> One of that metadata is version, which I've been using as test bed to >>>>>>>> see if clients could pass succesfully version information via >>>>>>>> metadata. As you already know, Hot Rod requires to store version >>>>>>>> information. Before, this was stored in a class called CacheValue >>>>>>>> alongside the value itself, but the work I've done in [1], this is >>>>>>>> passed via the new API I've added in [2]. >>>>>>>> >>>>>>>> So, I'd like to get some thoughts on this new API. I hope that with >>>>>>>> these new put/replace versions, we can get rid of the nightmare which >>>>>>>> is all the other put/replace calls taking lifespan and/or maxIdle >>>>>>>> information. In the end, I think there should be two basic puts: >>>>>>>> >>>>>>>> - put(K, V) >>>>>>>> - put(K, V, Metadata) >>>>>>>> >>>>>>>> And their equivalents. >>>>>>>> >>>>>>>> IMPORTANT NOTE 1: The implementation details are bound to change, >>>>>>>> because the entire Metadata needs to be stored in InternalCacheEntry, >>>>>>>> not just version, lifespan..etc. I'll further develop the >>>>>>>> implementation once I get into adding more metadata, i.e. when working >>>>>>>> on interoperability with REST. So, don't pay too much attention to the >>>>>>>> implementation itself, focus on the AdvancedCache API itself and let's >>>>>>>> refine that. >>>>>>>> >>>>>>>> IMPORTANT NOTE 2: The interoperability work in commit in [1] is WIP, >>>>>>>> so please let's avoid discussing it in this email thread. Once I have >>>>>>>> a more final version I'll send an email about it. >>>>>>>> >>>>>>>> Apart from working on enhancements to the API, I'm now carry on >>>>>>>> tackling the interoperability work with aim to have an initial version >>>>>>>> of the Embedded <-> Hot Rod interoperability as first step. Once >>>>>>>> that's in, it can be released to get early feedback while the rest of >>>>>>>> interoperability modes are developed. >>>>>>>> >>>>>>>> Cheers, >>>>>>>> >>>>>>>> [1] >>>>>>>> https://github.com/galderz/infinispan/commit/a35956fe291d2b2dc3b7fa7bf44d8965ffb1a54d >>>>>>>> [2] >>>>>>>> https://github.com/galderz/infinispan/commit/a35956fe291d2b2dc3b7fa7bf44d8965ffb1a54d#L10R313 >>>>>>>> -- >>>>>>>> Galder Zamarreño >>>>>>>> gal...@redhat.com >>>>>>>> twitter.com/galderz >>>>>>>> >>>>>>>> Project Lead, Escalante >>>>>>>> http://escalante.io >>>>>>>> >>>>>>>> Engineer, Infinispan >>>>>>>> http://infinispan.org >>>>>>>> >>>>>>>> >>>>>>>> _______________________________________________ >>>>>>>> infinispan-dev mailing list >>>>>>>> infinispan-dev@lists.jboss.org >>>>>>>> https://lists.jboss.org/mailman/listinfo/infinispan-dev >>>>>>> >>>>>>> -- >>>>>>> Manik Surtani >>>>>>> ma...@jboss.org >>>>>>> twitter.com/maniksurtani >>>>>>> >>>>>>> Platform Architect, JBoss Data Grid >>>>>>> http://red.ht/data-grid >>>>>>> >>>>>>> >>>>>>> _______________________________________________ >>>>>>> infinispan-dev mailing list >>>>>>> infinispan-dev@lists.jboss.org >>>>>>> https://lists.jboss.org/mailman/listinfo/infinispan-dev >>>>>> >>>>>> >>>>>> -- >>>>>> Galder Zamarreño >>>>>> gal...@redhat.com >>>>>> twitter.com/galderz >>>>>> >>>>>> Project Lead, Escalante >>>>>> http://escalante.io >>>>>> >>>>>> Engineer, Infinispan >>>>>> http://infinispan.org >>>>>> >>>>> >>>>> >>>>> -- >>>>> Galder Zamarreño >>>>> gal...@redhat.com >>>>> twitter.com/galderz >>>>> >>>>> Project Lead, Escalante >>>>> http://escalante.io >>>>> >>>>> Engineer, Infinispan >>>>> http://infinispan.org >>>>> >>>>> >>>>> _______________________________________________ >>>>> infinispan-dev mailing list >>>>> infinispan-dev@lists.jboss.org >>>>> https://lists.jboss.org/mailman/listinfo/infinispan-dev >>>>> >>>>> _______________________________________________ >>>>> infinispan-dev mailing list >>>>> infinispan-dev@lists.jboss.org >>>>> https://lists.jboss.org/mailman/listinfo/infinispan-dev >>>> >>>> >>>> -- >>>> Galder Zamarreño >>>> gal...@redhat.com >>>> twitter.com/galderz >>>> >>>> Project Lead, Escalante >>>> http://escalante.io >>>> >>>> Engineer, Infinispan >>>> http://infinispan.org >>>> >>>> >>>> _______________________________________________ >>>> infinispan-dev mailing list >>>> infinispan-dev@lists.jboss.org >>>> https://lists.jboss.org/mailman/listinfo/infinispan-dev >>> >>> _______________________________________________ >>> infinispan-dev mailing list >>> infinispan-dev@lists.jboss.org >>> https://lists.jboss.org/mailman/listinfo/infinispan-dev >> >> >> -- >> Galder Zamarreño >> gal...@redhat.com >> twitter.com/galderz >> >> Project Lead, Escalante >> http://escalante.io >> >> Engineer, Infinispan >> http://infinispan.org >> >> >> _______________________________________________ >> infinispan-dev mailing list >> infinispan-dev@lists.jboss.org >> https://lists.jboss.org/mailman/listinfo/infinispan-dev > > _______________________________________________ > infinispan-dev mailing list > infinispan-dev@lists.jboss.org > https://lists.jboss.org/mailman/listinfo/infinispan-dev -- Galder Zamarreño gal...@redhat.com twitter.com/galderz Project Lead, Escalante http://escalante.io Engineer, Infinispan http://infinispan.org _______________________________________________ infinispan-dev mailing list infinispan-dev@lists.jboss.org https://lists.jboss.org/mailman/listinfo/infinispan-dev