You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ignite.apache.org by "Vladimir Ozerov (JIRA)" <ji...@apache.org> on 2015/09/21 12:48:04 UTC

[jira] [Created] (IGNITE-1519) Introduce Ignite type configuration.

Vladimir Ozerov created IGNITE-1519:
---------------------------------------

             Summary: Introduce Ignite type configuration.
                 Key: IGNITE-1519
                 URL: https://issues.apache.org/jira/browse/IGNITE-1519
             Project: Ignite
          Issue Type: Task
          Components: general
    Affects Versions: 1.1.4
            Reporter: Vladimir Ozerov
            Assignee: Vladimir Ozerov
            Priority: Critical
             Fix For: ignite-1.5


*Problem*:
Ignite has sophisticated type configuration defined in classes [CacheTypeMetadata|https://github.com/apache/ignite/blob/master/modules/core/src/main/java/org/apache/ignite/cache/CacheTypeMetadata.java], [CacheTypeFieldMetadata|https://github.com/apache/ignite/blob/master/modules/core/src/main/java/org/apache/ignite/cache/CacheTypeFieldMetadata.java], [org.apache.ignite.cache.query.annotations|https://github.com/apache/ignite/tree/master/modules/core/src/main/java/org/apache/ignite/cache/query/annotations].
We are planning to add portable and platform features. Portables will have their own configuration describing how to find fields in serialized object without having a class (see [PortableMarshaller|https://github.com/apache/ignite/blob/master/modules/core/src/main/java/org/apache/ignite/internal/portable/api/PortableMarshaller.java] and [PortableTypeConfiguration|https://github.com/apache/ignite/blob/master/modules/core/src/main/java/org/apache/ignite/internal/portable/api/PortableTypeConfiguration.java]). Platforms will also have type configuration which is passed to native platform to map portable types (see [PlatformDotNetPortableTypeConfiguration|https://github.com/apache/ignite/blob/master/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetPortableTypeConfiguration.java]).
Trying to configure all these stuff will be a nightmare for users.

*Goal*:
Simplify and unify Ignite types system to make it more user-friendly. 

*Considerations*:
1) Backward compatibility must be preserved.
2) Four interested parties must be considered: cache queries, JDBC store, portables, platforms.
3) Per-cache configuration must stay because different caches may need to interpret the same type differently (e.g. create index in cache A, but do not do that in cache B).
4) CacheTypeMetadata is essentially a pair of key and value types.
5) PortableTypeConfiguration is configured for either single class or all classes in some package.

*Raw design proposal*:
1) Define a new property in IgniteConfiguration "typesConfiguration" accepting collection of objects "TypeConfiguration".
2) TypeConfiguration structure:
{code}
name           : String
fields         : Map<String, Type>
affKeyField    : String
portableConfig : TypePortableConfig
dotNetConfig   : TypeDotNetConfiguration
{code}
"name" is type name as it is used everywhere in the system.
"fields" is a map from field name to field type. Must be provided at least if queries or POJO store is used. When defined, we register them in portable metadata on startup if type is portable.
"affKeyField" name of affinity key field, used for query colocation and in portables.
"portableConfig" is what PortableTypeConfiguration currently is.
"dotNetConfig" is platform-specific configuration for .Net, e.g. assembly name.

3) CacheTypeMetadata stay in CacheConfiguration but is simplified, because we no longer need to define field classes. Normally user will only define several sets or varargs (not maps!) of field names for indexes and query fields.



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