You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by pt...@apache.org on 2016/08/02 15:38:00 UTC

[1/2] ignite git commit: IGNITE-3497 .NET: Improve IgniteConfigurationSection.xsd: add missing properties, enums, docs.

Repository: ignite
Updated Branches:
  refs/heads/master 04eb59e7b -> 5f0db73fb


http://git-wip-us.apache.org/repos/asf/ignite/blob/5f0db73f/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfigurationSection.xsd
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfigurationSection.xsd b/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfigurationSection.xsd
index 24eaa30..47c3a98 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfigurationSection.xsd
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfigurationSection.xsd
@@ -24,44 +24,168 @@
     xmlns:mstns="http://ignite.apache.org/schema/dotnet/IgniteConfigurationSection"
     xmlns:xs="http://www.w3.org/2001/XMLSchema">
 
+    <xs:simpleType name="cacheMode" final="restriction">
+        <xs:restriction base="xs:string">
+            <xs:enumeration value="Local" />
+            <xs:enumeration value="Replicated" />
+            <xs:enumeration value="Partitioned" />
+        </xs:restriction>
+    </xs:simpleType>
+
+    <xs:simpleType name="cacheAtomicityMode" final="restriction">
+        <xs:restriction base="xs:string">
+            <xs:enumeration value="Transactional" />
+            <xs:enumeration value="Atomic" />
+        </xs:restriction>
+    </xs:simpleType>
+
+    <xs:simpleType name="cacheAtomicWriteOrderMode" final="restriction">
+        <xs:restriction base="xs:string">
+            <xs:enumeration value="Clock" />
+            <xs:enumeration value="Primary" />
+        </xs:restriction>
+    </xs:simpleType>
+
+    <xs:simpleType name="cacheMemoryMode" final="restriction">
+        <xs:restriction base="xs:string">
+            <xs:enumeration value="OnheapTiered" />
+            <xs:enumeration value="OffheapTiered" />
+            <xs:enumeration value="OffheapValues" />
+        </xs:restriction>
+    </xs:simpleType>
+
+    <xs:simpleType name="cacheRebalanceMode" final="restriction">
+        <xs:restriction base="xs:string">
+            <xs:enumeration value="Sync" />
+            <xs:enumeration value="Async" />
+            <xs:enumeration value="None" />
+        </xs:restriction>
+    </xs:simpleType>
+
+    <xs:simpleType name="cacheWriteSynchronizationMode" final="restriction">
+        <xs:restriction base="xs:string">
+            <xs:enumeration value="FullSync" />
+            <xs:enumeration value="FullAsync" />
+            <xs:enumeration value="PrimarySync" />
+        </xs:restriction>
+    </xs:simpleType>
+
+    <xs:simpleType name="queryIndexType" final="restriction">
+        <xs:restriction base="xs:string">
+            <xs:enumeration value="Sorted" />
+            <xs:enumeration value="FullText" />
+            <xs:enumeration value="Geospatial" />
+        </xs:restriction>
+    </xs:simpleType>
+
+    <xs:simpleType name="transactionConcurrency" final="restriction">
+        <xs:restriction base="xs:string">
+            <xs:enumeration value="Optimistic" />
+            <xs:enumeration value="Pessimistic" />
+        </xs:restriction>
+    </xs:simpleType>
+
+    <xs:simpleType name="transactionIsolation" final="restriction">
+        <xs:restriction base="xs:string">
+            <xs:enumeration value="ReadCommitted" />
+            <xs:enumeration value="RepeatableRead" />
+            <xs:enumeration value="Serializable" />
+        </xs:restriction>
+    </xs:simpleType>
+
     <xs:element name="igniteConfiguration">
+        <xs:annotation>
+            <xs:documentation>Ignite configuration root.</xs:documentation>
+        </xs:annotation>
         <xs:complexType>
             <xs:all>
                 <xs:element name="binaryConfiguration" minOccurs="0">
+                    <xs:annotation>
+                        <xs:documentation>Binary configuration.</xs:documentation>
+                    </xs:annotation>
                     <xs:complexType>
                         <xs:all>
                             <xs:element name="typeConfigurations" minOccurs="0">
+                                <xs:annotation>
+                                    <xs:documentation>Type configurations.</xs:documentation>
+                                </xs:annotation>
                                 <xs:complexType>
                                     <xs:sequence>
                                         <xs:element name="binaryTypeConfiguration" maxOccurs="unbounded">
                                             <xs:complexType>
                                                 <xs:all>
                                                     <xs:element name="nameMapper" minOccurs="0">
+                                                        <xs:annotation>
+                                                            <xs:documentation>Name mapper for the given type.</xs:documentation>
+                                                        </xs:annotation>
                                                         <xs:complexType>
-                                                            <xs:attribute name="type" type="xs:string" use="required" />
+                                                            <xs:attribute name="type" type="xs:string" use="required">
+                                                                <xs:annotation>
+                                                                    <xs:documentation>Assembly-qualified type name.</xs:documentation>
+                                                                </xs:annotation>
+                                                            </xs:attribute>
                                                         </xs:complexType>
                                                     </xs:element>
                                                     <xs:element name="idMapper" minOccurs="0">
+                                                        <xs:annotation>
+                                                            <xs:documentation>ID mapper for the given type. When it is necessary to resolve class (field) ID, then this property will be checked first. Otherwise, ID will be hash code of the class (field) simple name in lower case.</xs:documentation>
+                                                        </xs:annotation>
                                                         <xs:complexType>
-                                                            <xs:attribute name="type" type="xs:string" use="required" />
+                                                            <xs:attribute name="type" type="xs:string" use="required">
+                                                                <xs:annotation>
+                                                                    <xs:documentation>Assembly-qualified type name.</xs:documentation>
+                                                                </xs:annotation>
+                                                            </xs:attribute>
                                                         </xs:complexType>
                                                     </xs:element>
                                                     <xs:element name="serializer" minOccurs="0">
+                                                        <xs:annotation>
+                                                            <xs:documentation>
+                                                                Serializer for the given type. If not provided and class implements IBinarizable then its custom logic will be used. If not provided and class doesn't implement IBinarizable then all fields of the class except of those with [NotSerialized] attribute will be serialized with help of reflection.
+                                                            </xs:documentation>
+                                                        </xs:annotation>
                                                         <xs:complexType>
-                                                            <xs:attribute name="type" type="xs:string" use="required" />
+                                                            <xs:attribute name="type" type="xs:string" use="required">
+                                                                <xs:annotation>
+                                                                    <xs:documentation>Assembly-qualified type name.</xs:documentation>
+                                                                </xs:annotation>
+                                                            </xs:attribute>
                                                         </xs:complexType>
                                                     </xs:element>
                                                 </xs:all>
-                                                <xs:attribute name="typeName" type="xs:string" />
-                                                <xs:attribute name="affinityKeyFieldName" type="xs:string" />
-                                                <xs:attribute name="keepDeserialized" type="xs:string" />
-                                                <xs:attribute name="isEnum" type="xs:boolean" />
+                                                <xs:attribute name="typeName" type="xs:string">
+                                                    <xs:annotation>
+                                                        <xs:documentation>Fully qualified type name.</xs:documentation>
+                                                    </xs:annotation>
+                                                </xs:attribute>
+                                                <xs:attribute name="affinityKeyFieldName" type="xs:string">
+                                                    <xs:annotation>
+                                                        <xs:documentation>Affinity key field name.</xs:documentation>
+                                                    </xs:annotation>
+                                                </xs:attribute>
+                                                <xs:attribute name="keepDeserialized" type="xs:string">
+                                                    <xs:annotation>
+                                                        <xs:documentation>
+                                                            Keep deserialized flag. If set to non-null value, overrides default value set in BinaryTypeConfiguration.
+                                                        </xs:documentation>
+                                                    </xs:annotation>
+                                                </xs:attribute>
+                                                <xs:attribute name="isEnum" type="xs:boolean">
+                                                    <xs:annotation>
+                                                        <xs:documentation>Whether this instance describes an enum type.</xs:documentation>
+                                                    </xs:annotation>
+                                                </xs:attribute>
                                             </xs:complexType>
                                         </xs:element>
                                     </xs:sequence>
                                 </xs:complexType>
                             </xs:element>
                             <xs:element name="types" minOccurs="0">
+                                <xs:annotation>
+                                    <xs:documentation>
+                                        Binarizable types. Shorthand for creating "BinaryTypeConfiguration.
+                                    </xs:documentation>
+                                </xs:annotation>
                                 <xs:complexType>
                                     <xs:sequence>
                                         <xs:element maxOccurs="unbounded" name="string" type="xs:string" />
@@ -69,173 +193,528 @@
                                 </xs:complexType>
                             </xs:element>
                             <xs:element name="defaultNameMapper" minOccurs="0">
+                                <xs:annotation>
+                                    <xs:documentation>Default name mapper.</xs:documentation>
+                                </xs:annotation>
                                 <xs:complexType>
-                                    <xs:attribute name="type" type="xs:string" use="required" />
+                                    <xs:attribute name="type" type="xs:string" use="required">
+                                        <xs:annotation>
+                                            <xs:documentation>Assembly-qualified type name.</xs:documentation>
+                                        </xs:annotation>
+                                    </xs:attribute>
                                 </xs:complexType>
                             </xs:element>
                             <xs:element name="defaultIdMapper" minOccurs="0">
+                                <xs:annotation>
+                                    <xs:documentation>Default ID mapper.</xs:documentation>
+                                </xs:annotation>
                                 <xs:complexType>
-                                    <xs:attribute name="type" type="xs:string" use="required" />
+                                    <xs:attribute name="type" type="xs:string" use="required">
+                                        <xs:annotation>
+                                            <xs:documentation>Assembly-qualified type name.</xs:documentation>
+                                        </xs:annotation>
+                                    </xs:attribute>
                                 </xs:complexType>
                             </xs:element>
                             <xs:element name="defaultSerializer" minOccurs="0">
+                                <xs:annotation>
+                                    <xs:documentation>Default serializer.</xs:documentation>
+                                </xs:annotation>
                                 <xs:complexType>
-                                    <xs:attribute name="type" type="xs:string" use="required" />
+                                    <xs:attribute name="type" type="xs:string" use="required">
+                                        <xs:annotation>
+                                            <xs:documentation>Assembly-qualified type name.</xs:documentation>
+                                        </xs:annotation>
+                                    </xs:attribute>
                                 </xs:complexType>
                             </xs:element>
                         </xs:all>
-                        <xs:attribute name="defaultKeepDeserialized" type="xs:boolean" />
-                        <xs:attribute name="compactFooter" type="xs:boolean" />
+                        <xs:attribute name="defaultKeepDeserialized" type="xs:boolean">
+                            <xs:annotation>
+                                <xs:documentation>Default keep deserialized flag.</xs:documentation>
+                            </xs:annotation>
+                        </xs:attribute>
+                        <xs:attribute name="compactFooter" type="xs:boolean">
+                            <xs:annotation>
+                                <xs:documentation>Compact footer flag.</xs:documentation>
+                            </xs:annotation>
+                        </xs:attribute>
                     </xs:complexType>
                 </xs:element>
                 <xs:element name="cacheConfiguration" minOccurs="0">
+                    <xs:annotation>
+                        <xs:documentation>Cache configuration.</xs:documentation>
+                    </xs:annotation>
                     <xs:complexType>
                         <xs:sequence>
                             <xs:element name="cacheConfiguration" maxOccurs="unbounded">
+                                <xs:annotation>
+                                    <xs:documentation>Cache configuration.</xs:documentation>
+                                </xs:annotation>
                                 <xs:complexType>
                                     <xs:all>
                                         <xs:element name="cacheStoreFactory" minOccurs="0">
+                                            <xs:annotation>
+                                                <xs:documentation>Factory for underlying persistent storage for read-through and write-through operations.</xs:documentation>
+                                            </xs:annotation>
                                             <xs:complexType>
-                                                <xs:attribute name="type" type="xs:string" use="required" />
+                                                <xs:attribute name="type" type="xs:string" use="required">
+                                                    <xs:annotation>
+                                                        <xs:documentation>Assembly-qualified type name.</xs:documentation>
+                                                    </xs:annotation>
+                                                </xs:attribute>
                                             </xs:complexType>
                                         </xs:element>
                                         <xs:element name="queryEntities" minOccurs="0">
+                                            <xs:annotation>
+                                                <xs:documentation>Query entity configuration.</xs:documentation>
+                                            </xs:annotation>
                                             <xs:complexType>
                                                 <xs:sequence>
                                                     <xs:element name="queryEntity" maxOccurs="unbounded">
                                                         <xs:complexType>
                                                             <xs:all>
                                                                 <xs:element name="fields" minOccurs="0">
+                                                                    <xs:annotation>
+                                                                        <xs:documentation>Query fields, a map from field name to Java type name. The order of fields defines the order of columns returned by the 'select *' queries.</xs:documentation>
+                                                                    </xs:annotation>
                                                                     <xs:complexType>
                                                                         <xs:sequence>
                                                                             <xs:element name="queryField" maxOccurs="unbounded">
                                                                                 <xs:complexType>
-                                                                                    <xs:attribute name="name" type="xs:string" use="required" />
-                                                                                    <xs:attribute name="fieldType" type="xs:string" />
-                                                                                    <xs:attribute name="fieldTypeName" type="xs:string" />
+                                                                                    <xs:attribute name="name" type="xs:string" use="required">
+                                                                                        <xs:annotation>
+                                                                                            <xs:documentation>Cache name.</xs:documentation>
+                                                                                        </xs:annotation>
+                                                                                    </xs:attribute>
+                                                                                    <xs:attribute name="fieldType" type="xs:string">
+                                                                                        <xs:annotation>
+                                                                                            <xs:documentation>.NET field type.</xs:documentation>
+                                                                                        </xs:annotation>
+                                                                                    </xs:attribute>
+                                                                                    <xs:attribute name="fieldTypeName" type="xs:string">
+                                                                                        <xs:annotation>
+                                                                                            <xs:documentation>Java field type name.</xs:documentation>
+                                                                                        </xs:annotation>
+                                                                                    </xs:attribute>
                                                                                 </xs:complexType>
                                                                             </xs:element>
                                                                         </xs:sequence>
                                                                     </xs:complexType>
                                                                 </xs:element>
                                                                 <xs:element name="aliases" minOccurs="0">
+                                                                    <xs:annotation>
+                                                                        <xs:documentation>Field name aliases: mapping from full name in dot notation to an alias that will be used as SQL column name. Example: {"parent.name" -> "parentName"}.</xs:documentation>
+                                                                    </xs:annotation>
                                                                     <xs:complexType>
                                                                         <xs:sequence>
                                                                             <xs:element name="queryAlias" maxOccurs="unbounded">
                                                                                 <xs:complexType>
-                                                                                    <xs:attribute name="fullName" type="xs:string" use="required" />
-                                                                                    <xs:attribute name="alias" type="xs:string" use="required" />
+                                                                                    <xs:attribute name="fullName" type="xs:string" use="required">
+                                                                                        <xs:annotation>
+                                                                                            <xs:documentation>Full name of the query field.</xs:documentation>
+                                                                                        </xs:annotation>
+                                                                                    </xs:attribute>
+                                                                                    <xs:attribute name="alias" type="xs:string" use="required">
+                                                                                        <xs:annotation>
+                                                                                            <xs:documentation>Alias for the full name.</xs:documentation>
+                                                                                        </xs:annotation>
+                                                                                    </xs:attribute>
                                                                                 </xs:complexType>
                                                                             </xs:element>
                                                                         </xs:sequence>
                                                                     </xs:complexType>
                                                                 </xs:element>
                                                                 <xs:element name="indexes" minOccurs="0">
+                                                                    <xs:annotation>
+                                                                        <xs:documentation>Query indexes.</xs:documentation>
+                                                                    </xs:annotation>
                                                                     <xs:complexType>
                                                                         <xs:sequence>
                                                                             <xs:element name="queryIndex" maxOccurs="unbounded">
                                                                                 <xs:complexType>
                                                                                     <xs:sequence>
                                                                                         <xs:element name="fields" minOccurs="1">
+                                                                                            <xs:annotation>
+                                                                                                <xs:documentation>Query fields, a map from field name to Java type name. The order of fields defines the order of columns returned by the 'select *' queries.</xs:documentation>
+                                                                                            </xs:annotation>
                                                                                             <xs:complexType>
                                                                                                 <xs:sequence>
                                                                                                     <xs:element name="queryIndexField" maxOccurs="unbounded">
                                                                                                         <xs:complexType>
-                                                                                                            <xs:attribute name="name" type="xs:string" use="required" />
-                                                                                                            <xs:attribute name="isDescending" type="xs:boolean" />
+                                                                                                            <xs:attribute name="name" type="xs:string" use="required">
+                                                                                                                <xs:annotation>
+                                                                                                                    <xs:documentation>Cache name.</xs:documentation>
+                                                                                                                </xs:annotation>
+                                                                                                            </xs:attribute>
+                                                                                                            <xs:attribute name="isDescending" type="xs:boolean">
+                                                                                                                <xs:annotation>
+                                                                                                                    <xs:documentation>Whether this index is descending.</xs:documentation>
+                                                                                                                </xs:annotation>
+                                                                                                            </xs:attribute>
                                                                                                         </xs:complexType>
                                                                                                     </xs:element>
                                                                                                 </xs:sequence>
                                                                                             </xs:complexType>
                                                                                         </xs:element>
                                                                                     </xs:sequence>
-                                                                                    <xs:attribute name="name" type="xs:string" />
-                                                                                    <xs:attribute name="indexType" type="xs:string" />
+                                                                                    <xs:attribute name="name" type="xs:string">
+                                                                                        <xs:annotation>
+                                                                                            <xs:documentation>Index name.</xs:documentation>
+                                                                                        </xs:annotation>
+                                                                                    </xs:attribute>
+                                                                                    <xs:attribute name="indexType" type="queryIndexType">
+                                                                                        <xs:annotation>
+                                                                                            <xs:documentation>Index type.</xs:documentation>
+                                                                                        </xs:annotation>
+                                                                                    </xs:attribute>
                                                                                 </xs:complexType>
                                                                             </xs:element>
                                                                         </xs:sequence>
                                                                     </xs:complexType>
                                                                 </xs:element>
                                                             </xs:all>
-                                                            <xs:attribute name="keyTypeName" type="xs:string"/>
-                                                            <xs:attribute name="keyType" type="xs:string" />
-                                                            <xs:attribute name="valueTypeName" type="xs:string" />
-                                                            <xs:attribute name="valueType" type="xs:string" />
+                                                            <xs:attribute name="keyTypeName" type="xs:string">
+                                                                <xs:annotation>
+                                                                    <xs:documentation>
+                                                                        Java key type name.
+                                                                    </xs:documentation>
+                                                                </xs:annotation>
+                                                            </xs:attribute>
+                                                            <xs:attribute name="keyType" type="xs:string">
+                                                                <xs:annotation>
+                                                                    <xs:documentation>
+                                                                        .NET key type.
+                                                                    </xs:documentation>
+                                                                </xs:annotation>
+                                                            </xs:attribute>
+                                                            <xs:attribute name="valueTypeName" type="xs:string">
+                                                                <xs:annotation>
+                                                                    <xs:documentation>
+                                                                        Java value type name.
+                                                                    </xs:documentation>
+                                                                </xs:annotation>
+                                                            </xs:attribute>
+                                                            <xs:attribute name="valueType" type="xs:string">
+                                                                <xs:annotation>
+                                                                    <xs:documentation>
+                                                                        .NET value type.
+                                                                    </xs:documentation>
+                                                                </xs:annotation>
+                                                            </xs:attribute>
                                                         </xs:complexType>
                                                     </xs:element>
                                                 </xs:sequence>
                                             </xs:complexType>
                                         </xs:element>
                                         <xs:element name="nearConfiguration" minOccurs="0">
+                                            <xs:annotation>
+                                                <xs:documentation>Near cache configuration.</xs:documentation>
+                                            </xs:annotation>
                                             <xs:complexType>
                                                 <xs:all>
                                                     <xs:element name="evictionPolicy" minOccurs="0">
+                                                        <xs:annotation>
+                                                            <xs:documentation>Eviction policy. Null value means disabled evictions.</xs:documentation>
+                                                        </xs:annotation>
                                                         <xs:complexType>
-                                                            <xs:attribute name="batchSize" type="xs:int" />
-                                                            <xs:attribute name="maxSize" type="xs:int" />
-                                                            <xs:attribute name="maxMemorySize" type="xs:int" />
-                                                            <xs:attribute name="type" type="xs:string" use="required" />
+                                                            <xs:attribute name="batchSize" type="xs:int">
+                                                                <xs:annotation>
+                                                                    <xs:documentation>
+                                                                        Size of the eviction batch. Batch eviction is enabled only if maximum memory limit isn't set (MaxMemorySize == 0).
+                                                                    </xs:documentation>
+                                                                </xs:annotation>
+                                                            </xs:attribute>
+                                                            <xs:attribute name="maxSize" type="xs:int">
+                                                                <xs:annotation>
+                                                                    <xs:documentation>Maximum allowed cache size (entry count). 0 for unlimited.</xs:documentation>
+                                                                </xs:annotation>
+                                                            </xs:attribute>
+                                                            <xs:attribute name="maxMemorySize" type="xs:int">
+                                                                <xs:annotation>
+                                                                    <xs:documentation>Maximum allowed cache size in bytes. 0 for unlimited.</xs:documentation>
+                                                                </xs:annotation>
+                                                            </xs:attribute>
+                                                            <xs:attribute name="type" type="xs:string" use="required">
+                                                                <xs:annotation>
+                                                                    <xs:documentation>Assembly-qualified type name.</xs:documentation>
+                                                                </xs:annotation>
+                                                            </xs:attribute>
                                                         </xs:complexType>
                                                     </xs:element>
                                                 </xs:all>
-                                                <xs:attribute name="nearStartSize" type="xs:int" />
+                                                <xs:attribute name="nearStartSize" type="xs:int">
+                                                    <xs:annotation>
+                                                        <xs:documentation>Initial cache size for near cache which will be used to pre-create internal hash table after start.</xs:documentation>
+                                                    </xs:annotation>
+                                                </xs:attribute>
                                             </xs:complexType>
                                         </xs:element>
                                         <xs:element name="evictionPolicy" minOccurs="0">
+                                            <xs:annotation>
+                                                <xs:documentation>Eviction policy. Null value means disabled evictions.</xs:documentation>
+                                            </xs:annotation>
                                             <xs:complexType>
-                                                <xs:attribute name="batchSize" type="xs:int" />
-                                                <xs:attribute name="maxSize" type="xs:int" />
-                                                <xs:attribute name="maxMemorySize" type="xs:int" />
-                                                <xs:attribute name="type" type="xs:string" use="required" />
+                                                <xs:attribute name="batchSize" type="xs:int">
+                                                    <xs:annotation>
+                                                        <xs:documentation>
+                                                            Size of the eviction batch. Batch eviction is enabled only if maximum memory limit isn't set (MaxMemorySize == 0).
+                                                        </xs:documentation>
+                                                    </xs:annotation>
+                                                </xs:attribute>
+                                                <xs:attribute name="maxSize" type="xs:int">
+                                                    <xs:annotation>
+                                                        <xs:documentation>Maximum allowed cache size (entry count). 0 for unlimited.</xs:documentation>
+                                                    </xs:annotation>
+                                                </xs:attribute>
+                                                <xs:attribute name="maxMemorySize" type="xs:int">
+                                                    <xs:annotation>
+                                                        <xs:documentation>Maximum allowed cache size in bytes. 0 for unlimited.</xs:documentation>
+                                                    </xs:annotation>
+                                                </xs:attribute>
+                                                <xs:attribute name="type" type="xs:string" use="required">
+                                                    <xs:annotation>
+                                                        <xs:documentation>Assembly-qualified type name.</xs:documentation>
+                                                    </xs:annotation>
+                                                </xs:attribute>
                                             </xs:complexType>
                                         </xs:element>
                                         <xs:element name="affinityFunction" minOccurs="0">
+                                            <xs:annotation>
+                                                <xs:documentation>Affinity function to provide mapping from keys to nodes.</xs:documentation>
+                                            </xs:annotation>
                                             <xs:complexType>
-                                                <xs:attribute name="partitions" type="xs:int" />
-                                                <xs:attribute name="excludeNeighbors" type="xs:boolean" />
-                                                <xs:attribute name="type" type="xs:string" use="required" />
+                                                <xs:attribute name="partitions" type="xs:int">
+                                                    <xs:annotation>
+                                                        <xs:documentation>Number of partitions.</xs:documentation>
+                                                    </xs:annotation>
+                                                </xs:attribute>
+                                                <xs:attribute name="excludeNeighbors" type="xs:boolean">
+                                                    <xs:annotation>
+                                                        <xs:documentation>Whether to exclude same-host-neighbors from being backups of each other.</xs:documentation>
+                                                    </xs:annotation>
+                                                </xs:attribute>
+                                                <xs:attribute name="type" type="xs:string" use="required">
+                                                    <xs:annotation>
+                                                        <xs:documentation>Assembly-qualified type name.</xs:documentation>
+                                                    </xs:annotation>
+                                                </xs:attribute>
                                             </xs:complexType>
                                         </xs:element>
                                     </xs:all>
-                                    <xs:attribute name="name" type="xs:string" />
-                                    <xs:attribute name="cacheMode" type="xs:string" />
-                                    <xs:attribute name="writeSynchronizationMode" type="xs:string" />
-                                    <xs:attribute name="evictSynchronized" type="xs:boolean" />
-                                    <xs:attribute name="evictSynchronizedKeyBufferSize" type="xs:int" />
-                                    <xs:attribute name="evictSynchronizedConcurrencyLevel" type="xs:int" />
-                                    <xs:attribute name="evictSynchronizedTimeout" type="xs:string" />
-                                    <xs:attribute name="maxEvictionOverflowRatio" type="xs:decimal" />
-                                    <xs:attribute name="startSize" type="xs:int" />
-                                    <xs:attribute name="loadPreviousValue" type="xs:string" />
-                                    <xs:attribute name="atomicityMode" type="xs:string" />
-                                    <xs:attribute name="atomicWriteOrderMode" type="xs:string" />
-                                    <xs:attribute name="backups" type="xs:int" />
-                                    <xs:attribute name="lockTimeout" type="xs:string" />
-                                    <xs:attribute name="invalidate" type="xs:boolean" />
-                                    <xs:attribute name="rebalanceMode" type="xs:string" />
-                                    <xs:attribute name="rebalanceBatchSize" type="xs:int" />
-                                    <xs:attribute name="enableSwap" type="xs:boolean" />
-                                    <xs:attribute name="maxConcurrentAsyncOperations" type="xs:int" />
-                                    <xs:attribute name="writeBehindEnabled" type="xs:boolean" />
-                                    <xs:attribute name="writeBehindFlushSize" type="xs:int" />
-                                    <xs:attribute name="writeBehindFlushThreadCount" type="xs:int" />
-                                    <xs:attribute name="writeBehindBatchSize" type="xs:int" />
-                                    <xs:attribute name="rebalanceTimeout" type="xs:string" />
-                                    <xs:attribute name="rebalanceDelay" type="xs:string" />
-                                    <xs:attribute name="rebalanceThrottle" type="xs:string" />
-                                    <xs:attribute name="offHeapMaxMemory" type="xs:int" />
-                                    <xs:attribute name="memoryMode" type="xs:string" />
-                                    <xs:attribute name="longQueryWarningTimeout" type="xs:string" />
-                                    <xs:attribute name="sqlEscapeAll" type="xs:boolean" />
-                                    <xs:attribute name="sqlOnheapRowCacheSize" type="xs:int" />
-                                    <xs:attribute name="readThrough" type="xs:boolean" />
-                                    <xs:attribute name="writeThrough" type="xs:boolean" />
+                                    <xs:attribute name="name" type="xs:string">
+                                        <xs:annotation>
+                                            <xs:documentation>Cache name.</xs:documentation>
+                                        </xs:annotation>
+                                    </xs:attribute>
+                                    <xs:attribute name="cacheMode" type="cacheMode">
+                                        <xs:annotation>
+                                            <xs:documentation>Caching mode to use.</xs:documentation>
+                                        </xs:annotation>
+                                    </xs:attribute>
+                                    <xs:attribute name="writeSynchronizationMode" type="cacheWriteSynchronizationMode">
+                                        <xs:annotation>
+                                            <xs:documentation>Write synchronization mode. This mode controls whether the main caller should wait for update on other nodes to complete or not.</xs:documentation>
+                                        </xs:annotation>
+                                    </xs:attribute>
+                                    <xs:attribute name="evictSynchronized" type="xs:boolean">
+                                        <xs:annotation>
+                                            <xs:documentation>
+                                                Flag indicating whether eviction is synchronized between primary, backup and near nodes. If this parameter is true and swap is disabled then ICache.LocalEvict will involve all nodes where an entry is kept. If this property is set to false then eviction is done independently on different cache nodes. Note that it's not recommended to set this value to true if cache store is configured since it will allow to significantly improve cache performance.
+                                            </xs:documentation>
+                                        </xs:annotation>
+                                    </xs:attribute>
+                                    <xs:attribute name="evictSynchronizedKeyBufferSize" type="xs:int">
+                                        <xs:annotation>
+                                            <xs:documentation>Size of the key buffer for synchronized evictions.</xs:documentation>
+                                        </xs:annotation>
+                                    </xs:attribute>
+                                    <xs:attribute name="evictSynchronizedConcurrencyLevel" type="xs:int">
+                                        <xs:annotation>
+                                            <xs:documentation>
+                                                Concurrency level for synchronized evictions. This flag only makes sense with EvictSynchronized set to true. When synchronized evictions are enabled, it is possible that local eviction policy will try to evict entries faster than evictions can be synchronized with backup or near nodes. This value specifies how many concurrent synchronous eviction sessions should be allowed before the system is forced to wait and let synchronous evictions catch up with the eviction policy.
+                                            </xs:documentation>
+                                        </xs:annotation>
+                                    </xs:attribute>
+                                    <xs:attribute name="evictSynchronizedTimeout" type="xs:string">
+                                        <xs:annotation>
+                                            <xs:documentation>Timeout for synchronized evictions</xs:documentation>
+                                        </xs:annotation>
+                                    </xs:attribute>
+                                    <xs:attribute name="maxEvictionOverflowRatio" type="xs:decimal">
+                                        <xs:annotation>
+                                            <xs:documentation>This value denotes the maximum size of eviction queue in percents of cache size in case of distributed cache (replicated and partitioned) and using synchronized eviction</xs:documentation>
+                                        </xs:annotation>
+                                    </xs:attribute>
+                                    <xs:attribute name="startSize" type="xs:int">
+                                        <xs:annotation>
+                                            <xs:documentation>Initial cache size which will be used to pre-create internal hash table after start.</xs:documentation>
+                                        </xs:annotation>
+                                    </xs:attribute>
+                                    <xs:attribute name="loadPreviousValue" type="xs:string">
+                                        <xs:annotation>
+                                            <xs:documentation>
+                                                Flag indicating whether value should be loaded from store if it is not in the cache.
+                                            </xs:documentation>
+                                        </xs:annotation>
+                                    </xs:attribute>
+                                    <xs:attribute name="atomicityMode" type="cacheAtomicityMode">
+                                        <xs:annotation>
+                                            <xs:documentation>Cache atomicity mode.</xs:documentation>
+                                        </xs:annotation>
+                                    </xs:attribute>
+                                    <xs:attribute name="atomicWriteOrderMode" type="cacheAtomicWriteOrderMode">
+                                        <xs:annotation>
+                                            <xs:documentation>Cache write ordering mode.</xs:documentation>
+                                        </xs:annotation>
+                                    </xs:attribute>
+                                    <xs:attribute name="backups" type="xs:int">
+                                        <xs:annotation>
+                                            <xs:documentation>
+                                                Number of nodes used to back up single partition for Partitioned cache.
+                                            </xs:documentation>
+                                        </xs:annotation>
+                                    </xs:attribute>
+                                    <xs:attribute name="lockTimeout" type="xs:string">
+                                        <xs:annotation>
+                                            <xs:documentation>Default lock acquisition timeout.</xs:documentation>
+                                        </xs:annotation>
+                                    </xs:attribute>
+                                    <xs:attribute name="invalidate" type="xs:boolean">
+                                        <xs:annotation>
+                                            <xs:documentation>Invalidation flag. If true, values will be invalidated (nullified) upon commit in near cache.</xs:documentation>
+                                        </xs:annotation>
+                                    </xs:attribute>
+                                    <xs:attribute name="rebalanceMode" type="cacheRebalanceMode">
+                                        <xs:annotation>
+                                            <xs:documentation>Cache rebalance mode.</xs:documentation>
+                                        </xs:annotation>
+                                    </xs:attribute>
+                                    <xs:attribute name="rebalanceBatchSize" type="xs:int">
+                                        <xs:annotation>
+                                            <xs:documentation>Batch size (in number bytes) to be loaded within a single rebalance message. Rebalancing algorithm will split total data set on every node into multiple batches prior to sending data.</xs:documentation>
+                                        </xs:annotation>
+                                    </xs:attribute>
+                                    <xs:attribute name="enableSwap" type="xs:boolean">
+                                        <xs:annotation>
+                                            <xs:documentation>Flag indicating whether Ignite should use swap storage by default.</xs:documentation>
+                                        </xs:annotation>
+                                    </xs:attribute>
+                                    <xs:attribute name="maxConcurrentAsyncOperations" type="xs:int">
+                                        <xs:annotation>
+                                            <xs:documentation>Maximum number of allowed concurrent asynchronous operations, 0 for unlimited.</xs:documentation>
+                                        </xs:annotation>
+                                    </xs:attribute>
+                                    <xs:attribute name="writeBehindEnabled" type="xs:boolean">
+                                        <xs:annotation>
+                                            <xs:documentation>Flag indicating whether Ignite should use write-behind behaviour for the cache store.</xs:documentation>
+                                        </xs:annotation>
+                                    </xs:attribute>
+                                    <xs:attribute name="writeBehindFlushSize" type="xs:int">
+                                        <xs:annotation>
+                                            <xs:documentation>Maximum size of the write-behind cache. If cache size exceeds this value, all cached items are flushed to the cache store and write cache is cleared.</xs:documentation>
+                                        </xs:annotation>
+                                    </xs:attribute>
+                                    <xs:attribute name="writeBehindFlushThreadCount" type="xs:int">
+                                        <xs:annotation>
+                                            <xs:documentation>
+                                                Number of threads that will perform cache flushing. Cache flushing is performed when cache size exceeds value defined by WriteBehindFlushSize, or flush interval defined by WriteBehindFlushFrequency is elapsed.
+                                            </xs:documentation>
+                                        </xs:annotation>
+                                    </xs:attribute>
+                                    <xs:attribute name="writeBehindBatchSize" type="xs:int">
+                                        <xs:annotation>
+                                            <xs:documentation>
+                                                Maximum batch size for write-behind cache store operations. Store operations (get or remove) are combined in a batch of this size to be passed to ICacheStore.WriteAll or ICacheStore.DeleteAll methods.
+                                            </xs:documentation>
+                                        </xs:annotation>
+                                    </xs:attribute>
+                                    <xs:attribute name="rebalanceTimeout" type="xs:string">
+                                        <xs:annotation>
+                                            <xs:documentation>Rebalance timeout.</xs:documentation>
+                                        </xs:annotation>
+                                    </xs:attribute>
+                                    <xs:attribute name="rebalanceDelay" type="xs:string">
+                                        <xs:annotation>
+                                            <xs:documentation>Delay upon a node joining or leaving topology (or crash) after which rebalancing should be started automatically. Rebalancing should be delayed if you plan to restart nodes after they leave topology, or if you plan to start multiple nodes at once or one after another and don't want to repartition and rebalance until all nodes are started.</xs:documentation>
+                                        </xs:annotation>
+                                    </xs:attribute>
+                                    <xs:attribute name="rebalanceThrottle" type="xs:string">
+                                        <xs:annotation>
+                                            <xs:documentation>Time to wait between rebalance messages to avoid overloading of CPU or network. When rebalancing large data sets, the CPU or network can get over-consumed with rebalancing messages, which consecutively may slow down the application performance. This parameter helps tune the amount of time to wait between rebalance messages to make sure that rebalancing process does not have any negative performance impact. Note that application will continue to work properly while rebalancing is still in progress.</xs:documentation>
+                                        </xs:annotation>
+                                    </xs:attribute>
+                                    <xs:attribute name="offHeapMaxMemory" type="xs:int">
+                                        <xs:annotation>
+                                            <xs:documentation>Maximum amount of memory available to off-heap storage. Possible values are -1 means that off-heap storage is disabled. 0 means that Ignite will not limit off-heap storage (it's up to user to properly add and remove entries from cache to ensure that off-heap storage does not grow indefinitely. Any positive value specifies the limit of off-heap storage in bytes.</xs:documentation>
+                                        </xs:annotation>
+                                    </xs:attribute>
+                                    <xs:attribute name="memoryMode" type="cacheMemoryMode">
+                                        <xs:annotation>
+                                            <xs:documentation>Memory mode for cache.</xs:documentation>
+                                        </xs:annotation>
+                                    </xs:attribute>
+                                    <xs:attribute name="longQueryWarningTimeout" type="xs:string">
+                                        <xs:annotation>
+                                            <xs:documentation>Timeout after which long query warning will be printed.</xs:documentation>
+                                        </xs:annotation>
+                                    </xs:attribute>
+                                    <xs:attribute name="sqlEscapeAll" type="xs:boolean">
+                                        <xs:annotation>
+                                            <xs:documentation>If true all the SQL table and field names will be escaped with double quotes like ({ "tableName"."fieldsName"}). This enforces case sensitivity for field names and also allows having special characters in table and field names.</xs:documentation>
+                                        </xs:annotation>
+                                    </xs:attribute>
+                                    <xs:attribute name="sqlOnheapRowCacheSize" type="xs:int">
+                                        <xs:annotation>
+                                            <xs:documentation>Number of SQL rows which will be cached onheap to avoid deserialization on each SQL index access. This setting only makes sense when offheap is enabled for this cache.</xs:documentation>
+                                        </xs:annotation>
+                                    </xs:attribute>
+                                    <xs:attribute name="readThrough" type="xs:boolean">
+                                        <xs:annotation>
+                                            <xs:documentation>Whether read-through should be enabled for cache operations.</xs:documentation>
+                                        </xs:annotation>
+                                    </xs:attribute>
+                                    <xs:attribute name="writeThrough" type="xs:boolean">
+                                        <xs:annotation>
+                                            <xs:documentation>Whether write-through should be enabled for cache operations.</xs:documentation>
+                                        </xs:annotation>
+                                    </xs:attribute>
+                                    <xs:attribute name="eagerTtl" type="xs:boolean">
+                                        <xs:annotation>
+                                            <xs:documentation>Whether expired cache entries will be eagerly removed from cache. When set to false, expired entries will be removed on next entry access.</xs:documentation>
+                                        </xs:annotation>
+                                    </xs:attribute>
+                                    <xs:attribute name="keepBinaryInStore" type="xs:boolean">
+                                        <xs:annotation>
+                                            <xs:documentation>
+                                                Whether ICacheStore is working with binary objects instead of deserialized objects.
+                                            </xs:documentation>
+                                        </xs:annotation>
+                                    </xs:attribute>
+                                    <xs:attribute name="readFromBackup" type="xs:boolean">
+                                        <xs:annotation>
+                                            <xs:documentation>Whether data can be read from backup.</xs:documentation>
+                                        </xs:annotation>
+                                    </xs:attribute>
+                                    <xs:attribute name="copyOnRead" type="xs:boolean">
+                                        <xs:annotation>
+                                            <xs:documentation>Whether copy of the value stored in cache should be created for cache operation implying return value.</xs:documentation>
+                                        </xs:annotation>
+                                    </xs:attribute>
+                                    <xs:attribute name="writeBehindFlushFrequency" type="xs:string">
+                                        <xs:annotation>
+                                            <xs:documentation>Frequency with which write-behind cache is flushed to the cache store. This value defines the maximum time interval between object insertion/deletion from the cache at the moment when corresponding operation is applied to the cache store.</xs:documentation>
+                                        </xs:annotation>
+                                    </xs:attribute>
                                 </xs:complexType>
                             </xs:element>
                         </xs:sequence>
                     </xs:complexType>
                 </xs:element>
                 <xs:element name="jvmOptions" minOccurs="0">
+                    <xs:annotation>
+                        <xs:documentation>Collection of options passed to JVM on Ignite start.</xs:documentation>
+                    </xs:annotation>
                     <xs:complexType>
                         <xs:sequence>
                             <xs:element maxOccurs="unbounded" name="string" type="xs:string" />
@@ -243,6 +722,9 @@
                     </xs:complexType>
                 </xs:element>
                 <xs:element name="assemblies" minOccurs="0">
+                    <xs:annotation>
+                        <xs:documentation>List of additional .Net assemblies to load on Ignite start. Each item can be either fully qualified assembly name, path to assembly to DLL or path to a directory when assemblies reside.</xs:documentation>
+                    </xs:annotation>
                     <xs:complexType>
                         <xs:sequence>
                             <xs:element maxOccurs="unbounded" name="string" type="xs:string" />
@@ -250,23 +732,39 @@
                     </xs:complexType>
                 </xs:element>
                 <xs:element name="lifecycleBeans" minOccurs="0">
+                    <xs:annotation>
+                        <xs:documentation>Lifecycle beans.</xs:documentation>
+                    </xs:annotation>
                     <xs:complexType>
                         <xs:sequence>
                             <xs:element maxOccurs="unbounded" name="iLifecycleBean">
                                 <xs:complexType>
-                                    <xs:attribute name="type" type="xs:string" use="required" />
+                                    <xs:attribute name="type" type="xs:string" use="required">
+                                        <xs:annotation>
+                                            <xs:documentation>Assembly-qualified type name.</xs:documentation>
+                                        </xs:annotation>
+                                    </xs:attribute>
                                 </xs:complexType>
                             </xs:element>
                         </xs:sequence>
                     </xs:complexType>
                 </xs:element>
                 <xs:element name="discoverySpi" minOccurs="0">
+                    <xs:annotation>
+                        <xs:documentation>Discovery service provider. Null for default discovery.</xs:documentation>
+                    </xs:annotation>
                     <xs:complexType>
                         <xs:sequence>
                             <xs:element name="ipFinder" minOccurs="0">
+                                <xs:annotation>
+                                    <xs:documentation>IP finder which defines how nodes will find each other on the network.</xs:documentation>
+                                </xs:annotation>
                                 <xs:complexType>
                                     <xs:sequence>
                                         <xs:element name="endpoints" minOccurs="0">
+                                            <xs:annotation>
+                                                <xs:documentation>End points.</xs:documentation>
+                                            </xs:annotation>
                                             <xs:complexType>
                                                 <xs:sequence>
                                                     <xs:element maxOccurs="unbounded" name="string" type="xs:string" />
@@ -274,60 +772,254 @@
                                             </xs:complexType>
                                         </xs:element>
                                     </xs:sequence>
-                                    <xs:attribute name="type" type="xs:string" use="required" />
-                                    <xs:attribute name="localAddress" type="xs:string" />
-                                    <xs:attribute name="multicastGroup" type="xs:string" />
-                                    <xs:attribute name="multicastPort" type="xs:int" />
-                                    <xs:attribute name="addressRequestAttempts" type="xs:int" />
-                                    <xs:attribute name="responseTimeout" type="xs:string" />
-                                    <xs:attribute name="timeToLive" type="xs:byte" />
+                                    <xs:attribute name="type" type="xs:string" use="required">
+                                        <xs:annotation>
+                                            <xs:documentation>Assembly-qualified type name.</xs:documentation>
+                                        </xs:annotation>
+                                    </xs:attribute>
+                                    <xs:attribute name="localAddress" type="xs:string">
+                                        <xs:annotation>
+                                            <xs:documentation>Local host address for socket binding. Note that one node could have additional addresses beside the loopback one. This configuration parameter is optional.</xs:documentation>
+                                        </xs:annotation>
+                                    </xs:attribute>
+                                    <xs:attribute name="multicastGroup" type="xs:string">
+                                        <xs:annotation>
+                                            <xs:documentation>IP address of the multicast group.</xs:documentation>
+                                        </xs:annotation>
+                                    </xs:attribute>
+                                    <xs:attribute name="multicastPort" type="xs:int">
+                                        <xs:annotation>
+                                            <xs:documentation>Port number which multicast messages are sent to.</xs:documentation>
+                                        </xs:annotation>
+                                    </xs:attribute>
+                                    <xs:attribute name="addressRequestAttempts" type="xs:int">
+                                        <xs:annotation>
+                                            <xs:documentation>Number of attempts to send multicast address request. IP finder re-sends request only in case if no reply for previous request is received.</xs:documentation>
+                                        </xs:annotation>
+                                    </xs:attribute>
+                                    <xs:attribute name="responseTimeout" type="xs:string">
+                                        <xs:annotation>
+                                            <xs:documentation>Response timeout.</xs:documentation>
+                                        </xs:annotation>
+                                    </xs:attribute>
+                                    <xs:attribute name="timeToLive" type="xs:byte">
+                                        <xs:annotation>
+                                            <xs:documentation>Time to live for multicast packets sent out on this IP finder in order to control the scope of the multicast.</xs:documentation>
+                                        </xs:annotation>
+                                    </xs:attribute>
                                 </xs:complexType>
                             </xs:element>
                         </xs:sequence>
-                        <xs:attribute name="socketTimeout" type="xs:string" />
-                        <xs:attribute name="ackTimeout" type="xs:string" />
-                        <xs:attribute name="maxAckTimeout" type="xs:string" />
-                        <xs:attribute name="networkTimeout" type="xs:string" />
-                        <xs:attribute name="joinTimeout" type="xs:string" />
-                        <xs:attribute name="clientReconnectDisabled" type="xs:boolean" />
-                        <xs:attribute name="forceServerMode" type="xs:boolean" />
-                        <xs:attribute name="heartbeatFrequency" type="xs:string" />
-                        <xs:attribute name="ipFinderCleanFrequency" type="xs:string" />
-                        <xs:attribute name="localAddress" type="xs:string" />
-                        <xs:attribute name="localPort" type="xs:int" />
-                        <xs:attribute name="localPortRange" type="xs:int" />
-                        <xs:attribute name="maxMissedClientHeartbeats" type="xs:int" />
-                        <xs:attribute name="maxMissedHeartbeats" type="xs:int" />
-                        <xs:attribute name="reconnectCount" type="xs:int" />
-                        <xs:attribute name="statisticsPrintFrequency" type="xs:string" />
-                        <xs:attribute name="threadPriority" type="xs:int" />
-                        <xs:attribute name="topologyHistorySize" type="xs:int" />
-                        <xs:attribute name="type" type="xs:string" use="required" />
+                        <xs:attribute name="socketTimeout" type="xs:string">
+                            <xs:annotation>
+                                <xs:documentation>Socket timeout.</xs:documentation>
+                            </xs:annotation>
+                        </xs:attribute>
+                        <xs:attribute name="ackTimeout" type="xs:string">
+                            <xs:annotation>
+                                <xs:documentation>Timeout for receiving acknowledgement for sent message.</xs:documentation>
+                            </xs:annotation>
+                        </xs:attribute>
+                        <xs:attribute name="maxAckTimeout" type="xs:string">
+                            <xs:annotation>
+                                <xs:documentation>Maximum timeout for receiving acknowledgement for sent message.</xs:documentation>
+                            </xs:annotation>
+                        </xs:attribute>
+                        <xs:attribute name="networkTimeout" type="xs:string">
+                            <xs:annotation>
+                                <xs:documentation>Network timeout.</xs:documentation>
+                            </xs:annotation>
+                        </xs:attribute>
+                        <xs:attribute name="joinTimeout" type="xs:string">
+                            <xs:annotation>
+                                <xs:documentation>Join timeout.</xs:documentation>
+                            </xs:annotation>
+                        </xs:attribute>
+                        <xs:attribute name="clientReconnectDisabled" type="xs:boolean">
+                            <xs:annotation>
+                                <xs:documentation>Whether client does not try to reconnect after server detected client node failure.</xs:documentation>
+                            </xs:annotation>
+                        </xs:attribute>
+                        <xs:attribute name="forceServerMode" type="xs:boolean">
+                            <xs:annotation>
+                                <xs:documentation>
+                                    Whether TcpDiscoverySpi is started in server mode regardless of IgniteConfiguration.ClientMode setting.
+                                </xs:documentation>
+                            </xs:annotation>
+                        </xs:attribute>
+                        <xs:attribute name="heartbeatFrequency" type="xs:string">
+                            <xs:annotation>
+                                <xs:documentation>Delay between issuing of heartbeat messages. SPI sends heartbeat messages in configurable time interval to other nodes to notify them about its state.</xs:documentation>
+                            </xs:annotation>
+                        </xs:attribute>
+                        <xs:attribute name="ipFinderCleanFrequency" type="xs:string">
+                            <xs:annotation>
+                                <xs:documentation>IP finder clean frequency.</xs:documentation>
+                            </xs:annotation>
+                        </xs:attribute>
+                        <xs:attribute name="localAddress" type="xs:string">
+                            <xs:annotation>
+                                <xs:documentation>Local host address for socket binding. Note that one node could have additional addresses beside the loopback one. This configuration parameter is optional.</xs:documentation>
+                            </xs:annotation>
+                        </xs:attribute>
+                        <xs:attribute name="localPort" type="xs:int">
+                            <xs:annotation>
+                                <xs:documentation>Local port for socket binding.</xs:documentation>
+                            </xs:annotation>
+                        </xs:attribute>
+                        <xs:attribute name="localPortRange" type="xs:int">
+                            <xs:annotation>
+                                <xs:documentation>
+                                    Local port range for local host ports (value must greater than or equal to <tt>0</tt>). If provided local port LocalPort is occupied, implementation will try to increment the port number for as long as it is less than initial value plus this range.
+                                </xs:documentation>
+                            </xs:annotation>
+                        </xs:attribute>
+                        <xs:attribute name="maxMissedClientHeartbeats" type="xs:int">
+                            <xs:annotation>
+                                <xs:documentation>Maximum heartbeats count node can miss without failing client node.</xs:documentation>
+                            </xs:annotation>
+                        </xs:attribute>
+                        <xs:attribute name="maxMissedHeartbeats" type="xs:int">
+                            <xs:annotation>
+                                <xs:documentation>Maximum heartbeats count node can miss without initiating status check.</xs:documentation>
+                            </xs:annotation>
+                        </xs:attribute>
+                        <xs:attribute name="reconnectCount" type="xs:int">
+                            <xs:annotation>
+                                <xs:documentation>Maximum number of reconnect attempts used when establishing connection with remote nodes.</xs:documentation>
+                            </xs:annotation>
+                        </xs:attribute>
+                        <xs:attribute name="statisticsPrintFrequency" type="xs:string">
+                            <xs:annotation>
+                                <xs:documentation>
+                                    Statistics print frequency. TimeSpan.Zero for no statistics.
+                                </xs:documentation>
+                            </xs:annotation>
+                        </xs:attribute>
+                        <xs:attribute name="threadPriority" type="xs:int">
+                            <xs:annotation>
+                                <xs:documentation>Sets thread priority, 1 (lowest) to 10 (highest). All threads within SPI will be started with it.</xs:documentation>
+                            </xs:annotation>
+                        </xs:attribute>
+                        <xs:attribute name="topologyHistorySize" type="xs:int">
+                            <xs:annotation>
+                                <xs:documentation>Size of topology snapshots history.</xs:documentation>
+                            </xs:annotation>
+                        </xs:attribute>
+                        <xs:attribute name="type" type="xs:string" use="required">
+                            <xs:annotation>
+                                <xs:documentation>Assembly-qualified type name.</xs:documentation>
+                            </xs:annotation>
+                        </xs:attribute>
                     </xs:complexType>
                 </xs:element>
                 <xs:element name="communicationSpi" minOccurs="0">
+                    <xs:annotation>
+                        <xs:documentation>Communication service provider. Null for default communication.</xs:documentation>
+                    </xs:annotation>
                     <xs:complexType>
-                        <xs:attribute name="ackSendThreshold" type="xs:int" />
-                        <xs:attribute name="connectTimeout" type="xs:string" />
-                        <xs:attribute name="directBuffer" type="xs:boolean" />
-                        <xs:attribute name="directSendBuffer" type="xs:boolean" />
-                        <xs:attribute name="idleConnectionTimeout" type="xs:string" />
-                        <xs:attribute name="localAddress" type="xs:string" />
-                        <xs:attribute name="localPort" type="xs:int" />
-                        <xs:attribute name="localPortRange" type="xs:int" />
-                        <xs:attribute name="maxConnectTimeout" type="xs:string" />
-                        <xs:attribute name="messageQueueLimit" type="xs:string" />
-                        <xs:attribute name="reconnectCount" type="xs:int" />
-                        <xs:attribute name="selectorsCount" type="xs:int" />
-                        <xs:attribute name="slowClientQueueLimit" type="xs:int" />
-                        <xs:attribute name="socketReceiveBufferSize" type="xs:int" />
-                        <xs:attribute name="socketSendBufferSize" type="xs:int" />
-                        <xs:attribute name="tcpNoDelay" type="xs:boolean" />
-                        <xs:attribute name="unacknowledgedMessagesBufferSize" type="xs:int" />
-                        <xs:attribute name="type" type="xs:string" use="required" />
+                        <xs:attribute name="ackSendThreshold" type="xs:int">
+                            <xs:annotation>
+                                <xs:documentation>Number of received messages per connection to node after which acknowledgment message is sent.</xs:documentation>
+                            </xs:annotation>
+                        </xs:attribute>
+                        <xs:attribute name="connectTimeout" type="xs:string">
+                            <xs:annotation>
+                                <xs:documentation>Connect timeout used when establishing connection with remote nodes.</xs:documentation>
+                            </xs:annotation>
+                        </xs:attribute>
+                        <xs:attribute name="directBuffer" type="xs:boolean">
+                            <xs:annotation>
+                                <xs:documentation>Whether to allocate direct (ByteBuffer.allocateDirect) or heap (ByteBuffer.allocate) buffer.</xs:documentation>
+                            </xs:annotation>
+                        </xs:attribute>
+                        <xs:attribute name="directSendBuffer" type="xs:boolean">
+                            <xs:annotation>
+                                <xs:documentation>Value indicating whether to allocate direct (ByteBuffer.allocateDirect) or heap (ByteBuffer.allocate) send buffer.</xs:documentation>
+                            </xs:annotation>
+                        </xs:attribute>
+                        <xs:attribute name="idleConnectionTimeout" type="xs:string">
+                            <xs:annotation>
+                                <xs:documentation>Sets maximum idle connection timeout upon which a connection to client will be closed.</xs:documentation>
+                            </xs:annotation>
+                        </xs:attribute>
+                        <xs:attribute name="localAddress" type="xs:string">
+                            <xs:annotation>
+                                <xs:documentation>Local host address for socket binding. Note that one node could have additional addresses beside the loopback one. This configuration parameter is optional.</xs:documentation>
+                            </xs:annotation>
+                        </xs:attribute>
+                        <xs:attribute name="localPort" type="xs:int">
+                            <xs:annotation>
+                                <xs:documentation>Local port for socket binding.</xs:documentation>
+                            </xs:annotation>
+                        </xs:attribute>
+                        <xs:attribute name="localPortRange" type="xs:int">
+                            <xs:annotation>
+                                <xs:documentation>
+                                    Local port range for local host ports (value must greater than or equal to 0). If provided local port LocalPort is occupied, implementation will try to increment the port number for as long as it is less than initial value plus this range.
+                                </xs:documentation>
+                            </xs:annotation>
+                        </xs:attribute>
+                        <xs:attribute name="maxConnectTimeout" type="xs:string">
+                            <xs:annotation>
+                                <xs:documentation>Maximum connect timeout. If handshake is not established within connect timeout, then SPI tries to repeat handshake procedure with increased connect timeout. Connect timeout can grow till maximum timeout value, if maximum timeout value is reached then the handshake is considered as failed.</xs:documentation>
+                            </xs:annotation>
+                        </xs:attribute>
+                        <xs:attribute name="messageQueueLimit" type="xs:string">
+                            <xs:annotation>
+                                <xs:documentation>Message queue limit for incoming and outgoing messages.</xs:documentation>
+                            </xs:annotation>
+                        </xs:attribute>
+                        <xs:attribute name="reconnectCount" type="xs:int">
+                            <xs:annotation>
+                                <xs:documentation>Maximum number of reconnect attempts used when establishing connection with remote nodes.</xs:documentation>
+                            </xs:annotation>
+                        </xs:attribute>
+                        <xs:attribute name="selectorsCount" type="xs:int">
+                            <xs:annotation>
+                                <xs:documentation>Count of selectors to be used in TCP server.</xs:documentation>
+                            </xs:annotation>
+                        </xs:attribute>
+                        <xs:attribute name="slowClientQueueLimit" type="xs:int">
+                            <xs:annotation>
+                                <xs:documentation>Slow client queue limit.</xs:documentation>
+                            </xs:annotation>
+                        </xs:attribute>
+                        <xs:attribute name="socketReceiveBufferSize" type="xs:int">
+                            <xs:annotation>
+                                <xs

<TRUNCATED>

[2/2] ignite git commit: IGNITE-3497 .NET: Improve IgniteConfigurationSection.xsd: add missing properties, enums, docs.

Posted by pt...@apache.org.
IGNITE-3497 .NET: Improve IgniteConfigurationSection.xsd: add missing properties, enums, docs.


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/5f0db73f
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/5f0db73f
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/5f0db73f

Branch: refs/heads/master
Commit: 5f0db73fb839239a2ab5bf8682e106005640b888
Parents: 04eb59e
Author: Pavel Tupitsyn <pt...@apache.org>
Authored: Tue Aug 2 18:37:52 2016 +0300
Committer: Pavel Tupitsyn <pt...@apache.org>
Committed: Tue Aug 2 18:37:52 2016 +0300

----------------------------------------------------------------------
 .../Apache.Ignite.Core.Tests.csproj             |    1 +
 .../IgniteConfigurationSerializerTest.cs        |   76 +-
 .../IgniteConfigurationSection.xsd              | 1141 +++++++++++++++---
 3 files changed, 1058 insertions(+), 160 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/5f0db73f/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Apache.Ignite.Core.Tests.csproj
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Apache.Ignite.Core.Tests.csproj b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Apache.Ignite.Core.Tests.csproj
index 95fea8f..ec3a478 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Apache.Ignite.Core.Tests.csproj
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Apache.Ignite.Core.Tests.csproj
@@ -52,6 +52,7 @@
     <Reference Include="System.Web" />
     <Reference Include="System.ServiceProcess" />
     <Reference Include="System.XML" />
+    <Reference Include="System.Xml.Linq" />
   </ItemGroup>
   <ItemGroup>
     <Compile Include="TestAppConfig.cs" />

http://git-wip-us.apache.org/repos/asf/ignite/blob/5f0db73f/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteConfigurationSerializerTest.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteConfigurationSerializerTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteConfigurationSerializerTest.cs
index e435cf6..73e0047 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteConfigurationSerializerTest.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteConfigurationSerializerTest.cs
@@ -28,6 +28,7 @@ namespace Apache.Ignite.Core.Tests
     using System.Text;
     using System.Threading;
     using System.Xml;
+    using System.Xml.Linq;
     using System.Xml.Schema;
     using Apache.Ignite.Core.Binary;
     using Apache.Ignite.Core.Cache.Affinity.Fair;
@@ -212,6 +213,53 @@ namespace Apache.Ignite.Core.Tests
         }
 
         /// <summary>
+        /// Tests that all properties are present in the schema.
+        /// </summary>
+        [Test]
+        public void TestAllPropertiesArePresentInSchema()
+        {
+            // ReSharper disable once PossibleNullReferenceException
+            var schema = XDocument.Load("IgniteConfigurationSection.xsd")
+                    .Root.Elements()
+                    .Single(x => x.Attribute("name").Value == "igniteConfiguration");
+
+            var type = typeof(IgniteConfiguration);
+
+            CheckPropertyIsPresentInSchema(type, schema);
+        }
+
+        /// <summary>
+        /// Checks the property is present in schema.
+        /// </summary>
+        // ReSharper disable once UnusedParameter.Local
+        private static void CheckPropertyIsPresentInSchema(Type type, XElement schema)
+        {
+            Func<string, string> toLowerCamel = x => char.ToLowerInvariant(x[0]) + x.Substring(1);
+
+            foreach (var prop in type.GetProperties())
+            {
+                var propType = prop.PropertyType;
+
+                var isCollection = propType.IsGenericType &&
+                                   propType.GetGenericTypeDefinition() == typeof(ICollection<>);
+
+                if (isCollection)
+                    propType = propType.GetGenericArguments().First();
+
+                var propName = toLowerCamel(prop.Name);
+
+                Assert.IsTrue(schema.Descendants().Select(x => x.Attribute("name"))
+                    .Any(x => x != null && x.Value == propName),
+                    "Property is missing in XML schema: " + propName);
+
+                var isComplexProp = propType.Namespace != null && propType.Namespace.StartsWith("Apache.Ignite.Core");
+
+                if (isComplexProp)
+                    CheckPropertyIsPresentInSchema(propType, schema);
+            }
+        }
+
+        /// <summary>
         /// Tests the schema validation.
         /// </summary>
         [Test]
@@ -253,7 +301,7 @@ namespace Apache.Ignite.Core.Tests
         {
             var document = new XmlDocument();
 
-            document.Schemas.Add("http://ignite.apache.org/schema/dotnet/IgniteConfigurationSection", 
+            document.Schemas.Add("http://ignite.apache.org/schema/dotnet/IgniteConfigurationSection",
                 XmlReader.Create("IgniteConfigurationSection.xsd"));
 
             document.Load(new StringReader(xml));
@@ -390,8 +438,8 @@ namespace Apache.Ignite.Core.Tests
                         Backups = 15,
                         CacheMode = CacheMode.Replicated,
                         CacheStoreFactory = new TestCacheStoreFactory(),
-                        CopyOnRead = true,
-                        EagerTtl = true,
+                        CopyOnRead = false,
+                        EagerTtl = false,
                         EnableSwap = true,
                         EvictSynchronized = true,
                         EvictSynchronizedConcurrencyLevel = 13,
@@ -426,7 +474,7 @@ namespace Apache.Ignite.Core.Tests
                                 ValueType = typeof (long)
                             },
                         },
-                        ReadFromBackup = true,
+                        ReadFromBackup = false,
                         RebalanceBatchSize = 33,
                         RebalanceDelay = TimeSpan.MaxValue,
                         RebalanceMode = CacheRebalanceMode.Sync,
@@ -437,7 +485,7 @@ namespace Apache.Ignite.Core.Tests
                         StartSize = 1023,
                         WriteBehindBatchSize = 45,
                         WriteBehindEnabled = true,
-                        WriteBehindFlushFrequency = TimeSpan.FromSeconds(5),
+                        WriteBehindFlushFrequency = TimeSpan.FromSeconds(55),
                         WriteBehindFlushSize = 66,
                         WriteBehindFlushThreadCount = 2,
                         WriteSynchronizationMode = CacheWriteSynchronizationMode.FullAsync,
@@ -457,7 +505,7 @@ namespace Apache.Ignite.Core.Tests
                         {
                             ExcludeNeighbors = true,
                             Partitions = 48
-                        }
+                        },
                     }
                 },
                 ClientMode = true,
@@ -542,7 +590,9 @@ namespace Apache.Ignite.Core.Tests
                     SlowClientQueueLimit = 98,
                     SocketSendBufferSize = 2045,
                     UnacknowledgedMessagesBufferSize = 3450
-                }
+                },
+                IsLateAffinityAssignment = false,
+                SpringConfigUrl = "test",
             };
         }
 
@@ -643,21 +693,13 @@ namespace Apache.Ignite.Core.Tests
         /// </summary>
         public class TestSerializer : IBinarySerializer
         {
-            /// <summary>
-            /// Write portalbe object.
-            /// </summary>
-            /// <param name="obj">Object.</param>
-            /// <param name="writer">Poratble writer.</param>
+            /** <inheritdoc /> */
             public void WriteBinary(object obj, IBinaryWriter writer)
             {
                 // No-op.
             }
 
-            /// <summary>
-            /// Read binary object.
-            /// </summary>
-            /// <param name="obj">Instantiated empty object.</param>
-            /// <param name="reader">Poratble reader.</param>
+            /** <inheritdoc /> */
             public void ReadBinary(object obj, IBinaryReader reader)
             {
                 // No-op.