On Dec 14, 2012, at 2:56 PM, Tristan Tarrant <ttarr...@redhat.com> wrote:

> I would really like ISPN-2281 to be solved by the proper solution, i.e. 
> attach any additional metadata required by the servers (or any other data 
> "enricher") to the InternalCacheEntry and not as part of the value itself. 
> Metadata would be some kind of sparse structure whose values could also be    
>    inherited implicitly by Cache-level metadata (to save memory).

^ +1 - I think that would get rid of unnecessary wrapper values (which get 
wrapped again in ICE…)  

> Let's think about data typing: "a string is a string is a string", and not 
> some weirdly marshalled byte array (which may be influenced by Marshaller, 
> protocol value wrapper, phase of the moon, etc). Protocols would say "this is 
> a string" (e.g. REST via Content-type: text/plain, InVM by just storing a 
> java.lang.String) and the server would store it in an "as-native-as-possible" 
> format, recording the type along with it. When someone retrieves it it needs 
> to be translated to something the client understands. Obviously if I'm going 
> to have a Cache of Strings, that metadata would be "global" to the cache and 
> entries would not have that information.

^ Somehow related to this, Tristan made an interesting suggestion last week wrt 
Hot Rod key type. Right now this is a ByteArrayKey, which wraps an array and 
provides content based equals() implementation.

It would be interesting to allow byte[] to be stored as keys directly, and 
instead do the comparison via some Comparator implementation. This would get 
rid of the wrapper class.

I will add a note to ISPN-2281 on this.

Cheers,

> Was this ever planned ? Canned ? Banned ?
> 
> Tristan
> 
> On 12/14/2012 01:14 PM, Manik Surtani wrote:
>> Even then, #2 would only be a temporary solution until we have #4, right?  
>> Would https://issues.jboss.org/browse/ISPN-2281 help in any way?
>> 
>> - M
>> 
>> On 11 Dec 2012, at 17:37, Dennis Reed <der...@redhat.com> wrote:
>> 
>>> I don't like #1.  Seems more complicated, harder to maintain & debug than 
>>> the others.
>>> 
>>> In my opinion the best option would be #4 (eliminate the different 
>>> formats), but that probably can't be done in a minor release?
>>> 
>>> Between 2 and 3, I'd prefer #2, handling it in the base class so it's 
>>> automatically inherited by any custom classes that extend it.
>>> Since the use case isn't limited to rolling upgrades; you could have a 
>>> HotRod cache with a full-time RemoteCacheStore.
>>> 
>>> -Dennis
>>> 
>>> On 12/11/2012 07:02 AM, Tristan Tarrant wrote:
>>>> So,
>>>> I thought we had everything ready to go for HotRod rolling upgrades:
>>>> 
>>>>    • have HotRod server full of data (the "source")
>>>>    • configure a new HotRod server (the "target") with a RemoteCacheStore 
>>>> pointing to the "source" (using "rawValues")
>>>>    • clients switch over to the "target" server which on cache misses 
>>>> should seamlessly fetch entries from the "source"
>>>>    • issue a "dump keys" on the source
>>>>    • fetch the "dumped keys" from the target
>>>>    • disable the RCS on the target and switch off the "source" for good
>>>>    • PROFIT$$$
>>>> Unfortunately there is a teeny tiny flaw in the plan: entries in a 
>>>> HotRod-managed cache are ByteArrayKey/CacheValue pairs and unfortunately, 
>>>> when the "target" reads from the RCS they get unwrapped into their byte[] 
>>>> equivalents.
>>>> The solutions we have are:
>>>>    • have a special marshaller placed on the RemoteCacheStore's 
>>>> RemoteCacheManager which rewraps the entries. Unfortunately marshallers 
>>>> can't distinguish between keys and values, so this would probably require 
>>>> some horrid ThreadLocal trickery
>>>>    • Add a new option to RemoteCacheStore so that it rewraps entries in 
>>>> the ByteArrayKey/CacheValue format. Unfortunately the CacheValue class is 
>>>> part of server-core, but the dependency could be made optional, and in the 
>>>> context of the Rolling Upgrade scenario it is a non-issue, since it will 
>>>> be in the classpath
>>>>    • Introduce a new MigrationRemoteCacheStore which does the same as the 
>>>> above, but without changing RCS itself.
>>>> My personal favourite is number 2, but I trust your better judgement.
>>>> I think these are merely workarounds and we should have a better way for 
>>>> "entry wrappers" (such as the cache servers) to "localize" the entries for 
>>>> their own particular needs. Also I believe we need a better way to attach 
>>>> metadata to entries in a portable way so that we don't need these value 
>>>> wrappers.
>>>> Tristan
>>>> 
>>>> _______________________________________________
>>>> 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
>> 
>> --
>> 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
> 
> _______________________________________________
> 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

Reply via email to