[ 
https://issues.apache.org/jira/browse/IGNITE-51?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Semen Boikov resolved IGNITE-51.
--------------------------------
    Resolution: Fixed

Implemented.

> Support store-by-value mode
> ---------------------------
>
>                 Key: IGNITE-51
>                 URL: https://issues.apache.org/jira/browse/IGNITE-51
>             Project: Ignite
>          Issue Type: Sub-task
>          Components: cache
>            Reporter: Semen Boikov
>            Assignee: Semen Boikov
>            Priority: Blocker
>             Fix For: sprint-2
>
>
> # Need to introduce interface {{CacheObject}} and {{KeyCacheObject}} that 
> will hide the implementation details of cached object representation.
> {code}
> public interface CacheObject {
>     public <T> T value(GridCacheContext ctx);
>     public <T> T getField(String name);
>     public byte[] valueBytes();
> }
> public interface KeyCacheObject extends CacheObject {
>     public int hashCode();
> }
> {code}
> Implementation of this class must always store serialized form of the object 
> and should be optionally store deserialized form of the object  if 
> {{copyOnGet}} is {{false}}. Cache object must never keep the original 
> reference of the user object.
> # Internal cache API should use {{CacheObject}} exclusively and wrap/unwrap 
> it to/from user objects on the very top-level-proxy level (unwrap is for 
> sure, wrap is subject to discuss).
> # Inside {{GridCacheMapEntry}} fields {{key}}, {{keyBytes}}, {{value}} and 
> {{valueBytes}} should be replaced with corresponding {{CacheObject}} 
> references for key and value.
> # Same goes for other cache classes that were using keys, values or thereof 
> bytes implicitly ({{IgniteTxEntry}}, {{GridCacheEntryInfo}}, etc)
> # Transformation of user object to a cache object in Ignite should be 
> implemented in {{GridPortableProcessor}} which should be renamed to 
> {{IgniteCacheObjectProcessor}}. {{IgniteCacheSerializarionManager}} should be 
> removed.
> # Marshalling of {{CacheObject}} should take advantage of portable 
> marshalling mechanism and always use only the serialized bytes stored in the 
> {{CacheObject}}. In current implementation {{CacheObjectImpl}} should extend 
> {{MessageAdapter}} (UPDATE WILL FOLLOW).
> # {{storeValueBytes}} flag should be removed from configuration. 
> # {{binaryEquality}} flag should be introduced to cache configuration 
> (default true). When true, cache keys should not be deserialized and binary 
> form of the object altogether with the hash code should be used to check key 
> equality. {{GridCacheConcurrentMap}} should work explicitly with 
> {{CacheObject}} only.
> # {{copyOnGet}} flag should be added to cache configuration (default true). 
> When true, new value should be deserialized and returned to user on each 
> cache operation implying return value. Ignite should maintain a list of known 
> immutable types (such as {{Integer}}, {{String}}) for which {{copyOnGet}} is 
> ignored. New annotation {{@IgniteImmutable}} should be introduced to mark 
> immutable types for which this flag is also ignored.
> # When indexing is enabled, {{CacheObject}} should always keep deserialized 
> version of user object. {{getField()}} method should be used in indexing to 
> obtain indexed fields via reflection. {{getField()}} should maintain 
> necessary reflection cache to keep current performance level. See 
> {{IgniteH2Indexing}} for details.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to