{
  "api/Apache.Ignite.Core.Cache.Configuration.CacheConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Cache.Configuration.CacheConfiguration.html",
    "title": "Class CacheConfiguration | Apache Ignite.NET",
    "keywords": "Class CacheConfiguration Defines grid cache configuration. Inheritance System.Object CacheConfiguration Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Configuration Assembly : Apache.Ignite.Core.dll Syntax public class CacheConfiguration : IBinaryRawWriteAware<BinaryWriter> Constructors CacheConfiguration() Initializes a new instance of the CacheConfiguration class. Declaration public CacheConfiguration() CacheConfiguration(CacheConfiguration) Initializes a new instance of the CacheConfiguration class, performing a deep copy of specified cache configuration. Declaration public CacheConfiguration(CacheConfiguration other) Parameters Type Name Description CacheConfiguration other The other configuration to perfrom deep copy from. CacheConfiguration(String) Initializes a new instance of the CacheConfiguration class. Declaration public CacheConfiguration(string name) Parameters Type Name Description System.String name Cache name. CacheConfiguration(String, QueryEntity[]) Initializes a new instance of the CacheConfiguration class. Declaration public CacheConfiguration(string name, params QueryEntity[] queryEntities) Parameters Type Name Description System.String name Cache name. QueryEntity [] queryEntities Query entities. CacheConfiguration(String, Type[]) Initializes a new instance of the CacheConfiguration class and populates QueryEntities according to provided query types. This constructor is depricated, please use CacheConfiguration(String, QueryEntity[]) Declaration [Obsolete(\"This constructor is deprecated, please use CacheConfiguration(string, QueryEntity[]) instead.\")] public CacheConfiguration(string name, params Type[] queryTypes) Parameters Type Name Description System.String name Cache name. System.Type [] queryTypes Collection of types to be registered as query entities. These types should use QuerySqlFieldAttribute to configure query fields and properties. Fields DefaultAtomicityMode Default atomicity mode. Declaration public const CacheAtomicityMode DefaultAtomicityMode = CacheAtomicityMode.Atomic Field Value Type Description CacheAtomicityMode DefaultBackups Default number of backups. Declaration public const int DefaultBackups = 0 Field Value Type Description System.Int32 DefaultCacheMode Default caching mode. Declaration public const CacheMode DefaultCacheMode = CacheMode.Partitioned Field Value Type Description CacheMode DefaultCacheSize Default cache size to use with eviction policy. Declaration public const int DefaultCacheSize = 100000 Field Value Type Description System.Int32 DefaultCopyOnRead Default value for 'copyOnRead' flag. Declaration public const bool DefaultCopyOnRead = true Field Value Type Description System.Boolean DefaultEagerTtl Default value for eager ttl flag. Declaration public const bool DefaultEagerTtl = true Field Value Type Description System.Boolean DefaultEncryptionEnabled Default value for EncryptionEnabled . Declaration public const bool DefaultEncryptionEnabled = false Field Value Type Description System.Boolean DefaultInvalidate Default value for 'invalidate' flag that indicates if this is invalidation-based cache. Declaration public const bool DefaultInvalidate = false Field Value Type Description System.Boolean DefaultKeepBinaryInStore Default value for KeepBinaryInStore property. Declaration public const bool DefaultKeepBinaryInStore = false Field Value Type Description System.Boolean DefaultKeepVinaryInStore Default value for keep portable in store behavior . Declaration [Obsolete(\"Use DefaultKeepBinaryInStore instead.\")] public const bool DefaultKeepVinaryInStore = true Field Value Type Description System.Boolean DefaultLoadPreviousValue Default value for load previous value flag. Declaration public const bool DefaultLoadPreviousValue = false Field Value Type Description System.Boolean DefaultLockTimeout Default lock timeout. Declaration public static readonly TimeSpan DefaultLockTimeout Field Value Type Description System.TimeSpan DefaultLongQueryWarningTimeout Default timeout after which long query warning will be printed. Declaration public static readonly TimeSpan DefaultLongQueryWarningTimeout Field Value Type Description System.TimeSpan DefaultMaxConcurrentAsyncOperations Default value for 'maxConcurrentAsyncOps'. Declaration public const int DefaultMaxConcurrentAsyncOperations = 500 Field Value Type Description System.Int32 DefaultMaxQueryIteratorsCount Default value for MaxQueryIteratorsCount . Declaration public const int DefaultMaxQueryIteratorsCount = 1024 Field Value Type Description System.Int32 DefaultPartitionLossPolicy Default value for PartitionLossPolicy . Declaration public const PartitionLossPolicy DefaultPartitionLossPolicy = PartitionLossPolicy.Ignore Field Value Type Description PartitionLossPolicy DefaultQueryDetailMetricsSize Default value for QueryDetailMetricsSize . Declaration public const int DefaultQueryDetailMetricsSize = 0 Field Value Type Description System.Int32 DefaultQueryParallelism Default value for QueryParallelism . Declaration public const int DefaultQueryParallelism = 1 Field Value Type Description System.Int32 DefaultReadFromBackup Default value for 'readFromBackup' flag. Declaration public const bool DefaultReadFromBackup = true Field Value Type Description System.Boolean DefaultReadThrough Default value for read-through behavior. Declaration public const bool DefaultReadThrough = false Field Value Type Description System.Boolean DefaultRebalanceBatchesPrefetchCount Default value for RebalanceBatchesPrefetchCount . Declaration public const long DefaultRebalanceBatchesPrefetchCount = 3L Field Value Type Description System.Int64 DefaultRebalanceBatchSize Default rebalance batch size in bytes. Declaration public const int DefaultRebalanceBatchSize = 524288 Field Value Type Description System.Int32 DefaultRebalanceMode Default rebalance mode for distributed cache. Declaration public const CacheRebalanceMode DefaultRebalanceMode = CacheRebalanceMode.Async Field Value Type Description CacheRebalanceMode DefaultRebalanceOrder Default value for RebalanceOrder . Declaration public const int DefaultRebalanceOrder = 0 Field Value Type Description System.Int32 DefaultRebalanceThreadPoolSize Default size of rebalance thread pool. Declaration public const int DefaultRebalanceThreadPoolSize = 4 Field Value Type Description System.Int32 DefaultRebalanceThrottle Time to wait between rebalance messages to avoid overloading CPU. Declaration public static readonly TimeSpan DefaultRebalanceThrottle Field Value Type Description System.TimeSpan DefaultRebalanceTimeout Default rebalance timeout. Declaration public static readonly TimeSpan DefaultRebalanceTimeout Field Value Type Description System.TimeSpan DefaultSqlIndexMaxInlineSize Default value for SqlIndexMaxInlineSize . Declaration public const int DefaultSqlIndexMaxInlineSize = -1 Field Value Type Description System.Int32 DefaultStoreConcurrentLoadAllThreshold Default value for StoreConcurrentLoadAllThreshold . Declaration public const int DefaultStoreConcurrentLoadAllThreshold = 5 Field Value Type Description System.Int32 DefaultWriteBehindBatchSize Default batch size for write-behind cache store. Declaration public const int DefaultWriteBehindBatchSize = 512 Field Value Type Description System.Int32 DefaultWriteBehindCoalescing Default value for WriteBehindCoalescing . Declaration public const bool DefaultWriteBehindCoalescing = true Field Value Type Description System.Boolean DefaultWriteBehindEnabled Default value for 'writeBehindEnabled' flag. Declaration public const bool DefaultWriteBehindEnabled = false Field Value Type Description System.Boolean DefaultWriteBehindFlushFrequency Default flush frequency for write-behind cache store. Declaration public static readonly TimeSpan DefaultWriteBehindFlushFrequency Field Value Type Description System.TimeSpan DefaultWriteBehindFlushSize Default flush size for write-behind cache store. Declaration public const int DefaultWriteBehindFlushSize = 10240 Field Value Type Description System.Int32 DefaultWriteBehindFlushThreadCount Default count of flush threads for write-behind cache store. Declaration public const int DefaultWriteBehindFlushThreadCount = 1 Field Value Type Description System.Int32 DefaultWriteSynchronizationMode Default value for WriteSynchronizationMode property. Declaration public const CacheWriteSynchronizationMode DefaultWriteSynchronizationMode = CacheWriteSynchronizationMode.PrimarySync Field Value Type Description CacheWriteSynchronizationMode DefaultWriteThrough Default value for write-through behavior. Declaration public const bool DefaultWriteThrough = false Field Value Type Description System.Boolean Properties AffinityFunction Gets or sets the affinity function to provide mapping from keys to nodes. Predefined implementations: RendezvousAffinityFunction . Declaration public IAffinityFunction AffinityFunction { get; set; } Property Value Type Description IAffinityFunction AtomicityMode Gets or sets cache atomicity mode. Declaration public CacheAtomicityMode AtomicityMode { get; set; } Property Value Type Description CacheAtomicityMode Backups Gets or sets number of nodes used to back up single partition for Partitioned cache. Declaration public int Backups { get; set; } Property Value Type Description System.Int32 CacheMode Gets or sets caching mode to use. Declaration public CacheMode CacheMode { get; set; } Property Value Type Description CacheMode CacheStoreFactory Gets or sets the factory for underlying persistent storage for read-through and write-through operations. See ReadThrough and WriteThrough properties to enable read-through and write-through behavior so that cache store is invoked on get and/or put operations. If both ReadThrough and WriteThrough are false , cache store will be invoked only on LoadCache(ICacheEntryFilter<TK, TV>, Object[]) calls. Declaration public IFactory<ICacheStore> CacheStoreFactory { get; set; } Property Value Type Description IFactory < ICacheStore > CopyOnRead Gets or sets flag indicating whether copy of the value stored in cache should be created for cache operation implying return value. Declaration public bool CopyOnRead { get; set; } Property Value Type Description System.Boolean DataRegionName Gets or sets the name of the data region, see DataRegionConfiguration . Declaration public string DataRegionName { get; set; } Property Value Type Description System.String EagerTtl Gets or sets flag indicating whether expired cache entries will be eagerly removed from cache. When set to false, expired entries will be removed on next entry access. Declaration public bool EagerTtl { get; set; } Property Value Type Description System.Boolean EnableStatistics Gets or sets a value indicating whether statistics gathering is enabled on a cache. These statistics can be retrieved via GetMetrics() . Declaration public bool EnableStatistics { get; set; } Property Value Type Description System.Boolean EncryptionEnabled Gets or sets encryption flag. Default is false. Declaration public bool EncryptionEnabled { get; set; } Property Value Type Description System.Boolean EvictionPolicy Gets or sets the eviction policy. Null value means disabled evictions. Declaration public IEvictionPolicy EvictionPolicy { get; set; } Property Value Type Description IEvictionPolicy ExpiryPolicyFactory Gets or sets the factory for IExpiryPolicy to be used for all cache operations, unless WithExpiryPolicy(IExpiryPolicy) is called. Default is null, which means no expiration. Declaration public IFactory<IExpiryPolicy> ExpiryPolicyFactory { get; set; } Property Value Type Description IFactory < IExpiryPolicy > GroupName Gets or sets the cache group name. Caches with the same group name share single underlying 'physical' cache (partition set), but are logically isolated. Since underlying cache is shared, the following configuration properties should be the same within group: AffinityFunction , CacheMode , PartitionLossPolicy , DataRegionName Grouping caches reduces overall overhead, since internal data structures are shared. Declaration public string GroupName { get; set; } Property Value Type Description System.String Invalidate Invalidation flag. If true, values will be invalidated (nullified) upon commit in near cache. Declaration public bool Invalidate { get; set; } Property Value Type Description System.Boolean KeepBinaryInStore Gets or sets the flag indicating whether ICacheStore is working with binary objects instead of deserialized objects. Declaration public bool KeepBinaryInStore { get; set; } Property Value Type Description System.Boolean KeyConfiguration Gets or sets the key configuration. Declaration public ICollection<CacheKeyConfiguration> KeyConfiguration { get; set; } Property Value Type Description System.Collections.Generic.ICollection < CacheKeyConfiguration > LoadPreviousValue Gets or sets flag indicating whether value should be loaded from store if it is not in the cache for the following cache operations: PutIfAbsent(TK, TV) Replace(TK, TV) Remove(TK) GetAndPut(TK, TV) GetAndRemove(TK) GetAndReplace(TK, TV) GetAndPutIfAbsent(TK, TV) Declaration public bool LoadPreviousValue { get; set; } Property Value Type Description System.Boolean LockTimeout Gets or sets default lock acquisition timeout. Declaration public TimeSpan LockTimeout { get; set; } Property Value Type Description System.TimeSpan LongQueryWarningTimeout Gets or sets the timeout after which long query warning will be printed. This property is obsolete, use LongQueryWarningTimeout instead. Declaration [Obsolete(\"Use IgniteConfiguration.LongQueryWarningTimeout instead.\")] public TimeSpan LongQueryWarningTimeout { get; set; } Property Value Type Description System.TimeSpan MaxConcurrentAsyncOperations Gets or sets maximum number of allowed concurrent asynchronous operations, 0 for unlimited. Declaration public int MaxConcurrentAsyncOperations { get; set; } Property Value Type Description System.Int32 MaxQueryIteratorsCount Gets or sets the maximum number of active query iterators. Declaration public int MaxQueryIteratorsCount { get; set; } Property Value Type Description System.Int32 MemoryPolicyName Gets or sets the name of the MemoryPolicyConfiguration for this cache. See MemoryConfiguration . Declaration [Obsolete(\"Use DataRegionName.\")] public string MemoryPolicyName { get; set; } Property Value Type Description System.String Name Gets or sets the cache name. Declaration public string Name { get; set; } Property Value Type Description System.String NearConfiguration Gets or sets the near cache configuration. Declaration public NearCacheConfiguration NearConfiguration { get; set; } Property Value Type Description NearCacheConfiguration OnheapCacheEnabled Gets or sets a value indicating whether on-heap cache is enabled for the off-heap based page memory. Declaration public bool OnheapCacheEnabled { get; set; } Property Value Type Description System.Boolean PartitionLossPolicy Gets or sets the partition loss policy. This policy defines how Ignite will react to a situation when all nodes for some partition leave the cluster. Declaration public PartitionLossPolicy PartitionLossPolicy { get; set; } Property Value Type Description PartitionLossPolicy PlatformCacheConfiguration Gets or sets platform cache configuration. More details: PlatformCacheConfiguration . Declaration public PlatformCacheConfiguration PlatformCacheConfiguration { get; set; } Property Value Type Description PlatformCacheConfiguration PluginConfigurations Gets or sets the plugin configurations. Declaration public ICollection<ICachePluginConfiguration> PluginConfigurations { get; set; } Property Value Type Description System.Collections.Generic.ICollection < ICachePluginConfiguration > QueryDetailMetricsSize Gets or sets the size of the query detail metrics to be stored in memory. 0 means disabled metrics. Declaration public int QueryDetailMetricsSize { get; set; } Property Value Type Description System.Int32 QueryEntities Gets or sets the query entity configuration. Declaration public ICollection<QueryEntity> QueryEntities { get; set; } Property Value Type Description System.Collections.Generic.ICollection < QueryEntity > QueryParallelism Gets or sets the desired query parallelism within a single node. Query executor may or may not use this hint, depending on estimated query cost. Default is DefaultQueryParallelism . Declaration public int QueryParallelism { get; set; } Property Value Type Description System.Int32 ReadFromBackup Gets or sets flag indicating whether data can be read from backup. Declaration public bool ReadFromBackup { get; set; } Property Value Type Description System.Boolean ReadThrough Gets or sets a value indicating whether read-through should be enabled for cache operations. When in read-through mode, cache misses that occur due to cache entries not existing as a result of performing a \"get\" operations will appropriately cause the configured ICacheStore (see CacheStoreFactory ) to be invoked. Declaration public bool ReadThrough { get; set; } Property Value Type Description System.Boolean RebalanceBatchesPrefetchCount Gets or sets the rebalance batches prefetch count. Source node can provide more than one batch at rebalance start to improve performance. Default is DefaultRebalanceBatchesPrefetchCount , minimum is 2. Declaration public long RebalanceBatchesPrefetchCount { get; set; } Property Value Type Description System.Int64 RebalanceBatchSize Gets or sets 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. Declaration public int RebalanceBatchSize { get; set; } Property Value Type Description System.Int32 RebalanceDelay Gets or sets 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. Declaration public TimeSpan RebalanceDelay { get; set; } Property Value Type Description System.TimeSpan RebalanceMode Gets or sets cache rebalance mode. Declaration public CacheRebalanceMode RebalanceMode { get; set; } Property Value Type Description CacheRebalanceMode RebalanceOrder Gets or sets the cache rebalance order. Caches with bigger RebalanceOrder are rebalanced later than caches with smaller RebalanceOrder. Default is 0, which means unordered rebalance. All caches with RebalanceOrder=0 are rebalanced without any delay concurrently. This parameter is applicable only for caches with RebalanceMode of Sync and Async . Declaration public int RebalanceOrder { get; set; } Property Value Type Description System.Int32 RebalanceThrottle 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. Value of 0 means that throttling is disabled. Declaration public TimeSpan RebalanceThrottle { get; set; } Property Value Type Description System.TimeSpan RebalanceTimeout Gets or sets rebalance timeout. Declaration public TimeSpan RebalanceTimeout { get; set; } Property Value Type Description System.TimeSpan SqlEscapeAll 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. Declaration public bool SqlEscapeAll { get; set; } Property Value Type Description System.Boolean SqlIndexMaxInlineSize Gets or sets maximum inline size in bytes for sql indexes. See also InlineSize . -1 for automatic. Declaration public int SqlIndexMaxInlineSize { get; set; } Property Value Type Description System.Int32 SqlSchema Gets or sets the SQL schema. Non-quoted identifiers are not case sensitive. Quoted identifiers are case sensitive. Quoted Name is used by default. Declaration public string SqlSchema { get; set; } Property Value Type Description System.String StoreConcurrentLoadAllThreshold Gets or sets the threshold to use when multiple keys are being loaded from an underlying cache store (see CacheStoreFactory ). In the situation when several threads load the same or intersecting set of keys and the total number of keys to load is less or equal to this threshold then there will be no second call to the storage in order to load a key from thread A if the same key is already being loaded by thread B. The threshold should be controlled wisely. On the one hand if it's set to a big value then the interaction with a storage during the load of missing keys will be minimal.On the other hand the big value may result in significant performance degradation because it is needed to check for every key whether it's being loaded or not. Declaration public int StoreConcurrentLoadAllThreshold { get; set; } Property Value Type Description System.Int32 WriteBehindBatchSize 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 WriteAll(IEnumerable<KeyValuePair<TK, TV>>) or DeleteAll(IEnumerable<TK>) methods. Declaration public int WriteBehindBatchSize { get; set; } Property Value Type Description System.Int32 WriteBehindCoalescing Gets or sets write coalescing flag for write-behind cache store operations. Store operations (get or remove) with the same key are combined or coalesced to single, resulting operation to reduce pressure to underlying cache store. Declaration public bool WriteBehindCoalescing { get; set; } Property Value Type Description System.Boolean WriteBehindEnabled Flag indicating whether Ignite should use write-behind behaviour for the cache store. Declaration public bool WriteBehindEnabled { get; set; } Property Value Type Description System.Boolean WriteBehindFlushFrequency 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. If this value is 0, then flush is performed according to the flush size. Note that you cannot set both WriteBehindFlushSize and WriteBehindFlushFrequency to 0. Declaration public TimeSpan WriteBehindFlushFrequency { get; set; } Property Value Type Description System.TimeSpan WriteBehindFlushSize 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. Declaration public int WriteBehindFlushSize { get; set; } Property Value Type Description System.Int32 WriteBehindFlushThreadCount 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. Declaration public int WriteBehindFlushThreadCount { get; set; } Property Value Type Description System.Int32 WriteSynchronizationMode Gets or sets write synchronization mode. This mode controls whether the main caller should wait for update on other nodes to complete or not. Declaration public CacheWriteSynchronizationMode WriteSynchronizationMode { get; set; } Property Value Type Description CacheWriteSynchronizationMode WriteThrough Gets or sets a value indicating whether write-through should be enabled for cache operations. When in \"write-through\" mode, cache updates that occur as a result of performing \"put\" operations will appropriately cause the configured ICacheStore (see CacheStoreFactory ) to be invoked. Declaration public bool WriteThrough { get; set; } Property Value Type Description System.Boolean"
  },
  "api/Apache.Ignite.Core.Cache.Configuration.PartitionLossPolicy.html": {
    "href": "api/Apache.Ignite.Core.Cache.Configuration.PartitionLossPolicy.html",
    "title": "Enum PartitionLossPolicy | Apache Ignite.NET",
    "keywords": "Enum PartitionLossPolicy Partition loss policy. Defines how cache will behave in a case when one or more partitions are lost because of a node(s) failure. All Safe policies prevent a user from interaction with partial data in lost partitions until ResetLostPartitions(IEnumerable<String>) method is called. *All policies allow working with partial data in lost partitions. ReadOnly and ReadWrite* policies do not automatically change partition state and thus do not change rebalancing assignments for such partitions. Namespace : Apache.Ignite.Core.Cache.Configuration Assembly : Apache.Ignite.Core.dll Syntax public enum PartitionLossPolicy Fields Name Description Ignore If partition is lost, reset it's state and do not clear intermediate data. The result of reading from a previously lost and not cleared partition is undefined and may be different on different nodes in the cluster. ReadOnlyAll All writes to the cache will be failed with an exception. All reads will proceed as if all partitions were in a consistent state. The result of reading from a lost partition is undefined and may be different on different nodes in the cluster. ReadOnlySafe All writes to the cache will be failed with an exception, reads will only be allowed for keys in non-lost partitions. Reads from lost partitions will be failed with an exception. ReadWriteAll All reads and writes will proceed as if all partitions were in a consistent state. The result of reading from a lost partition is undefined and may be different on different nodes in the cluster. ReadWriteSafe All reads and writes will be allowed for keys in valid partitions. All reads and writes for keys in lost partitions will be failed with an exception."
  },
  "api/Apache.Ignite.Core.Cache.Configuration.html": {
    "href": "api/Apache.Ignite.Core.Cache.Configuration.html",
    "title": "Namespace Apache.Ignite.Core.Cache.Configuration | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Cache.Configuration Classes CacheConfiguration Defines grid cache configuration. CacheKeyConfiguration Configuration defining various aspects of cache keys without explicit usage of annotations on user classes. MemoryConfiguration A page memory configuration for an Apache Ignite node. The page memory is a manageable off-heap based memory architecture that divides all continuously allocated memory regions into pages of fixed size. An individual page can store one or many cache key-value entries that allows reusing the memory in the most efficient way and avoid memory fragmentation issues. By default, the page memory allocates a single continuous memory region. All the caches that will be configured in an application will be mapped to this memory region by default, thus, all the cache data will reside in that memory region. If initial size of the default memory region doesn't satisfy requirements or it's required to have multiple memory regions with different properties then MemoryPolicyConfiguration can be used for both scenarios. For instance, using memory policies you can define memory regions of different maximum size, eviction policies, swapping options, etc. Once you define a new memory region you can bind particular Ignite caches to it. To learn more about memory policies refer to MemoryPolicyConfiguration documentation. Obsolete, use DataStorageConfiguration . MemoryPolicyConfiguration Defines page memory policy configuration. See MemoryPolicies . Obsolete, use DataRegionConfiguration . NearCacheConfiguration Defines near cache configuration. Distributed cache can also be fronted by a Near cache, which is a smaller local cache that stores most recently or most frequently accessed data. Just like with a partitioned cache, the user can control the size of the near cache and its eviction policies. PlatformCacheConfiguration Native .NET cache configuration. Enables native .NET cache. Cache entries will be stored in deserialized form in CLR heap. When enabled on server nodes, all primary keys will be stored in platform memory as well. Same eviction policy applies to near cache entries for all keys on client nodes and non-primary keys on server nodes. Enabling this can greatly improve performance for key-value operations and scan queries, at the expense of RAM usage. Supported operations (async counterparts included): Get(TK) , TryGet(TK, out TV) GetAll(IEnumerable<TK>) ContainsKey(TK) , ContainsKeys(IEnumerable<TK>) LocalPeek(TK, CachePeekMode[]) , TryLocalPeek(TK, out TV, CachePeekMode[]) GetLocalEntries(CachePeekMode[]) GetLocalSize(CachePeekMode[]) Query(QueryBase) with ScanQuery<TK, TV> QueryAlias Represents cache query configuration alias. QueryEntity Query entity is a description of cache entry (composed of key and value) in a way of how it must be indexed and can be queried. QueryField Represents a queryable field. QueryIndex Represents cache query index configuration. QueryIndexField Represents an indexed field. QuerySqlFieldAttribute Marks field or property for SQL queries. Using this attribute is an alternative to Fields in CacheConfiguration . QueryTextFieldAttribute Marks field or property for Text queries. Using this attribute is an alternative to Fields in CacheConfiguration . Enums CacheAtomicityMode Cache atomicity mode. CacheMode Caching modes. CacheRebalanceMode Cache rebalance mode. When rebalancing is enabled (i.e. has value other than None ), distributed caches will attempt to rebalance all necessary values from other grid nodes. Replicated caches will try to load the full set of cache entries from other nodes, while partitioned caches will only load the entries for which current node is primary or backup. Note that rebalance mode only makes sense for Replicated and Partitioned caches. Caches with Local mode are local by definition and therefore cannot rebalance any values from neighboring nodes. CacheWriteSynchronizationMode Mode indicating how Ignite should wait for write replies from other nodes. DataPageEvictionMode Memory page eviction mode. Only data pages, that store key-value entries, are eligible for eviction. The other types of pages, like index or system pages, are not evictable. PartitionLossPolicy Partition loss policy. Defines how cache will behave in a case when one or more partitions are lost because of a node(s) failure. All Safe policies prevent a user from interaction with partial data in lost partitions until ResetLostPartitions(IEnumerable<String>) method is called. *All policies allow working with partial data in lost partitions. ReadOnly and ReadWrite* policies do not automatically change partition state and thus do not change rebalancing assignments for such partitions. QueryIndexType Query index type."
  },
  "api/Apache.Ignite.Core.Cache.Eviction.LruEvictionPolicy.html": {
    "href": "api/Apache.Ignite.Core.Cache.Eviction.LruEvictionPolicy.html",
    "title": "Class LruEvictionPolicy | Apache Ignite.NET",
    "keywords": "Class LruEvictionPolicy Eviction policy based on Least Recently Used (LRU) algorithm with batch eviction support. The eviction starts in the following cases: The cache size becomes { @code batchSize } elements greater than the maximum size; The size of cache entries in bytes becomes greater than the maximum memory size; The size of cache entry calculates as sum of key size and value size. Note: Batch eviction is enabled only if maximum memory limit isn't set. This implementation is very efficient since it does not create any additional table-like data structures. The LRU ordering information is maintained by attaching ordering metadata to cache entries. Inheritance System.Object EvictionPolicyBase LruEvictionPolicy Implements IEvictionPolicy Inherited Members EvictionPolicyBase.DefaultBatchSize EvictionPolicyBase.DefaultMaxSize EvictionPolicyBase.DefaultMaxMemorySize EvictionPolicyBase.BatchSize EvictionPolicyBase.MaxSize EvictionPolicyBase.MaxMemorySize System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Eviction Assembly : Apache.Ignite.Core.dll Syntax public class LruEvictionPolicy : EvictionPolicyBase, IEvictionPolicy Implements IEvictionPolicy"
  },
  "api/Apache.Ignite.Core.Cache.IMemoryMetrics.html": {
    "href": "api/Apache.Ignite.Core.Cache.IMemoryMetrics.html",
    "title": "Interface IMemoryMetrics | Apache Ignite.NET",
    "keywords": "Interface IMemoryMetrics Memory usage metrics. Obsolete, use IDataRegionMetrics . Namespace : Apache.Ignite.Core.Cache Assembly : Apache.Ignite.Core.dll Syntax [Obsolete(\"See IDataRegionMetrics.\")] public interface IMemoryMetrics Properties AllocationRate Gets the allocation rate, in pages per second. Declaration float AllocationRate { get; } Property Value Type Description System.Single EvictionRate Gets the eviction rate, in pages per second. Declaration float EvictionRate { get; } Property Value Type Description System.Single LargeEntriesPagesPercentage Gets the percentage of pages fully occupied by entries that are larger than page. Declaration float LargeEntriesPagesPercentage { get; } Property Value Type Description System.Single Name Gets the memory policy name. Declaration string Name { get; } Property Value Type Description System.String PageFillFactor Gets the page fill factor: the percentage of used space. Declaration float PageFillFactor { get; } Property Value Type Description System.Single TotalAllocatedPages Gets the count of allocated pages. Declaration long TotalAllocatedPages { get; } Property Value Type Description System.Int64"
  },
  "api/Apache.Ignite.Core.Cache.IMutableCacheEntry-2.html": {
    "href": "api/Apache.Ignite.Core.Cache.IMutableCacheEntry-2.html",
    "title": "Interface IMutableCacheEntry<TK, TV> | Apache Ignite.NET",
    "keywords": "Interface IMutableCacheEntry<TK, TV> Mutable representation of ICacheEntry<TK, TV> Inherited Members ICacheEntry<TK, TV>.Key ICacheEntry<TK, TV>.Value Namespace : Apache.Ignite.Core.Cache Assembly : Apache.Ignite.Core.dll Syntax public interface IMutableCacheEntry<out TK, TV> : ICacheEntry<TK, TV> Type Parameters Name Description TK Key type. TV Value type. Properties Exists Gets a value indicating whether cache entry exists in cache. Declaration bool Exists { get; } Property Value Type Description System.Boolean Value Gets, sets or replaces the value associated with the key. If Exists is false and setter is called then a mapping is added to the cache visible once the EntryProcessor completes. After setter invocation Exists will return true. Declaration TV Value { get; set; } Property Value Type Description TV Methods Remove() Removes the entry from the Cache. Declaration void Remove()"
  },
  "api/Apache.Ignite.Core.Cache.Query.SqlQuery.html": {
    "href": "api/Apache.Ignite.Core.Cache.Query.SqlQuery.html",
    "title": "Class SqlQuery | Apache Ignite.NET",
    "keywords": "Class SqlQuery SQL Query. Inheritance System.Object QueryBase SqlQuery Inherited Members QueryBase.DefaultPageSize QueryBase.Local QueryBase.PageSize System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Query Assembly : Apache.Ignite.Core.dll Syntax [Obsolete(\"Use SqlFieldsQuery instead. For strongly-typed queries use Apache.Ignite.Linq. SqlQuery is a limited subset of SqlFieldsQuery.\")] public class SqlQuery : QueryBase, IQueryBaseInternal Constructors SqlQuery(String, String, Boolean, Object[]) Constructor. Declaration public SqlQuery(string queryType, string sql, bool local, params object[] args) Parameters Type Name Description System.String queryType Type. System.String sql SQL. System.Boolean local Whether query should be executed locally. System.Object [] args Arguments. SqlQuery(String, String, Object[]) Constructor. Declaration public SqlQuery(string queryType, string sql, params object[] args) Parameters Type Name Description System.String queryType Type. System.String sql SQL. System.Object [] args Arguments. SqlQuery(Type, String, Boolean, Object[]) Constructor. Declaration public SqlQuery(Type queryType, string sql, bool local, params object[] args) Parameters Type Name Description System.Type queryType Type. System.String sql SQL. System.Boolean local Whether query should be executed locally. System.Object [] args Arguments. SqlQuery(Type, String, Object[]) Constructor. Declaration public SqlQuery(Type queryType, string sql, params object[] args) Parameters Type Name Description System.Type queryType Type. System.String sql SQL. System.Object [] args Arguments. Properties Arguments Arguments. Declaration public object[] Arguments { get; set; } Property Value Type Description System.Object [] EnableDistributedJoins Gets or sets a value indicating whether distributed joins should be enabled for this query. When disabled, join results will only contain colocated data (joins work locally). When enabled, joins work as expected, no matter how the data is distributed. Declaration public bool EnableDistributedJoins { get; set; } Property Value Type Description System.Boolean true if enable distributed joins should be enabled; otherwise, false . QueryType Type. Declaration public string QueryType { get; set; } Property Value Type Description System.String ReplicatedOnly Gets or sets a value indicating whether this query contains only replicated tables. This is a hint for potentially more effective execution. Declaration [Obsolete(\"No longer used as of Apache Ignite 2.8.\")] public bool ReplicatedOnly { get; set; } Property Value Type Description System.Boolean Sql SQL. Declaration public string Sql { get; set; } Property Value Type Description System.String Timeout Gets or sets the query timeout. Query will be automatically cancelled if the execution timeout is exceeded. Default is System.TimeSpan.Zero , which means no timeout. Declaration public TimeSpan Timeout { get; set; } Property Value Type Description System.TimeSpan Methods ToString() Returns a System.String that represents this instance. Declaration public override string ToString() Returns Type Description System.String A System.String that represents this instance. Overrides System.Object.ToString()"
  },
  "api/Apache.Ignite.Core.Cache.Query.TextQuery.html": {
    "href": "api/Apache.Ignite.Core.Cache.Query.TextQuery.html",
    "title": "Class TextQuery | Apache Ignite.NET",
    "keywords": "Class TextQuery Text query. Inheritance System.Object QueryBase TextQuery Inherited Members QueryBase.DefaultPageSize QueryBase.Local QueryBase.PageSize System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Query Assembly : Apache.Ignite.Core.dll Syntax public class TextQuery : QueryBase, IQueryBaseInternal Constructors TextQuery(String, String) Constructor. Declaration public TextQuery(string queryType, string text) Parameters Type Name Description System.String queryType Type. System.String text Text. TextQuery(String, String, Boolean) Constructor. Declaration public TextQuery(string queryType, string text, bool local) Parameters Type Name Description System.String queryType Type. System.String text Text. System.Boolean local Whether query should be executed locally. TextQuery(Type, String) Constructor. Declaration public TextQuery(Type queryType, string text) Parameters Type Name Description System.Type queryType Type. System.String text Text. TextQuery(Type, String, Boolean) Constructor. Declaration public TextQuery(Type queryType, string text, bool local) Parameters Type Name Description System.Type queryType Type. System.String text Text. System.Boolean local Whether query should be executed locally. Properties QueryType Type. Declaration public string QueryType { get; set; } Property Value Type Description System.String Text Text. Declaration public string Text { get; set; } Property Value Type Description System.String"
  },
  "api/Apache.Ignite.Core.Client.IIgniteClient.html": {
    "href": "api/Apache.Ignite.Core.Client.IIgniteClient.html",
    "title": "Interface IIgniteClient | Apache Ignite.NET",
    "keywords": "Interface IIgniteClient Main entry point for Ignite Thin Client APIs. You can obtain an instance of IIgniteClient through one of the StartClient() overloads. Instances of this class and all nested APIs are thread safe. Inherited Members System.IDisposable.Dispose() Namespace : Apache.Ignite.Core.Client Assembly : Apache.Ignite.Core.dll Syntax public interface IIgniteClient : IDisposable Properties LocalEndPoint Gets the current local EndPoint. Declaration EndPoint LocalEndPoint { get; } Property Value Type Description System.Net.EndPoint RemoteEndPoint Gets the current remote EndPoint. Declaration EndPoint RemoteEndPoint { get; } Property Value Type Description System.Net.EndPoint Methods CreateCache<TK, TV>(CacheClientConfiguration) Dynamically starts new cache using provided configuration. Declaration ICacheClient<TK, TV> CreateCache<TK, TV>(CacheClientConfiguration configuration) Parameters Type Name Description CacheClientConfiguration configuration Cache configuration. Returns Type Description ICacheClient <TK, TV> Existing or newly created cache. Type Parameters Name Description TK Cache key type. TV Cache value type. CreateCache<TK, TV>(String) Dynamically starts new cache using template configuration. Declaration ICacheClient<TK, TV> CreateCache<TK, TV>(string name) Parameters Type Name Description System.String name Cache name. Returns Type Description ICacheClient <TK, TV> Existing or newly created cache. Type Parameters Name Description TK Cache key type. TV Cache value type. DestroyCache(String) Destroys dynamically created (with CreateCache<TK, TV>(String) or GetOrCreateCache<TK, TV>(String) ) cache. Declaration void DestroyCache(string name) Parameters Type Name Description System.String name The name of the cache to stop. GetBinary() Gets Ignite binary services. Declaration IBinary GetBinary() Returns Type Description IBinary Instance of IBinary interface GetCache<TK, TV>(String) Gets the cache instance for the given name to work with keys and values of specified types. You can get instances of ICacheClient<TK, TV> of the same name, but with different key/value types. These will use the same named cache, but only allow working with entries of specified types. Attempt to retrieve an entry of incompatible type will result in System.InvalidCastException . Use GetCache<TK, TV>(String) in order to work with entries of arbitrary types. Declaration ICacheClient<TK, TV> GetCache<TK, TV>(string name) Parameters Type Name Description System.String name Cache name. Returns Type Description ICacheClient <TK, TV> Cache instance for given name. Type Parameters Name Description TK Cache key type. TV Cache value type. GetCacheNames() Gets the collection of names of currently available caches, or empty collection if there are no caches. Declaration ICollection<string> GetCacheNames() Returns Type Description System.Collections.Generic.ICollection < System.String > Collection of names of currently available caches. GetCluster() Gets Ignite cluster. Declaration IClientCluster GetCluster() Returns Type Description IClientCluster Instance of IClientCluster interface. GetCompute() Gets the compute API. Declaration IComputeClient GetCompute() Returns Type Description IComputeClient GetConfiguration() Gets the configuration. Declaration IgniteClientConfiguration GetConfiguration() Returns Type Description IgniteClientConfiguration GetConnections() Gets all active connections. Ignite Thin Client maintains connections to multiple server nodes when EnablePartitionAwareness is true. Declaration IEnumerable<IClientConnection> GetConnections() Returns Type Description System.Collections.Generic.IEnumerable < IClientConnection > GetOrCreateCache<TK, TV>(CacheClientConfiguration) Gets existing cache with the given name or creates new one using provided configuration. Declaration ICacheClient<TK, TV> GetOrCreateCache<TK, TV>(CacheClientConfiguration configuration) Parameters Type Name Description CacheClientConfiguration configuration Cache configuration. Returns Type Description ICacheClient <TK, TV> Existing or newly created cache. Type Parameters Name Description TK Cache key type. TV Cache value type. GetOrCreateCache<TK, TV>(String) Gets existing cache with the given name or creates new one using template configuration. Declaration ICacheClient<TK, TV> GetOrCreateCache<TK, TV>(string name) Parameters Type Name Description System.String name Cache name. Returns Type Description ICacheClient <TK, TV> Existing or newly created cache. Type Parameters Name Description TK Cache key type. TV Cache value type."
  },
  "api/Apache.Ignite.Core.Client.ISslStreamFactory.html": {
    "href": "api/Apache.Ignite.Core.Client.ISslStreamFactory.html",
    "title": "Interface ISslStreamFactory | Apache Ignite.NET",
    "keywords": "Interface ISslStreamFactory SSL Stream Factory defines how SSL connection is established. Namespace : Apache.Ignite.Core.Client Assembly : Apache.Ignite.Core.dll Syntax public interface ISslStreamFactory Methods Create(Stream, String) Creates the SSL stream. Declaration SslStream Create(Stream stream, string targetHost) Parameters Type Name Description System.IO.Stream stream The underlying raw stream. System.String targetHost Target host. Returns Type Description System.Net.Security.SslStream SSL stream."
  },
  "api/Apache.Ignite.Core.Common.ExceptionFactory.html": {
    "href": "api/Apache.Ignite.Core.Common.ExceptionFactory.html",
    "title": "Delegate ExceptionFactory | Apache Ignite.NET",
    "keywords": "Delegate ExceptionFactory Exception factory delegate. Namespace : Apache.Ignite.Core.Common Assembly : Apache.Ignite.Core.dll Syntax public delegate Exception ExceptionFactory(string className, string message, Exception inner, IIgnite ignite); Parameters Type Name Description System.String className Exception class name. System.String message Exception message. System.Exception inner Inner exception. IIgnite ignite Ignite instance. Returns Type Description System.Exception Exception."
  },
  "api/Apache.Ignite.Core.Common.IFactory-1.html": {
    "href": "api/Apache.Ignite.Core.Common.IFactory-1.html",
    "title": "Interface IFactory<T> | Apache Ignite.NET",
    "keywords": "Interface IFactory<T> Factory that produces instances of a specific type. Implementation can be passed over the wire and thus should be marked with System.SerializableAttribute . Namespace : Apache.Ignite.Core.Common Assembly : Apache.Ignite.Core.dll Syntax public interface IFactory<out T> Type Parameters Name Description T Methods CreateInstance() Creates an instance of type T . Declaration T CreateInstance() Returns Type Description T New instance of type T ."
  },
  "api/Apache.Ignite.Core.Compute.ComputeTaskAdapter-3.html": {
    "href": "api/Apache.Ignite.Core.Compute.ComputeTaskAdapter-3.html",
    "title": "Class ComputeTaskAdapter<TArg, TJobRes, TTaskRes> | Apache Ignite.NET",
    "keywords": "Class ComputeTaskAdapter<TArg, TJobRes, TTaskRes> Convenience adapter for IComputeTask<TArg, TJobRes, TRes> interface Inheritance System.Object ComputeTaskAdapter<TArg, TJobRes, TTaskRes> ComputeTaskSplitAdapter<TArg, TJobRes, TTaskRes> Implements IComputeTask <TArg, TJobRes, TTaskRes> Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Compute Assembly : Apache.Ignite.Core.dll Syntax public abstract class ComputeTaskAdapter<TArg, TJobRes, TTaskRes> : IComputeTask<TArg, TJobRes, TTaskRes> Type Parameters Name Description TArg TJobRes TTaskRes Methods Map(IList<IClusterNode>, TArg) This method is called to map or split Ignite task into multiple Ignite jobs. This is the first method that gets called when task execution starts. Declaration public abstract IDictionary<IComputeJob<TJobRes>, IClusterNode> Map(IList<IClusterNode> subgrid, TArg arg) Parameters Type Name Description System.Collections.Generic.IList < IClusterNode > subgrid Nodes available for this task execution. Note that order of nodes is guaranteed to be randomized by container. This ensures that every time you simply iterate through Ignite nodes, the order of nodes will be random which over time should result into all nodes being used equally. TArg arg Task execution argument. Can be null . This is the same argument as the one passed into ICompute.Execute() methods. Returns Type Description System.Collections.Generic.IDictionary < IComputeJob <TJobRes>, IClusterNode > Map of Ignite jobs assigned to subgrid node. If null or empty map is returned, exception will be thrown. OnResult(IComputeJobResult<TJobRes>, IList<IComputeJobResult<TJobRes>>) Default implementation which will wait for all jobs to complete before calling Reduce(IList<IComputeJobResult<TJobRes>>) method. If remote job resulted in exception Exception is not null ), then Failover policy will be returned if the exception is instance of ClusterTopologyException or ComputeExecutionRejectedException , which means that remote node either failed or job execution was rejected before it got a chance to start. In all other cases the exception will be rethrown which will ultimately cause task to fail. Declaration public virtual ComputeJobResultPolicy OnResult(IComputeJobResult<TJobRes> res, IList<IComputeJobResult<TJobRes>> rcvd) Parameters Type Name Description IComputeJobResult <TJobRes> res Received remote Ignite executable result. System.Collections.Generic.IList < IComputeJobResult <TJobRes>> rcvd All previously received results. Returns Type Description ComputeJobResultPolicy Result policy that dictates how to process further upcoming job results. Reduce(IList<IComputeJobResult<TJobRes>>) Reduces (or aggregates) results received so far into one compound result to be returned to caller via task. Note, that if some jobs did not succeed and could not be failed over then the list of results passed into this method will include the failed results. Otherwise, failed results will not be in the list. Declaration public abstract TTaskRes Reduce(IList<IComputeJobResult<TJobRes>> results) Parameters Type Name Description System.Collections.Generic.IList < IComputeJobResult <TJobRes>> results Received job results. Note that if task class has ComputeTaskNoResultCacheAttribute attribute, then this list will be empty. Returns Type Description TTaskRes Task result constructed from results of remote executions. Implements IComputeTask<TArg, TJobRes, TRes>"
  },
  "api/Apache.Ignite.Core.Compute.ComputeTaskCancelledException.html": {
    "href": "api/Apache.Ignite.Core.Compute.ComputeTaskCancelledException.html",
    "title": "Class ComputeTaskCancelledException | Apache Ignite.NET",
    "keywords": "Class ComputeTaskCancelledException This exception indicates that Ignite task was cancelled. Inheritance System.Object System.Exception IgniteException ComputeTaskCancelledException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Compute Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class ComputeTaskCancelledException : IgniteException, ISerializable, _Exception Constructors ComputeTaskCancelledException() Initializes a new instance of the ComputeTaskCancelledException class. Declaration public ComputeTaskCancelledException() ComputeTaskCancelledException(SerializationInfo, StreamingContext) Initializes a new instance of the ComputeTaskCancelledException class. Declaration protected ComputeTaskCancelledException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. ComputeTaskCancelledException(String) Initializes a new instance of the ComputeTaskCancelledException class. Declaration public ComputeTaskCancelledException(string message) Parameters Type Name Description System.String message The message that describes the error. ComputeTaskCancelledException(String, Exception) Initializes a new instance of the ComputeTaskCancelledException class. Declaration public ComputeTaskCancelledException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Configuration.ExecutorConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Configuration.ExecutorConfiguration.html",
    "title": "Class ExecutorConfiguration | Apache Ignite.NET",
    "keywords": "Class ExecutorConfiguration Custom thread pool configuration for compute tasks. See WithExecutor(String) . Inheritance System.Object ExecutorConfiguration Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Configuration Assembly : Apache.Ignite.Core.dll Syntax public class ExecutorConfiguration Properties Name Gets or sets the thread pool name. Can not be null and should be unique with respect to other custom executors. Declaration public string Name { get; set; } Property Value Type Description System.String Size Gets or sets the thread pool size. Defaults to DefaultThreadPoolSize Declaration public int Size { get; set; } Property Value Type Description System.Int32"
  },
  "api/Apache.Ignite.Core.Configuration.LockConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Configuration.LockConfiguration.html",
    "title": "Class LockConfiguration | Apache Ignite.NET",
    "keywords": "Class LockConfiguration IIgniteLock configuration. Inheritance System.Object LockConfiguration Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Configuration Assembly : Apache.Ignite.Core.dll Syntax public class LockConfiguration Constructors LockConfiguration() Initializes a new instance of LockConfiguration class. Declaration public LockConfiguration() LockConfiguration(LockConfiguration) Initializes a new instance of LockConfiguration class. Declaration public LockConfiguration(LockConfiguration other) Parameters Type Name Description LockConfiguration other Other configuration to copy. Properties IsFailoverSafe Gets or sets a value indicating whether the lock should be failover-safe: when true, if any node leaves topology, all locks already acquired by that node are silently released and become available for other nodes to acquire. When false, all threads on other nodes waiting to acquire the lock are interrupted. Declaration public bool IsFailoverSafe { get; set; } Property Value Type Description System.Boolean IsFair Gets or sets a value indicating whether the lock should be in fair mode. When true, under contention, locks favor granting access to the longest-waiting thread. Otherwise this lock does not guarantee any particular access order. Fair locks accessed by many threads may display lower overall throughput than those using the default setting, but have smaller variances in times to obtain locks and guarantee lack of starvation. Declaration public bool IsFair { get; set; } Property Value Type Description System.Boolean Name Gets or sets the cluster-wide lock name. Declaration public string Name { get; set; } Property Value Type Description System.String"
  },
  "api/Apache.Ignite.Core.DataStructures.IAtomicLong.html": {
    "href": "api/Apache.Ignite.Core.DataStructures.IAtomicLong.html",
    "title": "Interface IAtomicLong | Apache Ignite.NET",
    "keywords": "Interface IAtomicLong Represents a distributed atomic long value. Namespace : Apache.Ignite.Core.DataStructures Assembly : Apache.Ignite.Core.dll Syntax public interface IAtomicLong Properties Name Gets the name of this atomic long. Declaration string Name { get; } Property Value Type Description System.String Name of this atomic long. Methods Add(Int64) Adds specified value to the current value and returns result. Declaration long Add(long value) Parameters Type Name Description System.Int64 value The value to add. Returns Type Description System.Int64 Current value of the atomic long. Close() Closes this instance. Declaration void Close() CompareExchange(Int64, Int64) Compares current value with specified value for equality and, if they are equal, replaces current value. Declaration long CompareExchange(long value, long comparand) Parameters Type Name Description System.Int64 value The value to set. System.Int64 comparand The value that is compared to the current value. Returns Type Description System.Int64 Original value of the atomic long. Decrement() Decrements current value and returns result. Declaration long Decrement() Returns Type Description System.Int64 Current value of the atomic long. Exchange(Int64) Sets current value to a specified value and returns the original value. Declaration long Exchange(long value) Parameters Type Name Description System.Int64 value The value to set. Returns Type Description System.Int64 Original value of the atomic long. Increment() Increments current value and returns result. Declaration long Increment() Returns Type Description System.Int64 Current value of the atomic long. IsClosed() Determines whether this instance was removed from cache. Declaration bool IsClosed() Returns Type Description System.Boolean True if this atomic was removed from cache; otherwise, false. Read() Returns current value. Declaration long Read() Returns Type Description System.Int64 Current value of the atomic long."
  },
  "api/Apache.Ignite.Core.DataStructures.IAtomicReference-1.html": {
    "href": "api/Apache.Ignite.Core.DataStructures.IAtomicReference-1.html",
    "title": "Interface IAtomicReference<T> | Apache Ignite.NET",
    "keywords": "Interface IAtomicReference<T> Represents a named value in the distributed cache. Namespace : Apache.Ignite.Core.DataStructures Assembly : Apache.Ignite.Core.dll Syntax public interface IAtomicReference<T> Type Parameters Name Description T Properties IsClosed Determines whether this instance was removed from cache. Declaration bool IsClosed { get; } Property Value Type Description System.Boolean True if this atomic was removed from cache; otherwise, false. Name Gets the name of this atomic reference. Declaration string Name { get; } Property Value Type Description System.String Name of this atomic reference. Methods Close() Closes this instance. Declaration void Close() CompareExchange(T, T) Compares current value with specified value for equality and, if they are equal, replaces current value. Declaration T CompareExchange(T value, T comparand) Parameters Type Name Description T value The value to set. T comparand The value that is compared to the current value. Returns Type Description T Original value of the atomic reference. Read() Reads current value of an atomic reference. Declaration T Read() Returns Type Description T Current value of an atomic reference. Write(T) Writes current value of an atomic reference. Declaration void Write(T value) Parameters Type Name Description T value The value to set."
  },
  "api/Apache.Ignite.Core.Encryption.Keystore.html": {
    "href": "api/Apache.Ignite.Core.Encryption.Keystore.html",
    "title": "Namespace Apache.Ignite.Core.Encryption.Keystore | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Encryption.Keystore Classes KeystoreEncryptionSpi IEncryptionSPI implementation base on JDK provided cipher algorithm implementations."
  },
  "api/Apache.Ignite.Core.Encryption.html": {
    "href": "api/Apache.Ignite.Core.Encryption.html",
    "title": "Namespace Apache.Ignite.Core.Encryption | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Encryption Interfaces IEncryptionSpi Encryption SPI. Only predefined implementations are supported: KeystoreEncryptionSpi"
  },
  "api/Apache.Ignite.Core.Events.MemoryEventStorageSpi.html": {
    "href": "api/Apache.Ignite.Core.Events.MemoryEventStorageSpi.html",
    "title": "Class MemoryEventStorageSpi | Apache Ignite.NET",
    "keywords": "Class MemoryEventStorageSpi In-memory event storage. Inheritance System.Object MemoryEventStorageSpi Implements IEventStorageSpi Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Events Assembly : Apache.Ignite.Core.dll Syntax public class MemoryEventStorageSpi : IEventStorageSpi Constructors MemoryEventStorageSpi() Initializes a new instance of the MemoryEventStorageSpi class. Declaration public MemoryEventStorageSpi() Fields DefaultExpirationTimeout The default expiration timeout. Declaration public static readonly TimeSpan DefaultExpirationTimeout Field Value Type Description System.TimeSpan DefaultMaxEventCount Default event count limit. Declaration public const long DefaultMaxEventCount = 10000L Field Value Type Description System.Int64 Properties ExpirationTimeout Gets or sets the expiration timeout for stored events. Negative value means no expiration. Defaults to -1 second. Declaration public TimeSpan ExpirationTimeout { get; set; } Property Value Type Description System.TimeSpan MaxEventCount Gets or sets the maximum event count to store. When this limit is reached, older events are removed. Defaults to DefaultMaxEventCount . Declaration public long MaxEventCount { get; set; } Property Value Type Description System.Int64 Implements IEventStorageSpi"
  },
  "api/Apache.Ignite.Core.Events.NoopEventStorageSpi.html": {
    "href": "api/Apache.Ignite.Core.Events.NoopEventStorageSpi.html",
    "title": "Class NoopEventStorageSpi | Apache Ignite.NET",
    "keywords": "Class NoopEventStorageSpi No-op event storage interface, does not store anything. Inheritance System.Object NoopEventStorageSpi Implements IEventStorageSpi Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Events Assembly : Apache.Ignite.Core.dll Syntax public class NoopEventStorageSpi : IEventStorageSpi Implements IEventStorageSpi"
  },
  "api/Apache.Ignite.Core.Events.TaskEvent.html": {
    "href": "api/Apache.Ignite.Core.Events.TaskEvent.html",
    "title": "Class TaskEvent | Apache Ignite.NET",
    "keywords": "Class TaskEvent Ignite task event. Inheritance System.Object EventBase TaskEvent Implements IEvent System.IEquatable < EventBase > Inherited Members EventBase.Id EventBase.LocalOrder EventBase.Node EventBase.Message EventBase.Type EventBase.Name EventBase.Timestamp EventBase.Equals(EventBase) EventBase.Equals(Object) EventBase.GetHashCode() EventBase.ToString() EventBase.ReadNode(IBinaryRawReader) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Events Assembly : Apache.Ignite.Core.dll Syntax public sealed class TaskEvent : EventBase, IEvent, IEquatable<EventBase> Properties Internal Returns true if task is created by Ignite and is used for system needs. Declaration public bool Internal { get; } Property Value Type Description System.Boolean SubjectId Gets security subject ID initiated this task event, if available. This property is not available for TaskSessionAttrSet task event. Subject ID will be set either to node ID or client ID initiated task execution. Declaration public Guid? SubjectId { get; } Property Value Type Description System.Nullable < System.Guid > TaskClassName Gets name of task class that triggered this event. Declaration public string TaskClassName { get; } Property Value Type Description System.String TaskName Gets name of the task that triggered the event. Declaration public string TaskName { get; } Property Value Type Description System.String TaskSessionId Gets session ID of the task that triggered the event. Declaration public IgniteGuid? TaskSessionId { get; } Property Value Type Description System.Nullable < IgniteGuid > Methods ToShortString() Gets shortened version of ToString result. Declaration public override string ToShortString() Returns Type Description System.String Overrides EventBase.ToShortString() Implements IEvent System.IEquatable<T>"
  },
  "api/Apache.Ignite.Core.Events.html": {
    "href": "api/Apache.Ignite.Core.Events.html",
    "title": "Namespace Apache.Ignite.Core.Events | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Events Classes CacheEvent In-memory database (cache) event. CacheQueryExecutedEvent Cache query execution event. CacheQueryReadEvent Cache query read event. CacheRebalancingEvent In-memory database (cache) rebalancing event. Rebalance event happens every time there is a change CheckpointEvent Grid checkpoint event. DiscoveryEvent Grid discovery event. EventBase Base event implementation. EventType Contains event type constants. The decision to use class and not enumeration is dictated by allowing users to create their own events and/or event types which would be impossible with enumerations. Note that this interface defines not only individual type constants, but arrays of types as well to be conveniently used with IEvents methods. NOTE: all types in range from 1 to 1000 are reserved for internal Ignite events and should not be used by user-defined events. JobEvent Ignite job event. LocalEventListener Abstract local event listener holder for LocalEventListeners . Use LocalEventListener<T> derived class. LocalEventListener<T> Generic local event listener holder, see LocalEventListeners . MemoryEventStorageSpi In-memory event storage. NoopEventStorageSpi No-op event storage interface, does not store anything. TaskEvent Ignite task event. Interfaces IEvent Represents a Ignite event. IEventFilter<T> Represents an event filter. IEventListener<T> Represents an event listener. IEvents Provides functionality for event notifications on nodes defined by ClusterGroup . All members are thread-safe and may be used concurrently from multiple threads. IEventStorageSpi Manages local event storage. Only predefined implementations are supported: NoopEventStorageSpi , MemoryEventStorageSpi ."
  },
  "api/Apache.Ignite.Core.Messaging.IMessaging.html": {
    "href": "api/Apache.Ignite.Core.Messaging.IMessaging.html",
    "title": "Interface IMessaging | Apache Ignite.NET",
    "keywords": "Interface IMessaging Provides functionality for topic-based message exchange among nodes defined by IClusterGroup . Users can send ordered and unordered messages to various topics. Note that same topic name cannot be reused between ordered and unordered messages. All members are thread-safe and may be used concurrently from multiple threads. Namespace : Apache.Ignite.Core.Messaging Assembly : Apache.Ignite.Core.dll Syntax public interface IMessaging Properties ClusterGroup Gets the cluster group to which this instance belongs. Declaration IClusterGroup ClusterGroup { get; } Property Value Type Description IClusterGroup Methods LocalListen<T>(IMessageListener<T>, Object) Adds local listener for given topic on local node only. This listener will be notified whenever any node within the cluster group will send a message for a given topic to this node. Local listen subscription will happen regardless of whether local node belongs to this cluster group or not. Declaration void LocalListen<T>(IMessageListener<T> listener, object topic = null) Parameters Type Name Description IMessageListener <T> listener Predicate that is called on each received message. If predicate returns false, then it will be unsubscribed from any further notifications. System.Object topic Topic to subscribe to. Type Parameters Name Description T RemoteListen<T>(IMessageListener<T>, Object) Adds a message listener for a given topic to all nodes in the cluster group (possibly including this node if it belongs to the cluster group as well). This means that any node within this cluster group can send a message for a given topic and all nodes within the cluster group will receive listener notifications. Declaration Guid RemoteListen<T>(IMessageListener<T> listener, object topic = null) Parameters Type Name Description IMessageListener <T> listener Predicate that is called on each received message. If predicate returns false, then it will be unsubscribed from any further notifications. System.Object topic Topic to unsubscribe from. Returns Type Description System.Guid Operation ID that can be passed to StopRemoteListen(Guid) method to stop listening. Type Parameters Name Description T RemoteListenAsync<T>(IMessageListener<T>, Object) Adds a message listener for a given topic to all nodes in the cluster group (possibly including this node if it belongs to the cluster group as well). This means that any node within this cluster group can send a message for a given topic and all nodes within the cluster group will receive listener notifications. Declaration Task<Guid> RemoteListenAsync<T>(IMessageListener<T> listener, object topic = null) Parameters Type Name Description IMessageListener <T> listener Predicate that is called on each received message. If predicate returns false, then it will be unsubscribed from any further notifications. System.Object topic Topic to unsubscribe from. Returns Type Description System.Threading.Tasks.Task < System.Guid > Operation ID that can be passed to StopRemoteListen(Guid) method to stop listening. Type Parameters Name Description T Send(Object, Object) Sends a message with specified topic to the nodes in the underlying cluster group. Declaration void Send(object message, object topic = null) Parameters Type Name Description System.Object message Message to send. System.Object topic Topic to send to, null for default topic. SendAll(IEnumerable, Object) Sends messages with specified topic to the nodes in the underlying cluster group. Declaration void SendAll(IEnumerable messages, object topic = null) Parameters Type Name Description System.Collections.IEnumerable messages Messages to send. System.Object topic Topic to send to, null for default topic. SendOrdered(Object, Object, Nullable<TimeSpan>) Sends a message with specified topic to the nodes in the underlying cluster group. Messages sent with this method will arrive in the same order they were sent. Note that if a topic is used for ordered messages, then it cannot be reused for non-ordered messages. Declaration void SendOrdered(object message, object topic = null, TimeSpan? timeout = default (TimeSpan? )) Parameters Type Name Description System.Object message Message to send. System.Object topic Topic to send to, null for default topic. System.Nullable < System.TimeSpan > timeout Message timeout, null for for default value from configuration (IgniteConfiguration.getNetworkTimeout). StopLocalListen<T>(IMessageListener<T>, Object) Unregisters local listener for given topic on local node only. Declaration void StopLocalListen<T>(IMessageListener<T> listener, object topic = null) Parameters Type Name Description IMessageListener <T> listener Listener predicate. System.Object topic Topic to unsubscribe from. Type Parameters Name Description T StopRemoteListen(Guid) Unregisters all listeners identified with provided operation ID on all nodes in the cluster group. Declaration void StopRemoteListen(Guid opId) Parameters Type Name Description System.Guid opId Operation ID that was returned from RemoteListen<T>(IMessageListener<T>, Object) method. StopRemoteListenAsync(Guid) Unregisters all listeners identified with provided operation ID on all nodes in the cluster group. Declaration Task StopRemoteListenAsync(Guid opId) Parameters Type Name Description System.Guid opId Operation ID that was returned from RemoteListen<T>(IMessageListener<T>, Object) method. Returns Type Description System.Threading.Tasks.Task"
  },
  "api/Apache.Ignite.Core.Interop.IPlatformTarget.html": {
    "href": "api/Apache.Ignite.Core.Interop.IPlatformTarget.html",
    "title": "Interface IPlatformTarget | Apache Ignite.NET",
    "keywords": "Interface IPlatformTarget Interface to interoperate with org.apache.ignite.internal.processors.platform.PlatformTarget on Java side. Namespace : Apache.Ignite.Core.Interop Assembly : Apache.Ignite.Core.dll Syntax public interface IPlatformTarget Methods DoOutOpAsync<T>(Int32, Action<IBinaryRawWriter>, Func<IBinaryRawReader, T>) Performs asynchronous operation. Declaration Task<T> DoOutOpAsync<T>(int type, Action<IBinaryRawWriter> writeAction, Func<IBinaryRawReader, T> readAction) Parameters Type Name Description System.Int32 type Operation type code. System.Action < IBinaryRawWriter > writeAction Write action (can be null). System.Func < IBinaryRawReader , T> readAction Read function (can be null). Returns Type Description System.Threading.Tasks.Task <T> Task. Type Parameters Name Description T Result type DoOutOpAsync<T>(Int32, Action<IBinaryRawWriter>, Func<IBinaryRawReader, T>, CancellationToken) Performs asynchronous operation. Declaration Task<T> DoOutOpAsync<T>(int type, Action<IBinaryRawWriter> writeAction, Func<IBinaryRawReader, T> readAction, CancellationToken cancellationToken) Parameters Type Name Description System.Int32 type Operation type code. System.Action < IBinaryRawWriter > writeAction Write action (can be null). System.Func < IBinaryRawReader , T> readAction Read function (can be null). System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task <T> Task. Type Parameters Name Description T Result type InLongOutLong(Int32, Int64) Performs InLongOutLong operation. Declaration long InLongOutLong(int type, long val) Parameters Type Name Description System.Int32 type Operation type code. System.Int64 val Value. Returns Type Description System.Int64 Result. InObjectStreamOutObjectStream<T>(Int32, IPlatformTarget, Action<IBinaryRawWriter>, Func<IBinaryRawReader, IPlatformTarget, T>) Performs InObjectStreamOutObjectStream operation. Declaration T InObjectStreamOutObjectStream<T>(int type, IPlatformTarget arg, Action<IBinaryRawWriter> writeAction, Func<IBinaryRawReader, IPlatformTarget, T> readAction) Parameters Type Name Description System.Int32 type Operation type code. IPlatformTarget arg Target argument. System.Action < IBinaryRawWriter > writeAction Write action. System.Func < IBinaryRawReader , IPlatformTarget , T> readAction Read action. Returns Type Description T Result. Type Parameters Name Description T Result type. InStreamOutLong(Int32, Action<IBinaryRawWriter>) Performs InStreamOutLong operation. Declaration long InStreamOutLong(int type, Action<IBinaryRawWriter> writeAction) Parameters Type Name Description System.Int32 type Operation type code. System.Action < IBinaryRawWriter > writeAction Write action. Returns Type Description System.Int64 Result. InStreamOutObject(Int32, Action<IBinaryRawWriter>) Performs InStreamOutObject operation. Declaration IPlatformTarget InStreamOutObject(int type, Action<IBinaryRawWriter> writeAction) Parameters Type Name Description System.Int32 type Operation type code. System.Action < IBinaryRawWriter > writeAction Write action. Returns Type Description IPlatformTarget Result. InStreamOutStream<T>(Int32, Action<IBinaryRawWriter>, Func<IBinaryRawReader, T>) Performs InStreamOutStream operation. Declaration T InStreamOutStream<T>(int type, Action<IBinaryRawWriter> writeAction, Func<IBinaryRawReader, T> readAction) Parameters Type Name Description System.Int32 type Operation type code. System.Action < IBinaryRawWriter > writeAction Write action. System.Func < IBinaryRawReader , T> readAction Read action. Returns Type Description T Result. Type Parameters Name Description T Result type. OutObject(Int32) Performs the OutObject operation. Declaration IPlatformTarget OutObject(int type) Parameters Type Name Description System.Int32 type Operation type code. Returns Type Description IPlatformTarget Result. OutStream<T>(Int32, Func<IBinaryRawReader, T>) Performs OutStream operation. Declaration T OutStream<T>(int type, Func<IBinaryRawReader, T> readAction) Parameters Type Name Description System.Int32 type Operation type code. System.Func < IBinaryRawReader , T> readAction Read action. Returns Type Description T Result. Type Parameters Name Description T Result type."
  },
  "api/Apache.Ignite.Core.Interop.JavaObject.html": {
    "href": "api/Apache.Ignite.Core.Interop.JavaObject.html",
    "title": "Class JavaObject | Apache Ignite.NET",
    "keywords": "Class JavaObject Represents a Java object wrapper. JavaObject can be converted to Ignite filters and predicates which can be used on non-.NET Ignite nodes. Workflow is as follows: Instantiate specified Java class; Set property values; If the resulting object implements PlatformJavaObjectFactory, call create() method and use the result, otherwise use the original object. Inheritance System.Object JavaObject Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Interop Assembly : Apache.Ignite.Core.dll Syntax public class JavaObject Constructors JavaObject(String) Initializes a new instance of the JavaObject class. Declaration public JavaObject(string className) Parameters Type Name Description System.String className Name of the Java class. JavaObject(String, IDictionary<String, Object>) Initializes a new instance of the JavaObject class. Declaration public JavaObject(string className, IDictionary<string, object> properties) Parameters Type Name Description System.String className Name of the Java class. System.Collections.Generic.IDictionary < System.String , System.Object > properties The properties to set on the Java object. Properties ClassName Gets the Java class name. Declaration public string ClassName { get; } Property Value Type Description System.String Properties Gets the properties to be set on the Java object. Declaration public IDictionary<string, object> Properties { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.Object > Extension Methods ContinuousQueryExtensions.ToCacheEntryEventFilter<TK, TV>(JavaObject)"
  },
  "api/Apache.Ignite.Core.Interop.html": {
    "href": "api/Apache.Ignite.Core.Interop.html",
    "title": "Namespace Apache.Ignite.Core.Interop | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Interop Classes JavaObject Represents a Java object wrapper. JavaObject can be converted to Ignite filters and predicates which can be used on non-.NET Ignite nodes. Workflow is as follows: Instantiate specified Java class; Set property values; If the resulting object implements PlatformJavaObjectFactory, call create() method and use the result, otherwise use the original object. Interfaces IPlatformTarget Interface to interoperate with org.apache.ignite.internal.processors.platform.PlatformTarget on Java side."
  },
  "api/Apache.Ignite.Core.Lifecycle.ClientReconnectEventArgs.html": {
    "href": "api/Apache.Ignite.Core.Lifecycle.ClientReconnectEventArgs.html",
    "title": "Class ClientReconnectEventArgs | Apache Ignite.NET",
    "keywords": "Class ClientReconnectEventArgs Contains client reconnect event data. Inheritance System.Object System.EventArgs ClientReconnectEventArgs Inherited Members System.EventArgs.Empty System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Lifecycle Assembly : Apache.Ignite.Core.dll Syntax public class ClientReconnectEventArgs : EventArgs Constructors ClientReconnectEventArgs(Boolean) Initializes a new instance of the ClientReconnectEventArgs class. Declaration public ClientReconnectEventArgs(bool hasClusterRestarted) Parameters Type Name Description System.Boolean hasClusterRestarted Cluster restarted flag. Properties HasClusterRestarted Gets a value indicating whether this cluster has been restarted during reconnect. Declaration public bool HasClusterRestarted { get; } Property Value Type Description System.Boolean"
  },
  "api/Apache.Ignite.Core.Plugin.PluginCallback.html": {
    "href": "api/Apache.Ignite.Core.Plugin.PluginCallback.html",
    "title": "Delegate PluginCallback | Apache Ignite.NET",
    "keywords": "Delegate PluginCallback Plugin callback delegate. Namespace : Apache.Ignite.Core.Plugin Assembly : Apache.Ignite.Core.dll Syntax public delegate long PluginCallback(IBinaryRawReader input, IBinaryRawWriter output); Parameters Type Name Description IBinaryRawReader input Input reader. May be null. IBinaryRawWriter output Output writer. May be null. Returns Type Description System.Int64 Result code."
  },
  "api/Apache.Ignite.Core.Plugin.PluginNotFoundException.html": {
    "href": "api/Apache.Ignite.Core.Plugin.PluginNotFoundException.html",
    "title": "Class PluginNotFoundException | Apache Ignite.NET",
    "keywords": "Class PluginNotFoundException Indicates missing Ignite plugin. Inheritance System.Object System.Exception PluginNotFoundException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Plugin Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class PluginNotFoundException : Exception, ISerializable, _Exception Constructors PluginNotFoundException() Initializes a new instance of the PluginNotFoundException class. Declaration public PluginNotFoundException() PluginNotFoundException(SerializationInfo, StreamingContext) Initializes a new instance of the PluginNotFoundException class. Declaration protected PluginNotFoundException(SerializationInfo info, StreamingContext context) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info System.Runtime.Serialization.StreamingContext context PluginNotFoundException(String) Initializes a new instance of the PluginNotFoundException class. Declaration public PluginNotFoundException(string message) Parameters Type Name Description System.String message The message that describes the error. PluginNotFoundException(String, Exception) Initializes a new instance of the PluginNotFoundException class. Declaration public PluginNotFoundException(string message, Exception innerException) Parameters Type Name Description System.String message The error message that explains the reason for the exception. System.Exception innerException The exception that is the cause of the current exception, or a null reference if no inner exception is specified. Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Plugin.PluginProviderTypeAttribute.html": {
    "href": "api/Apache.Ignite.Core.Plugin.PluginProviderTypeAttribute.html",
    "title": "Class PluginProviderTypeAttribute | Apache Ignite.NET",
    "keywords": "Class PluginProviderTypeAttribute When applied to IPluginConfiguration , defines the type of IPluginProvider<TConfig> to instantiate. Inheritance System.Object System.Attribute PluginProviderTypeAttribute Implements System.Runtime.InteropServices._Attribute Inherited Members System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Boolean) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Boolean) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Module) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.IsDefined(System.Reflection.Module, System.Type) System.Attribute.IsDefined(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Boolean) System.Attribute.IsDefined(System.Reflection.Assembly, System.Type) System.Attribute.IsDefined(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.Equals(System.Object) System.Attribute.GetHashCode() System.Attribute.Match(System.Object) System.Attribute.IsDefaultAttribute() System.Attribute.System.Runtime.InteropServices._Attribute.GetTypeInfoCount(System.UInt32) System.Attribute.System.Runtime.InteropServices._Attribute.GetTypeInfo(System.UInt32, System.UInt32, System.IntPtr) System.Attribute.System.Runtime.InteropServices._Attribute.GetIDsOfNames(System.Guid, System.IntPtr, System.UInt32, System.UInt32, System.IntPtr) System.Attribute.System.Runtime.InteropServices._Attribute.Invoke(System.UInt32, System.Guid, System.UInt32, System.Int16, System.IntPtr, System.IntPtr, System.IntPtr, System.IntPtr) System.Attribute.TypeId System.Object.ToString() System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Plugin Assembly : Apache.Ignite.Core.dll Syntax [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct)] public sealed class PluginProviderTypeAttribute : Attribute, _Attribute Constructors PluginProviderTypeAttribute(Type) Initializes new instance of PluginProviderTypeAttribute class. Declaration public PluginProviderTypeAttribute(Type pluginProviderType) Parameters Type Name Description System.Type pluginProviderType Type of the plugin provider. Properties PluginProviderType Gets the plugin provider type. Declaration public Type PluginProviderType { get; } Property Value Type Description System.Type Implements System.Runtime.InteropServices._Attribute"
  },
  "api/Apache.Ignite.Core.Plugin.html": {
    "href": "api/Apache.Ignite.Core.Plugin.html",
    "title": "Namespace Apache.Ignite.Core.Plugin | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Plugin Classes PluginNotFoundException Indicates missing Ignite plugin. PluginProviderTypeAttribute When applied to IPluginConfiguration , defines the type of IPluginProvider<TConfig> to instantiate. Interfaces IPluginConfiguration Plugin configuration interface. Implementations should be linked to corresponding IPluginProvider<TConfig> via PluginProviderTypeAttribute . Example plugin implementation: [PluginProviderType(typeof(MyPluginProvider))] class MyPluginConfig : IPluginConfiguration { int CustomProperty { get; set; } } class MyPluginProvider : IPluginProvider<MyPluginConfig> { ... } IPluginContext<T> Plugin execution context. IPluginProvider<TConfig> Pluggable Ignite component. Should have parameterless constructor. Ignite plugins are loaded according to PluginConfigurations . Delegates PluginCallback Plugin callback delegate."
  },
  "api/Apache.Ignite.Core.html": {
    "href": "api/Apache.Ignite.Core.html",
    "title": "Namespace Apache.Ignite.Core | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core Classes IgniteConfiguration Grid configuration. IgniteConfigurationSection Ignite configuration section for app.config and web.config files. Ignition This class defines a factory for the main Ignite API. Use Start() method to start Ignite with default configuration. All members are thread-safe and may be used concurrently from multiple threads. Interfaces IDataRegionMetrics Memory usage metrics. IDataStorageMetrics Persistent store metrics. IIgnite Main entry point for all Ignite APIs. You can obtain an instance of IIgnite through GetIgnite() , or for named grids you can use GetIgnite(String) . Note that you can have multiple instances of IIgnite running in the same process by giving each instance a different name. All members are thread-safe and may be used concurrently from multiple threads. IIgniteLock Distributed reentrant monitor (lock). The functionality is similar to the standard System.Threading.Monitor class, but works across all cluster nodes. This API corresponds to IgniteLock in Java."
  },
  "api/Apache.Ignite.EntityFramework.DbCachingMode.html": {
    "href": "api/Apache.Ignite.EntityFramework.DbCachingMode.html",
    "title": "Enum DbCachingMode | Apache Ignite.NET",
    "keywords": "Enum DbCachingMode Represents a second-level caching strategy. Namespace : Apache.Ignite.EntityFramework Assembly : Apache.Ignite.EntityFramework.dll Syntax public enum DbCachingMode Fields Name Description ReadOnly Read-only mode, never invalidates. Database updates are ignored in this mode. Once query results have been cached, they are kept in cache until expired (forever when no expiration is specified). This mode is suitable for data that is not expected to change (like a list of countries and other dictionary data). ReadWrite Read-write mode. Cached data is invalidated when underlying entity set changes. This is \"normal\" cache mode which always provides correct query results. Keep in mind that this mode works correctly only when all database changes are performed via System.Data.Entity.DbContext with Ignite caching configured. Other database updates are not tracked."
  },
  "api/Apache.Ignite.EntityFramework.DbCachingPolicy.html": {
    "href": "api/Apache.Ignite.EntityFramework.DbCachingPolicy.html",
    "title": "Class DbCachingPolicy | Apache Ignite.NET",
    "keywords": "Class DbCachingPolicy Default caching policy implementation: everything is cached with ReadWrite , no expiration. Inheritance System.Object DbCachingPolicy Implements IDbCachingPolicy Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.EntityFramework Assembly : Apache.Ignite.EntityFramework.dll Syntax public class DbCachingPolicy : IDbCachingPolicy Methods CanBeCached(DbQueryInfo) Determines whether the specified query can be cached. Declaration public virtual bool CanBeCached(DbQueryInfo queryInfo) Parameters Type Name Description DbQueryInfo queryInfo The query information. Returns Type Description System.Boolean true if the specified query can be cached; otherwise, false . CanBeCached(DbQueryInfo, Int32) Determines whether specified number of rows should be cached. Declaration public virtual bool CanBeCached(DbQueryInfo queryInfo, int rowCount) Parameters Type Name Description DbQueryInfo queryInfo The query information. System.Int32 rowCount The count of fetched rows. Returns Type Description System.Boolean GetCachingMode(DbQueryInfo) Gets the caching strategy for a give query. Declaration public virtual DbCachingMode GetCachingMode(DbQueryInfo queryInfo) Parameters Type Name Description DbQueryInfo queryInfo The query information. Returns Type Description DbCachingMode Caching strategy for the query. GetExpirationTimeout(DbQueryInfo) Gets the absolute expiration timeout for a given query. Declaration public virtual TimeSpan GetExpirationTimeout(DbQueryInfo queryInfo) Parameters Type Name Description DbQueryInfo queryInfo The query information. Returns Type Description System.TimeSpan Expiration timeout. System.TimeSpan.MaxValue for no expiration. Implements IDbCachingPolicy"
  },
  "api/Apache.Ignite.EntityFramework.DbQueryInfo.html": {
    "href": "api/Apache.Ignite.EntityFramework.DbQueryInfo.html",
    "title": "Class DbQueryInfo | Apache Ignite.NET",
    "keywords": "Class DbQueryInfo Query info. Inheritance System.Object DbQueryInfo Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.EntityFramework Assembly : Apache.Ignite.EntityFramework.dll Syntax public class DbQueryInfo Properties AffectedEntitySets Gets the affected entity sets. Declaration public ICollection<EntitySetBase> AffectedEntitySets { get; } Property Value Type Description System.Collections.Generic.ICollection < System.Data.Entity.Core.Metadata.Edm.EntitySetBase > CommandText Gets the command text. Declaration public string CommandText { get; } Property Value Type Description System.String Parameters Gets the parameters. Declaration public DbParameterCollection Parameters { get; } Property Value Type Description System.Data.Common.DbParameterCollection"
  },
  "api/Apache.Ignite.Core.Binary.BinaryReflectiveSerializer.html": {
    "href": "api/Apache.Ignite.Core.Binary.BinaryReflectiveSerializer.html",
    "title": "Class BinaryReflectiveSerializer | Apache Ignite.NET",
    "keywords": "Class BinaryReflectiveSerializer Binary serializer which reflectively writes all fields except of ones with System.NonSerializedAttribute . Note that Java platform stores dates as a difference between current time and predefined absolute UTC date. Therefore, this difference is always the same for all time zones. .NET, in contrast, stores dates as a difference between current time and some predefined date relative to the current time zone. It means that this difference will be different as you change time zones. To overcome this discrepancy Ignite always converts .Net date to UTC form before serializing and allows user to decide whether to deserialize them in UTC or local form using ReadTimestamp(..., true/false) methods in IBinaryReader and IBinaryRawReader . This serializer always read dates in UTC form. It means that if you have local date in any field/property, it will be implicitly converted to UTC form after the first serialization-deserialization cycle. Inheritance System.Object BinaryReflectiveSerializer Implements IBinarySerializer Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Binary Assembly : Apache.Ignite.Core.dll Syntax public sealed class BinaryReflectiveSerializer : IBinarySerializer Properties ForceTimestamp Gets or sets a value indicating whether all DateTime values should be written as Timestamp. Timestamp format is required for values used in SQL and for interoperation with other platforms. Only UTC values are supported in Timestamp format. Other values will cause an exception on write. Normally serializer uses WriteObject<T>(String, T) for DateTime fields. This attribute changes the behavior to WriteTimestamp(String, Nullable<DateTime>) . See also TimestampAttribute . Declaration public bool ForceTimestamp { get; set; } Property Value Type Description System.Boolean RawMode Gets or value indicating whether raw mode serialization should be used. Raw mode does not include field names, improving performance and memory usage. However, queries do not support raw objects. Declaration public bool RawMode { get; set; } Property Value Type Description System.Boolean Methods ReadBinary(Object, IBinaryReader) Read binary object. Declaration public void ReadBinary(object obj, IBinaryReader reader) Parameters Type Name Description System.Object obj Instantiated empty object. IBinaryReader reader Binary reader. WriteBinary(Object, IBinaryWriter) Write binary object. Declaration public void WriteBinary(object obj, IBinaryWriter writer) Parameters Type Name Description System.Object obj Object. IBinaryWriter writer Binary writer. Implements IBinarySerializer"
  },
  "api/Apache.Ignite.Core.Binary.IBinaryObject.html": {
    "href": "api/Apache.Ignite.Core.Binary.IBinaryObject.html",
    "title": "Interface IBinaryObject | Apache Ignite.NET",
    "keywords": "Interface IBinaryObject Wrapper for serialized objects. Namespace : Apache.Ignite.Core.Binary Assembly : Apache.Ignite.Core.dll Syntax public interface IBinaryObject Properties EnumName Gets the name of the underlying enum value. Declaration string EnumName { get; } Property Value Type Description System.String The name of the enum value. EnumValue Gets the value of underlying enum in int form. Declaration int EnumValue { get; } Property Value Type Description System.Int32 The value of underlying enum in int form. Methods Deserialize<T>() Gets fully deserialized instance of binary object. Declaration T Deserialize<T>() Returns Type Description T Fully deserialized instance of binary object. Type Parameters Name Description T GetBinaryType() Gets object metadata. Declaration IBinaryType GetBinaryType() Returns Type Description IBinaryType Metadata. GetField<TF>(String) Gets field value. Declaration TF GetField<TF>(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description TF Field value. Type Parameters Name Description TF HasField(String) Determines whether the field with specified name exists in this instance. Declaration bool HasField(string fieldName) Parameters Type Name Description System.String fieldName Name of the field. Returns Type Description System.Boolean True if there is a field with specified name; false otherwise. ToBuilder() Creates a new IBinaryObjectBuilder based on this object. This is equivalent to GetBuilder(IBinaryObject) . Declaration IBinaryObjectBuilder ToBuilder() Returns Type Description IBinaryObjectBuilder New IBinaryObjectBuilder based on this object."
  },
  "api/Apache.Ignite.Core.Binary.TimestampAttribute.html": {
    "href": "api/Apache.Ignite.Core.Binary.TimestampAttribute.html",
    "title": "Class TimestampAttribute | Apache Ignite.NET",
    "keywords": "Class TimestampAttribute Instructs the serializer to write DateTime fields and properties in Timestamp format, which is interoperable with other platforms and works in SQL, but does not allow non-UTC values. When applied to a struct or a class, changes behavior for all fields and properties. Normally serializer uses WriteObject<T>(String, T) for DateTime fields. This attribute changes the behavior to WriteTimestamp(String, Nullable<DateTime>) . See also ForceTimestamp . Inheritance System.Object System.Attribute TimestampAttribute Implements System.Runtime.InteropServices._Attribute Inherited Members System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Boolean) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Boolean) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Module) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.IsDefined(System.Reflection.Module, System.Type) System.Attribute.IsDefined(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Boolean) System.Attribute.IsDefined(System.Reflection.Assembly, System.Type) System.Attribute.IsDefined(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.Equals(System.Object) System.Attribute.GetHashCode() System.Attribute.Match(System.Object) System.Attribute.IsDefaultAttribute() System.Attribute.System.Runtime.InteropServices._Attribute.GetTypeInfoCount(System.UInt32) System.Attribute.System.Runtime.InteropServices._Attribute.GetTypeInfo(System.UInt32, System.UInt32, System.IntPtr) System.Attribute.System.Runtime.InteropServices._Attribute.GetIDsOfNames(System.Guid, System.IntPtr, System.UInt32, System.UInt32, System.IntPtr) System.Attribute.System.Runtime.InteropServices._Attribute.Invoke(System.UInt32, System.Guid, System.UInt32, System.Int16, System.IntPtr, System.IntPtr, System.IntPtr, System.IntPtr) System.Attribute.TypeId System.Object.ToString() System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Binary Assembly : Apache.Ignite.Core.dll Syntax [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Property | AttributeTargets.Field)] public sealed class TimestampAttribute : Attribute, _Attribute Implements System.Runtime.InteropServices._Attribute"
  },
  "api/Apache.Ignite.Core.Cache.Affinity.Rendezvous.html": {
    "href": "api/Apache.Ignite.Core.Cache.Affinity.Rendezvous.html",
    "title": "Namespace Apache.Ignite.Core.Cache.Affinity.Rendezvous | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Cache.Affinity.Rendezvous Classes RendezvousAffinityFunction Affinity function for partitioned cache based on Highest Random Weight algorithm."
  },
  "api/Apache.Ignite.Core.Cache.Configuration.CacheKeyConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Cache.Configuration.CacheKeyConfiguration.html",
    "title": "Class CacheKeyConfiguration | Apache Ignite.NET",
    "keywords": "Class CacheKeyConfiguration Configuration defining various aspects of cache keys without explicit usage of annotations on user classes. Inheritance System.Object CacheKeyConfiguration Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Configuration Assembly : Apache.Ignite.Core.dll Syntax public sealed class CacheKeyConfiguration : IBinaryRawWriteAware, IBinaryRawWriteAware<IBinaryRawWriter> Constructors CacheKeyConfiguration() Initializes a new instance of the CacheKeyConfiguration class. Declaration public CacheKeyConfiguration() CacheKeyConfiguration(Type) Initializes a new instance of the CacheKeyConfiguration class, using specified type to look for AffinityKeyMappedAttribute . Declaration public CacheKeyConfiguration(Type keyType) Parameters Type Name Description System.Type keyType Properties AffinityKeyFieldName Gets or sets the name of the affinity key field. See also AffinityKeyMappedAttribute , AffinityKeyFieldName . Declaration public string AffinityKeyFieldName { get; set; } Property Value Type Description System.String TypeName Gets or sets the name of the key type. Declaration public string TypeName { get; set; } Property Value Type Description System.String"
  },
  "api/Apache.Ignite.Core.Cache.Configuration.PlatformCacheConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Cache.Configuration.PlatformCacheConfiguration.html",
    "title": "Class PlatformCacheConfiguration | Apache Ignite.NET",
    "keywords": "Class PlatformCacheConfiguration Native .NET cache configuration. Enables native .NET cache. Cache entries will be stored in deserialized form in CLR heap. When enabled on server nodes, all primary keys will be stored in platform memory as well. Same eviction policy applies to near cache entries for all keys on client nodes and non-primary keys on server nodes. Enabling this can greatly improve performance for key-value operations and scan queries, at the expense of RAM usage. Supported operations (async counterparts included): Get(TK) , TryGet(TK, out TV) GetAll(IEnumerable<TK>) ContainsKey(TK) , ContainsKeys(IEnumerable<TK>) LocalPeek(TK, CachePeekMode[]) , TryLocalPeek(TK, out TV, CachePeekMode[]) GetLocalEntries(CachePeekMode[]) GetLocalSize(CachePeekMode[]) Query(QueryBase) with ScanQuery<TK, TV> Inheritance System.Object PlatformCacheConfiguration Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Configuration Assembly : Apache.Ignite.Core.dll Syntax public class PlatformCacheConfiguration Constructors PlatformCacheConfiguration() Initializes a new instance of the PlatformCacheConfiguration class. Declaration public PlatformCacheConfiguration() Properties KeepBinary Gets or sets a value indicating whether platform cache should store keys and values in binary form. Declaration public bool KeepBinary { get; set; } Property Value Type Description System.Boolean KeyTypeName Gets or sets fully-qualified platform type name of the cache key used for the local map. When not set, object-based map is used, which can reduce performance and increase allocations due to boxing. Declaration public string KeyTypeName { get; set; } Property Value Type Description System.String ValueTypeName Gets or sets fully-qualified platform type name of the cache value used for the local map. When not set, object-based map is used, which can reduce performance and increase allocations due to boxing. Declaration public string ValueTypeName { get; set; } Property Value Type Description System.String"
  },
  "api/Apache.Ignite.Core.Cache.Event.CacheEntryEventType.html": {
    "href": "api/Apache.Ignite.Core.Cache.Event.CacheEntryEventType.html",
    "title": "Enum CacheEntryEventType | Apache Ignite.NET",
    "keywords": "Enum CacheEntryEventType Cache event type. Namespace : Apache.Ignite.Core.Cache.Event Assembly : Apache.Ignite.Core.dll Syntax public enum CacheEntryEventType Fields Name Description Created An event type indicating that the cache entry was created. Removed An event type indicating that the cache entry was removed. Updated An event type indicating that the cache entry was updated. i.e. a previous mapping existed."
  },
  "api/Apache.Ignite.Core.Cache.Eviction.html": {
    "href": "api/Apache.Ignite.Core.Cache.Eviction.html",
    "title": "Namespace Apache.Ignite.Core.Cache.Eviction | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Cache.Eviction Classes EvictionPolicyBase Base class for predefined eviction policies. FifoEvictionPolicy Eviction policy based on First In First Out (FIFO) algorithm with batch eviction support. The eviction starts in the following cases: The cache size becomes BatchSize elements greater than the maximum size; The size of cache entries in bytes becomes greater than the maximum memory size; The size of cache entry calculates as sum of key size and value size. Note: Batch eviction is enabled only if maximum memory limit isn't set. This implementation is very efficient since it does not create any additional table-like data structures. The FIFO ordering information is maintained by attaching ordering metadata to cache entries. LruEvictionPolicy Eviction policy based on Least Recently Used (LRU) algorithm with batch eviction support. The eviction starts in the following cases: The cache size becomes { @code batchSize } elements greater than the maximum size; The size of cache entries in bytes becomes greater than the maximum memory size; The size of cache entry calculates as sum of key size and value size. Note: Batch eviction is enabled only if maximum memory limit isn't set. This implementation is very efficient since it does not create any additional table-like data structures. The LRU ordering information is maintained by attaching ordering metadata to cache entries. Interfaces IEvictionPolicy Represents a cache eviction policy. Only predefined implementations are supported now: LruEvictionPolicy , FifoEvictionPolicy ."
  },
  "api/Apache.Ignite.Core.Cache.IQueryMetrics.html": {
    "href": "api/Apache.Ignite.Core.Cache.IQueryMetrics.html",
    "title": "Interface IQueryMetrics | Apache Ignite.NET",
    "keywords": "Interface IQueryMetrics Cache query metrics used to obtain statistics on query. Namespace : Apache.Ignite.Core.Cache Assembly : Apache.Ignite.Core.dll Syntax public interface IQueryMetrics Properties AverageTime Gets average execution time of query. Declaration double AverageTime { get; } Property Value Type Description System.Double Average execution time of query. Executions Gets total number execution of query. Declaration int Executions { get; } Property Value Type Description System.Int32 Number of executions. Fails Gets total number of times a query execution failed. Declaration int Fails { get; } Property Value Type Description System.Int32 Total number of times a query execution failed. MaximumTime Gets maximum execution time of query. Declaration long MaximumTime { get; } Property Value Type Description System.Int64 Maximum execution time of query. MinimumTime Gets minimum execution time of query. Declaration long MinimumTime { get; } Property Value Type Description System.Int64 Minimum execution time of query."
  },
  "api/Apache.Ignite.Core.Cache.Query.Continuous.ContinuousQuery-2.html": {
    "href": "api/Apache.Ignite.Core.Cache.Query.Continuous.ContinuousQuery-2.html",
    "title": "Class ContinuousQuery<TK, TV> | Apache Ignite.NET",
    "keywords": "Class ContinuousQuery<TK, TV> API for configuring continuous cache queries. Continuous queries allow to register a remote and a listener for cache update events. If an update event passes the filter, it will be sent to the node that executed the query and listener will be notified on that node. Continuous query can either be executed on the whole topology or only on local node. In case query is distributed and a new node joins, it will get the filter for the query during discovery process before it actually joins topology, so no updates will be missed. To execute the query use method QueryContinuous(ContinuousQuery<TK, TV>) . Inheritance System.Object ContinuousQuery ContinuousQuery<TK, TV> Inherited Members ContinuousQuery.DefaultBufferSize ContinuousQuery.DefaultTimeInterval ContinuousQuery.DefaultAutoUnsubscribe System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Query.Continuous Assembly : Apache.Ignite.Core.dll Syntax public class ContinuousQuery<TK, TV> : ContinuousQuery Type Parameters Name Description TK TV Constructors ContinuousQuery(ICacheEntryEventListener<TK, TV>) Constructor. Declaration public ContinuousQuery(ICacheEntryEventListener<TK, TV> lsnr) Parameters Type Name Description ICacheEntryEventListener <TK, TV> lsnr Listener. ContinuousQuery(ICacheEntryEventListener<TK, TV>, ICacheEntryEventFilter<TK, TV>) Constructor. Declaration public ContinuousQuery(ICacheEntryEventListener<TK, TV> lsnr, ICacheEntryEventFilter<TK, TV> filter) Parameters Type Name Description ICacheEntryEventListener <TK, TV> lsnr Listener. ICacheEntryEventFilter <TK, TV> filter Filter. ContinuousQuery(ICacheEntryEventListener<TK, TV>, ICacheEntryEventFilter<TK, TV>, Boolean) Constructor. Declaration public ContinuousQuery(ICacheEntryEventListener<TK, TV> lsnr, ICacheEntryEventFilter<TK, TV> filter, bool loc) Parameters Type Name Description ICacheEntryEventListener <TK, TV> lsnr Listener. ICacheEntryEventFilter <TK, TV> filter Filter. System.Boolean loc Whether query should be executed locally. ContinuousQuery(ICacheEntryEventListener<TK, TV>, Boolean) Constructor. Declaration public ContinuousQuery(ICacheEntryEventListener<TK, TV> lsnr, bool loc) Parameters Type Name Description ICacheEntryEventListener <TK, TV> lsnr Listener. System.Boolean loc Whether query should be executed locally. Properties AutoUnsubscribe Automatic unsubscribe flag. This flag indicates that query filters on remote nodes should be automatically unregistered if master node (node that initiated the query) leaves topology. If this flag is false , filters will be unregistered only when the query is cancelled from master node, and won't ever be unregistered if master node leaves grid. Defaults to true . Declaration public bool AutoUnsubscribe { get; set; } Property Value Type Description System.Boolean BufferSize Buffer size. When a cache update happens, entry is first put into a buffer. Entries from buffer will be sent to the master node only if the buffer is full or time provided via TimeInterval is exceeded. Defaults to DefaultBufferSize Declaration public int BufferSize { get; set; } Property Value Type Description System.Int32 Filter Optional cache entry filter. Invoked on a node where cache event occurred. If filter returns false , then cache entry event will not be sent to a node where continuous query has been started. Must be either binary or serializable in case query is not local. Declaration public ICacheEntryEventFilter<TK, TV> Filter { get; set; } Property Value Type Description ICacheEntryEventFilter <TK, TV> Listener Cache entry event listener. Invoked on the node where continuous query execution has been started. Declaration public ICacheEntryEventListener<TK, TV> Listener { get; set; } Property Value Type Description ICacheEntryEventListener <TK, TV> Local Local flag. When set query will be executed only on local node, so only local entries will be returned as query result. Defaults to false . Declaration public bool Local { get; set; } Property Value Type Description System.Boolean TimeInterval Time interval. When a cache update happens, entry is first put into a buffer. Entries from buffer will be sent to the master node only if the buffer is full (its size can be provided via BufferSize property) or time provided via this method is exceeded. Defaults to 0 which means that time check is disabled and entries will be sent only when buffer is full. Declaration public TimeSpan TimeInterval { get; set; } Property Value Type Description System.TimeSpan"
  },
  "api/Apache.Ignite.Core.Cache.Query.html": {
    "href": "api/Apache.Ignite.Core.Cache.Query.html",
    "title": "Namespace Apache.Ignite.Core.Cache.Query | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Cache.Query Classes QueryBase Base class for all Ignite cache entry queries. ScanQuery<TK, TV> Scan query over cache entries. Will accept all the entries if no predicate was set. SqlFieldsQuery SQL fields query. SqlQuery SQL Query. TextQuery Text query. Interfaces IFieldsQueryCursor Fields query cursor. IQueryCursor<T> Query result cursor. Can be processed either in iterative mode, or by taking all entries using GetAll() method. Note that you get enumerator or call GetAll() method only once during cursor lifetime. Any further attempts to get enumerator or all entries will result in exception. IQueryCursorField Query field descriptor. This descriptor is used to provide metadata about fields returned in query result."
  },
  "api/Apache.Ignite.Core.Cache.Store.CacheParallelLoadStoreAdapter-3.html": {
    "href": "api/Apache.Ignite.Core.Cache.Store.CacheParallelLoadStoreAdapter-3.html",
    "title": "Class CacheParallelLoadStoreAdapter<TK, TV, TData> | Apache Ignite.NET",
    "keywords": "Class CacheParallelLoadStoreAdapter<TK, TV, TData> Cache storage adapter with parallel loading in LoadAll method. Inheritance System.Object CacheParallelLoadStoreAdapter<TK, TV, TData> Implements ICacheStore <TK, TV> ICacheStore Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Store Assembly : Apache.Ignite.Core.dll Syntax public abstract class CacheParallelLoadStoreAdapter<TK, TV, TData> : ICacheStore<TK, TV>, ICacheStore Type Parameters Name Description TK Key type. TV Value type. TData Custom data entry type. Remarks LoadCache calls GetInputData() and iterates over it in parallel. GetInputData().GetEnumerator() result will be disposed if it implements IDisposable. Any additional post-LoadCache steps can be performed by overriding LoadCache method. Constructors CacheParallelLoadStoreAdapter() Constructor. Declaration protected CacheParallelLoadStoreAdapter() Properties MaxDegreeOfParallelism Gets or sets the maximum degree of parallelism to use in LoadCache. Must be either positive or -1 for unlimited amount of threads. Defaults to System.Environment.ProcessorCount . Declaration public int MaxDegreeOfParallelism { get; set; } Property Value Type Description System.Int32 Methods Delete(TK) Delete the cache entry from the external resource. Expiry of a cache entry is not a delete hence will not cause this method to be invoked. This method is invoked even if no mapping for the key exists. Declaration public virtual void Delete(TK key) Parameters Type Name Description TK key The key that is used for the delete operation. DeleteAll(IEnumerable<TK>) Remove data and keys from the external resource for the given collection of keys, if present. The order that individual deletes occur is undefined. If this operation fails (by throwing an exception) after a partial success, the writer must remove any successfully written entries from the entries collection so that the caching implementation knows what succeeded and can mutate the cache. Expiry of a cache entry is not a delete hence will not cause this method to be invoked. This method may include keys even if there is no mapping for that key, in which case the data represented by that key should be removed from the underlying resource. Declaration public virtual void DeleteAll(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys a mutable collection of keys for entries to delete. Upon invocation, it contains the keys to delete for write-through. Upon return the collection must only contain the keys that were not successfully deleted. GetInputData() Gets the input data sequence to be used in LoadCache. Declaration protected abstract IEnumerable<TData> GetInputData() Returns Type Description System.Collections.Generic.IEnumerable <TData> Load(TK) Loads an object. Application developers should implement this method to customize the loading of a value for a cache entry. This method is called by a cache when a requested entry is not in the cache. If the object can't be loaded null should be returned. Declaration public virtual TV Load(TK key) Parameters Type Name Description TK key The key identifying the object being loaded. Returns Type Description TV The value for the entry that is to be stored in the cache or null if the object can't be loaded LoadAll(IEnumerable<TK>) Loads multiple objects. Application developers should implement this method to customize the loading of cache entries. This method is called when the requested object is not in the cache. If an object can't be loaded, it is not returned in the resulting map. Declaration public virtual IEnumerable<KeyValuePair<TK, TV>> LoadAll(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys identifying the values to be loaded. Returns Type Description System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair <TK, TV>> A map of key, values to be stored in the cache. LoadCache(Action<TK, TV>, Object[]) Loads all values from underlying persistent storage. Note that keys are not passed, so it is up to implementation to figure out what to load. This method is called whenever LocalLoadCache(ICacheEntryFilter<TK, TV>, Object[]) method is invoked which is usually to preload the cache from persistent storage. This method is optional, and cache implementation does not depend on this method to do anything. For every loaded value method provided action should be called. The action will then make sure that the loaded value is stored in cache. Declaration public virtual void LoadCache(Action<TK, TV> act, params object[] args) Parameters Type Name Description System.Action <TK, TV> act Action for loaded values. System.Object [] args Optional arguemnts passed to LocalLoadCache(ICacheEntryFilter<TK, TV>, Object[]) method. Exceptions Type Condition CacheStoreException Parse(TData, Object[]) This method should transform raw data records from GetInputData into valid key-value pairs to be stored into cache. Declaration protected abstract KeyValuePair<TK, TV>? Parse(TData inputRecord, params object[] args) Parameters Type Name Description TData inputRecord System.Object [] args Returns Type Description System.Nullable < System.Collections.Generic.KeyValuePair <TK, TV>> SessionEnd(Boolean) Tells store to commit or rollback a transaction depending on the value of the commit parameter. Declaration public virtual void SessionEnd(bool commit) Parameters Type Name Description System.Boolean commit True if transaction should commit, false for rollback. Write(TK, TV) Write the specified value under the specified key to the external resource. This method is intended to support both key/value creation and value update. Declaration public virtual void Write(TK key, TV val) Parameters Type Name Description TK key Key to write. TV val Value to write. WriteAll(IEnumerable<KeyValuePair<TK, TV>>) Write the specified entries to the external resource. This method is intended to support both insert and update. The order that individual writes occur is undefined. If this operation fails (by throwing an exception) after a partial success, the writer must remove any successfully written entries from the entries collection so that the caching implementation knows what succeeded and can mutate the cache. Declaration public virtual void WriteAll(IEnumerable<KeyValuePair<TK, TV>> entries) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair <TK, TV>> entries a mutable collection to write. Upon invocation, it contains the entries to write for write-through. Upon return the collection must only contain entries that were not successfully written. (see partial success above). Implements ICacheStore<TK, TV> ICacheStore"
  },
  "api/Apache.Ignite.Core.Client.Compute.html": {
    "href": "api/Apache.Ignite.Core.Client.Compute.html",
    "title": "Namespace Apache.Ignite.Core.Client.Compute | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Client.Compute Interfaces IComputeClient Client Compute API. See GetCompute() and GetCompute() ."
  },
  "api/Apache.Ignite.Core.Client.IClientCluster.html": {
    "href": "api/Apache.Ignite.Core.Client.IClientCluster.html",
    "title": "Interface IClientCluster | Apache Ignite.NET",
    "keywords": "Interface IClientCluster Represents whole cluster (group of all nodes in a cluster). Inherited Members IClientClusterGroup.ForAttribute(String, String) IClientClusterGroup.ForDotNet() IClientClusterGroup.ForServers() IClientClusterGroup.ForPredicate(Func<IClientClusterNode, Boolean>) IClientClusterGroup.GetNodes() IClientClusterGroup.GetNode(Guid) IClientClusterGroup.GetNode() IClientClusterGroup.GetCompute() Namespace : Apache.Ignite.Core.Client Assembly : Apache.Ignite.Core.dll Syntax public interface IClientCluster : IClientClusterGroup Methods DisableWal(String) Disables write-ahead logging for specified cache. When WAL is disabled, changes are not logged to disk. This significantly improves cache update speed.The drawback is absence of local crash-recovery guarantees. If node is crashed, local content of WAL-disabled cache will be cleared on restart to avoid data corruption. Internally this method will wait for all current cache operations to finish and prevent new cache operations from being executed.Then checkpoint is initiated to flush all data to disk.Control is returned to the callee when all dirty pages are prepared for checkpoint, but not necessarily flushed to disk. WAL state can be changed only for persistent caches. Declaration bool DisableWal(string cacheName) Parameters Type Name Description System.String cacheName Name of the cache. Returns Type Description System.Boolean Whether WAL was enabled by this call. EnableWal(String) Enables write-ahead logging for specified cache. Restoring crash-recovery guarantees of a previous call to DisableWal(String) . Internally this method will wait for all current cache operations to finish and prevent new cache operations from being executed. Then checkpoint is initiated to flush all data to disk. Control is returned to the callee when all data is persisted to disk. WAL state can be changed only for persistent caches. Declaration bool EnableWal(string cacheName) Parameters Type Name Description System.String cacheName Name of the cache. Returns Type Description System.Boolean Whether WAL was disabled by this call. IsActive() Determines whether this grid is in active state. Declaration bool IsActive() Returns Type Description System.Boolean true if the grid is active; otherwise, false . IsWalEnabled(String) Determines whether write-ahead logging is enabled for specified cache. Declaration bool IsWalEnabled(string cacheName) Parameters Type Name Description System.String cacheName Name of the cache. Returns Type Description System.Boolean SetActive(Boolean) Changes Ignite grid state to active or inactive. Declaration void SetActive(bool isActive) Parameters Type Name Description System.Boolean isActive"
  },
  "api/Apache.Ignite.Core.Cluster.html": {
    "href": "api/Apache.Ignite.Core.Cluster.html",
    "title": "Namespace Apache.Ignite.Core.Cluster | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Cluster Classes ClusterGroupEmptyException Indicates an illegal call on empty projection. Thrown by projection when operation that requires at least one node is called on empty projection. ClusterTopologyException Indicates an error with grid topology (e.g., crashed node, etc.) Interfaces IBaselineNode Baseline topology node (see GetBaselineTopology() ). ICluster Represents whole cluster (group of all nodes in a cluster). All members are thread-safe and may be used concurrently from multiple threads. IClusterGroup Defines grid projection which represents a common functionality over a group of nodes. Grid projection allows to group Ignite nodes into various subgroups to perform distributed operations on them. All ForXXX(...)' methods will create a child grid projection from existing projection. If you create a new projection from current one, then the resulting projection will include a subset of nodes from current projection. The following code snippet shows how to create grid projections: var g = Ignition.GetIgnite(); // Projection over remote nodes. var remoteNodes = g.ForRemotes(); // Projection over random remote node. var randomNode = g.ForRandom(); // Projection over all nodes with cache named \"myCache\" enabled. var cacheNodes = g.ForCacheNodes(\"myCache\"); // Projection over all nodes that have user attribute \"group\" set to value \"worker\". var workerNodes = g.ForAttribute(\"group\", \"worker\"); Grid projection provides functionality for executing tasks and closures over nodes in this projection using GetCompute() . All members are thread-safe and may be used concurrently from multiple threads. IClusterMetrics Represents runtime information of a cluster. Apart from obvious statistical value, this information is used for implementation of load balancing, failover, and collision SPIs. For example, collision SPI in combination with fail-over SPI could check if other nodes don't have any active or waiting jobs and fail-over some jobs to those nodes. Node metrics for any node can be accessed via GetMetrics() method. Keep in mind that there will be a certain network delay (usually equal to heartbeat delay) for the accuracy of node metrics. However, when accessing metrics on local node the metrics are always accurate and up to date. IClusterNode Interface representing a single cluster node. Use GetAttribute<T>(String) or GetMetrics() to get static and dynamic information about remote nodes. You can get a list of all nodes in grid by calling GetNodes() on IIgnite instance. You can use Ignite node attributes to provide static information about a node. This information is initialized once within grid, during node startup, and remains the same throughout the lifetime of a node. All members are thread-safe and may be used concurrently from multiple threads. IClusterNodeFilter Represents cluster node filter."
  },
  "api/Apache.Ignite.Core.Common.ClientDisconnectedException.html": {
    "href": "api/Apache.Ignite.Core.Common.ClientDisconnectedException.html",
    "title": "Class ClientDisconnectedException | Apache Ignite.NET",
    "keywords": "Class ClientDisconnectedException Indicates that client-mode local node has been disconnected from the cluster. Inheritance System.Object System.Exception IgniteException ClientDisconnectedException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Common Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public sealed class ClientDisconnectedException : IgniteException, ISerializable, _Exception Constructors ClientDisconnectedException() Initializes a new instance of the ClientDisconnectedException class. Declaration public ClientDisconnectedException() ClientDisconnectedException(String) Initializes a new instance of the ClientDisconnectedException class. Declaration public ClientDisconnectedException(string message) Parameters Type Name Description System.String message The message that describes the error. ClientDisconnectedException(String, Exception) Initializes a new instance of the ClientDisconnectedException class. Declaration public ClientDisconnectedException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. ClientDisconnectedException(String, Exception, Task<Boolean>) Initializes a new instance of the ClientDisconnectedException class. Declaration public ClientDisconnectedException(string message, Exception cause, Task<bool> clientReconnectTask) Parameters Type Name Description System.String message The message. System.Exception cause The cause. System.Threading.Tasks.Task < System.Boolean > clientReconnectTask The client reconnect task. Properties ClientReconnectTask Gets the client reconnect task, if present. Declaration public Task<bool> ClientReconnectTask { get; } Property Value Type Description System.Threading.Tasks.Task < System.Boolean > The client reconnect task, or null. Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Compute.ComputeJobFailoverException.html": {
    "href": "api/Apache.Ignite.Core.Compute.ComputeJobFailoverException.html",
    "title": "Class ComputeJobFailoverException | Apache Ignite.NET",
    "keywords": "Class ComputeJobFailoverException This runtime exception can be thrown from Execute() method to force job failover to another node within task topology. IComputeFunc<TArg, TRes> or IComputeFunc<TRes> passed into any of the ICompute methods can also throw this exception to force failover. Inheritance System.Object System.Exception IgniteException ComputeJobFailoverException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Compute Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class ComputeJobFailoverException : IgniteException, ISerializable, _Exception Constructors ComputeJobFailoverException() Initializes a new instance of the ComputeJobFailoverException class. Declaration public ComputeJobFailoverException() ComputeJobFailoverException(SerializationInfo, StreamingContext) Initializes a new instance of the ComputeJobFailoverException class. Declaration protected ComputeJobFailoverException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. ComputeJobFailoverException(String) Initializes a new instance of the ComputeJobFailoverException class. Declaration public ComputeJobFailoverException(string message) Parameters Type Name Description System.String message The message that describes the error. ComputeJobFailoverException(String, Exception) Initializes a new instance of the ComputeJobFailoverException class. Declaration public ComputeJobFailoverException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Compute.ComputeJobResultPolicy.html": {
    "href": "api/Apache.Ignite.Core.Compute.ComputeJobResultPolicy.html",
    "title": "Enum ComputeJobResultPolicy | Apache Ignite.NET",
    "keywords": "Enum ComputeJobResultPolicy This enumeration provides different types of actions following the last received job result. See OnResult(IComputeJobResult<TJobRes>, IList<IComputeJobResult<TJobRes>>) for more details. Namespace : Apache.Ignite.Core.Compute Assembly : Apache.Ignite.Core.dll Syntax public enum ComputeJobResultPolicy Fields Name Description Failover Fail-over job to execute on another node. Reduce Ignore all not yet received results and start reducing results. Wait Wait for results if any are still expected. If all results have been received - it will start reducing results."
  },
  "api/Apache.Ignite.Core.Configuration.CheckpointWriteOrder.html": {
    "href": "api/Apache.Ignite.Core.Configuration.CheckpointWriteOrder.html",
    "title": "Enum CheckpointWriteOrder | Apache Ignite.NET",
    "keywords": "Enum CheckpointWriteOrder Defines checkpoint pages order on disk. Namespace : Apache.Ignite.Core.Configuration Assembly : Apache.Ignite.Core.dll Syntax public enum CheckpointWriteOrder Fields Name Description Random Pages are written in order provided by checkpoint pages collection iterator (which is basically a hashtable). Sequential All checkpoint pages are collected into single list and sorted by page index. Provides almost sequential disk writes, which can be much faster on some SSD models."
  },
  "api/Apache.Ignite.Core.Configuration.ClientConnectorConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Configuration.ClientConnectorConfiguration.html",
    "title": "Class ClientConnectorConfiguration | Apache Ignite.NET",
    "keywords": "Class ClientConnectorConfiguration Client connector configuration (ODBC, JDBC, Thin Client). Inheritance System.Object ClientConnectorConfiguration Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Configuration Assembly : Apache.Ignite.Core.dll Syntax public class ClientConnectorConfiguration Constructors ClientConnectorConfiguration() Initializes a new instance of the ClientConnectorConfiguration class. Declaration public ClientConnectorConfiguration() Fields DefaultHandshakeTimeout Default handshake timeout. Declaration public static readonly TimeSpan DefaultHandshakeTimeout Field Value Type Description System.TimeSpan DefaultIdleTimeout Default idle timeout. Declaration public static readonly TimeSpan DefaultIdleTimeout Field Value Type Description System.TimeSpan DefaultJdbcEnabled Default value for JdbcEnabled property. Declaration public const bool DefaultJdbcEnabled = true Field Value Type Description System.Boolean DefaultMaxOpenCursorsPerConnection Default maximum number of open cursors per connection. Declaration public const int DefaultMaxOpenCursorsPerConnection = 128 Field Value Type Description System.Int32 DefaultOdbcEnabled Default value for OdbcEnabled property. Declaration public const bool DefaultOdbcEnabled = true Field Value Type Description System.Boolean DefaultPort Default port. Declaration public const int DefaultPort = 10800 Field Value Type Description System.Int32 DefaultPortRange Default port range. Declaration public const int DefaultPortRange = 100 Field Value Type Description System.Int32 DefaultSocketBufferSize Default socket buffer size. Declaration public const int DefaultSocketBufferSize = 0 Field Value Type Description System.Int32 DefaultTcpNoDelay Default value of TcpNoDelay property. Declaration public const bool DefaultTcpNoDelay = true Field Value Type Description System.Boolean DefaultThinClientEnabled Default value for ThinClientEnabled property. Declaration public const bool DefaultThinClientEnabled = true Field Value Type Description System.Boolean DefaultThreadPoolSize Default SQL connector thread pool size. Declaration public static readonly int DefaultThreadPoolSize Field Value Type Description System.Int32 Properties HandshakeTimeout Gets or sets handshake timeout for client connections on the server side. If no successful handshake is performed within this timeout upon successful establishment of TCP connection the connection is closed. Declaration public TimeSpan HandshakeTimeout { get; set; } Property Value Type Description System.TimeSpan Host Gets or sets the host. Declaration public string Host { get; set; } Property Value Type Description System.String IdleTimeout Gets or sets idle timeout for client connections on the server side. If no packets come within idle timeout, the connection is closed by the server. Zero or negative means no timeout. Declaration public TimeSpan IdleTimeout { get; set; } Property Value Type Description System.TimeSpan JdbcEnabled Gets or sets a value indicating whether JDBC connector is enabled. Declaration public bool JdbcEnabled { get; set; } Property Value Type Description System.Boolean MaxOpenCursorsPerConnection Gets or sets the maximum open cursors per connection. Declaration public int MaxOpenCursorsPerConnection { get; set; } Property Value Type Description System.Int32 OdbcEnabled Gets or sets a value indicating whether ODBC connector is enabled. Declaration public bool OdbcEnabled { get; set; } Property Value Type Description System.Boolean Port Gets or sets the port. Declaration public int Port { get; set; } Property Value Type Description System.Int32 PortRange Gets or sets the port range. Declaration public int PortRange { get; set; } Property Value Type Description System.Int32 SocketReceiveBufferSize Gets or sets the size of the socket receive buffer. When set to 0, operating system default is used. Declaration public int SocketReceiveBufferSize { get; set; } Property Value Type Description System.Int32 SocketSendBufferSize Gets or sets the size of the socket send buffer. When set to 0, operating system default is used. Declaration public int SocketSendBufferSize { get; set; } Property Value Type Description System.Int32 TcpNoDelay Gets or sets the value for TCP_NODELAY socket option. Each socket will be opened using provided value. Setting this option to true disables Nagle's algorithm for socket decreasing latency and delivery time for small messages. For systems that work under heavy network load it is advisable to set this value to false . Declaration public bool TcpNoDelay { get; set; } Property Value Type Description System.Boolean ThinClientConfiguration Gets or sets thin client specific configuration. Declaration public ThinClientConfiguration ThinClientConfiguration { get; set; } Property Value Type Description ThinClientConfiguration ThinClientEnabled Gets or sets a value indicating whether thin client connector is enabled. Declaration public bool ThinClientEnabled { get; set; } Property Value Type Description System.Boolean ThreadPoolSize Gets or sets the size of the thread pool. Declaration public int ThreadPoolSize { get; set; } Property Value Type Description System.Int32"
  },
  "api/Apache.Ignite.Core.Binary.BinaryConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Binary.BinaryConfiguration.html",
    "title": "Class BinaryConfiguration | Apache Ignite.NET",
    "keywords": "Class BinaryConfiguration Binary type configuration. Inheritance System.Object BinaryConfiguration Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Binary Assembly : Apache.Ignite.Core.dll Syntax public class BinaryConfiguration Constructors BinaryConfiguration() Initializes a new instance of the BinaryConfiguration class. Declaration public BinaryConfiguration() BinaryConfiguration(BinaryConfiguration) Initializes a new instance of the BinaryConfiguration class. Declaration public BinaryConfiguration(BinaryConfiguration cfg) Parameters Type Name Description BinaryConfiguration cfg The binary configuration to copy. BinaryConfiguration(Type[]) Initializes a new instance of the BinaryConfiguration class. Declaration public BinaryConfiguration(params Type[] binaryTypes) Parameters Type Name Description System.Type [] binaryTypes Binary types to register. Fields DefaultCompactFooter Default CompactFooter setting. Declaration public const bool DefaultCompactFooter = true Field Value Type Description System.Boolean DefaultKeepDeserialized Default KeepDeserialized setting. Declaration public const bool DefaultKeepDeserialized = true Field Value Type Description System.Boolean Properties CompactFooter Gets or sets a value indicating whether to write footers in compact form. When enabled, Ignite will not write fields metadata when serializing objects, because internally metadata is distributed inside cluster. This increases serialization performance. WARNING! This mode should be disabled when already serialized data can be taken from some external sources (e.g.cache store which stores data in binary form, data center replication, etc.). Otherwise binary objects without any associated metadata could could not be deserialized. Declaration public bool CompactFooter { get; set; } Property Value Type Description System.Boolean IdMapper Default ID mapper. Declaration public IBinaryIdMapper IdMapper { get; set; } Property Value Type Description IBinaryIdMapper KeepDeserialized Default keep deserialized flag. Declaration public bool KeepDeserialized { get; set; } Property Value Type Description System.Boolean NameMapper Default name mapper. Declaration public IBinaryNameMapper NameMapper { get; set; } Property Value Type Description IBinaryNameMapper Serializer Default serializer. Declaration public IBinarySerializer Serializer { get; set; } Property Value Type Description IBinarySerializer TypeConfigurations Type configurations. Declaration public ICollection<BinaryTypeConfiguration> TypeConfigurations { get; set; } Property Value Type Description System.Collections.Generic.ICollection < BinaryTypeConfiguration > Types Gets or sets a collection of assembly-qualified type names (the result of System.Type.AssemblyQualifiedName ) for binarizable types. Shorthand for creating BinaryTypeConfiguration . Declaration public ICollection<string> Types { get; set; } Property Value Type Description System.Collections.Generic.ICollection < System.String >"
  },
  "api/Apache.Ignite.Core.Binary.IBinarySerializer.html": {
    "href": "api/Apache.Ignite.Core.Binary.IBinarySerializer.html",
    "title": "Interface IBinarySerializer | Apache Ignite.NET",
    "keywords": "Interface IBinarySerializer Binary serializer. Namespace : Apache.Ignite.Core.Binary Assembly : Apache.Ignite.Core.dll Syntax public interface IBinarySerializer Methods ReadBinary(Object, IBinaryReader) Read binary object. Declaration void ReadBinary(object obj, IBinaryReader reader) Parameters Type Name Description System.Object obj Instantiated empty object. IBinaryReader reader Binary reader. WriteBinary(Object, IBinaryWriter) Write binary object. Declaration void WriteBinary(object obj, IBinaryWriter writer) Parameters Type Name Description System.Object obj Object. IBinaryWriter writer Binary writer."
  },
  "api/Apache.Ignite.Core.Cache.Affinity.AffinityFunctionContext.html": {
    "href": "api/Apache.Ignite.Core.Cache.Affinity.AffinityFunctionContext.html",
    "title": "Class AffinityFunctionContext | Apache Ignite.NET",
    "keywords": "Class AffinityFunctionContext Affinity function context. Inheritance System.Object AffinityFunctionContext Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Affinity Assembly : Apache.Ignite.Core.dll Syntax public class AffinityFunctionContext Properties Backups Gets number of backups for new assignment. Declaration public int Backups { get; } Property Value Type Description System.Int32 CurrentTopologySnapshot Gets the current topology snapshot. Snapshot will contain only nodes on which the particular cache is configured. List of passed nodes is guaranteed to be sorted in a same order on all nodes on which partition assignment is performed. Declaration public ICollection<IClusterNode> CurrentTopologySnapshot { get; } Property Value Type Description System.Collections.Generic.ICollection < IClusterNode > CurrentTopologyVersion Gets the current topology version. Declaration public AffinityTopologyVersion CurrentTopologyVersion { get; } Property Value Type Description AffinityTopologyVersion DiscoveryEvent Gets the discovery event that caused the topology change. Declaration public DiscoveryEvent DiscoveryEvent { get; } Property Value Type Description DiscoveryEvent Methods GetPreviousAssignment(Int32) Gets the affinity assignment for given partition on previous topology version. First node in returned list is a primary node, other nodes are backups. Declaration public ICollection<IClusterNode> GetPreviousAssignment(int partition) Parameters Type Name Description System.Int32 partition The partition to get previous assignment for. Returns Type Description System.Collections.Generic.ICollection < IClusterNode > List of nodes assigned to a given partition on previous topology version or null if this information is not available."
  },
  "api/Apache.Ignite.Core.Cache.CacheException.html": {
    "href": "api/Apache.Ignite.Core.Cache.CacheException.html",
    "title": "Class CacheException | Apache Ignite.NET",
    "keywords": "Class CacheException Indicates an error during Cache operation. Inheritance System.Object System.Exception IgniteException CacheException CachePartialUpdateException CacheStoreException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class CacheException : IgniteException, ISerializable, _Exception Constructors CacheException() Initializes a new instance of the CacheException class. Declaration public CacheException() CacheException(SerializationInfo, StreamingContext) Initializes a new instance of the CacheException class. Declaration protected CacheException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. CacheException(String) Initializes a new instance of the CacheException class. Declaration public CacheException(string message) Parameters Type Name Description System.String message The message that describes the error. CacheException(String, Exception) Initializes a new instance of the CacheException class. Declaration public CacheException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Cache.Configuration.MemoryConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Cache.Configuration.MemoryConfiguration.html",
    "title": "Class MemoryConfiguration | Apache Ignite.NET",
    "keywords": "Class MemoryConfiguration A page memory configuration for an Apache Ignite node. The page memory is a manageable off-heap based memory architecture that divides all continuously allocated memory regions into pages of fixed size. An individual page can store one or many cache key-value entries that allows reusing the memory in the most efficient way and avoid memory fragmentation issues. By default, the page memory allocates a single continuous memory region. All the caches that will be configured in an application will be mapped to this memory region by default, thus, all the cache data will reside in that memory region. If initial size of the default memory region doesn't satisfy requirements or it's required to have multiple memory regions with different properties then MemoryPolicyConfiguration can be used for both scenarios. For instance, using memory policies you can define memory regions of different maximum size, eviction policies, swapping options, etc. Once you define a new memory region you can bind particular Ignite caches to it. To learn more about memory policies refer to MemoryPolicyConfiguration documentation. Obsolete, use DataStorageConfiguration . Inheritance System.Object MemoryConfiguration Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Configuration Assembly : Apache.Ignite.Core.dll Syntax [Obsolete(\"Use DataStorageConfiguration.\")] public class MemoryConfiguration Constructors MemoryConfiguration() Initializes a new instance of the MemoryConfiguration class. Declaration public MemoryConfiguration() MemoryConfiguration(IBinaryRawReader) Initializes a new instance of the MemoryConfiguration class. Declaration public MemoryConfiguration(IBinaryRawReader reader) Parameters Type Name Description IBinaryRawReader reader The reader. Fields DefaultDefaultMemoryPolicyName The default value for DefaultMemoryPolicyName . Declaration public const string DefaultDefaultMemoryPolicyName = \"default\" Field Value Type Description System.String DefaultPageSize The default page size. Declaration public const int DefaultPageSize = 4096 Field Value Type Description System.Int32 DefaultSystemCacheInitialSize Default size of a memory chunk reserved for system cache initially. Declaration public const long DefaultSystemCacheInitialSize = 41943040L Field Value Type Description System.Int64 DefaultSystemCacheMaxSize Default max size of a memory chunk for the system cache. Declaration public const long DefaultSystemCacheMaxSize = 104857600L Field Value Type Description System.Int64 Properties ConcurrencyLevel Gets or sets the number of concurrent segments in Ignite internal page mapping tables. Declaration public int ConcurrencyLevel { get; set; } Property Value Type Description System.Int32 DefaultMemoryPolicyName Gets or sets the name of the default memory policy in MemoryPolicies . Declaration public string DefaultMemoryPolicyName { get; set; } Property Value Type Description System.String MemoryPolicies Gets or sets the memory policies. Declaration public ICollection<MemoryPolicyConfiguration> MemoryPolicies { get; set; } Property Value Type Description System.Collections.Generic.ICollection < MemoryPolicyConfiguration > PageSize Gets or sets the size of the memory page. Declaration public int PageSize { get; set; } Property Value Type Description System.Int32 SystemCacheInitialSize Gets or sets the size of a memory chunk reserved for system cache needs. Declaration public long SystemCacheInitialSize { get; set; } Property Value Type Description System.Int64 SystemCacheMaxSize Gets or sets the maximum memory region size reserved for system cache. Declaration public long SystemCacheMaxSize { get; set; } Property Value Type Description System.Int64"
  },
  "api/Apache.Ignite.Core.Plugin.Cache.html": {
    "href": "api/Apache.Ignite.Core.Plugin.Cache.html",
    "title": "Namespace Apache.Ignite.Core.Plugin.Cache | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Plugin.Cache Interfaces ICachePluginConfiguration Cache plugin configuration marker interface. Starting point to extend CacheConfiguration and extend existing cache functionality."
  },
  "api/Apache.Ignite.Core.Plugin.IPluginConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Plugin.IPluginConfiguration.html",
    "title": "Interface IPluginConfiguration | Apache Ignite.NET",
    "keywords": "Interface IPluginConfiguration Plugin configuration interface. Implementations should be linked to corresponding IPluginProvider<TConfig> via PluginProviderTypeAttribute . Example plugin implementation: [PluginProviderType(typeof(MyPluginProvider))] class MyPluginConfig : IPluginConfiguration { int CustomProperty { get; set; } } class MyPluginProvider : IPluginProvider<MyPluginConfig> { ... } Namespace : Apache.Ignite.Core.Plugin Assembly : Apache.Ignite.Core.dll Syntax public interface IPluginConfiguration Properties PluginConfigurationClosureFactoryId Gets the id to locate PlatformPluginConfigurationClosureFactory on Java side and read the data written by WriteBinary(IBinaryRawWriter) method. Declaration int ? PluginConfigurationClosureFactoryId { get; } Property Value Type Description System.Nullable < System.Int32 > Methods WriteBinary(IBinaryRawWriter) Writes this instance to a raw writer. This method will be called when PluginConfigurationClosureFactoryId is not null to propagate configuration to the Java side. Declaration void WriteBinary(IBinaryRawWriter writer) Parameters Type Name Description IBinaryRawWriter writer The writer."
  },
  "api/Apache.Ignite.Core.Plugin.IPluginContext-1.html": {
    "href": "api/Apache.Ignite.Core.Plugin.IPluginContext-1.html",
    "title": "Interface IPluginContext<T> | Apache Ignite.NET",
    "keywords": "Interface IPluginContext<T> Plugin execution context. Namespace : Apache.Ignite.Core.Plugin Assembly : Apache.Ignite.Core.dll Syntax public interface IPluginContext<out T> where T : IPluginConfiguration Type Parameters Name Description T Properties Ignite Gets the Ignite. Declaration IIgnite Ignite { get; } Property Value Type Description IIgnite IgniteConfiguration Gets the Ignite configuration. Declaration IgniteConfiguration IgniteConfiguration { get; } Property Value Type Description IgniteConfiguration PluginConfiguration Gets the plugin configuration. Declaration T PluginConfiguration { get; } Property Value Type Description T Methods GetExtension(Int32) Gets a reference to plugin extension on Java side. Extensions on Java side are configured via PluginProvider.initExtensions(). Extension should implement PlatformExtension interface to be accessible from this method. Declaration IPlatformTarget GetExtension(int id) Parameters Type Name Description System.Int32 id Extension id. Equal to PlatformExtension.id(). Returns Type Description IPlatformTarget Reference to a plugin extension on Java side. InjectResources(Object) Injects resources into specified target: populates members marked with InstanceResourceAttribute . Declaration void InjectResources(object target) Parameters Type Name Description System.Object target Target object. RegisterCallback(Int64, PluginCallback) Registers Java->.NET callback. Declaration void RegisterCallback(long callbackId, PluginCallback callback) Parameters Type Name Description System.Int64 callbackId Callback id. PluginCallback callback Callback delegate. RegisterExceptionMapping(String, ExceptionFactory) Registers custom exception mapping: when Java exception of specified class occurs, it will be mapped using provided factory delegate. Declaration void RegisterExceptionMapping(string className, ExceptionFactory factory) Parameters Type Name Description System.String className Name of the Java exception class to be mapped. ExceptionFactory factory Exception factory delegate."
  },
  "api/Apache.Ignite.Core.Plugin.IPluginProvider-1.html": {
    "href": "api/Apache.Ignite.Core.Plugin.IPluginProvider-1.html",
    "title": "Interface IPluginProvider<TConfig> | Apache Ignite.NET",
    "keywords": "Interface IPluginProvider<TConfig> Pluggable Ignite component. Should have parameterless constructor. Ignite plugins are loaded according to PluginConfigurations . Namespace : Apache.Ignite.Core.Plugin Assembly : Apache.Ignite.Core.dll Syntax public interface IPluginProvider<in TConfig> where TConfig : IPluginConfiguration Type Parameters Name Description TConfig Properties Copyright Gets the copyright information. Declaration string Copyright { get; } Property Value Type Description System.String Name Gets the plugin name. Plugins can be retrieved by name via GetPlugin<T>(String) . Declaration string Name { get; } Property Value Type Description System.String Methods GetPlugin<T>() Gets the plugin instance. Declaration T GetPlugin<T>()where T : class Returns Type Description T Plugin instance. Type Parameters Name Description T Plugin instance type. OnIgniteStart() Called when Ignite has been started and is fully functional. Declaration void OnIgniteStart() OnIgniteStop(Boolean) Callback to notify that Ignite is about to stop. Declaration void OnIgniteStop(bool cancel) Parameters Type Name Description System.Boolean cancel if set to true , all ongoing operations should be canceled. Start(IPluginContext<TConfig>) Starts the plugin provider. Ignite can be null until OnIgniteStart() is called. Declaration void Start(IPluginContext<TConfig> context) Parameters Type Name Description IPluginContext <TConfig> context The context. Stop(Boolean) Stops the plugin provider. Declaration void Stop(bool cancel) Parameters Type Name Description System.Boolean cancel if set to true , all ongoing operations should be canceled."
  },
  "api/Apache.Ignite.Core.Transactions.ITransactionMetrics.html": {
    "href": "api/Apache.Ignite.Core.Transactions.ITransactionMetrics.html",
    "title": "Interface ITransactionMetrics | Apache Ignite.NET",
    "keywords": "Interface ITransactionMetrics Transaction metrics, shared across all caches. Namespace : Apache.Ignite.Core.Transactions Assembly : Apache.Ignite.Core.dll Syntax public interface ITransactionMetrics Properties CommitTime Gets the last time transaction was committed. Declaration DateTime CommitTime { get; } Property Value Type Description System.DateTime RollbackTime Gets the last time transaction was rolled back. Declaration DateTime RollbackTime { get; } Property Value Type Description System.DateTime TxCommits Gets the total number of transaction commits. Declaration int TxCommits { get; } Property Value Type Description System.Int32 TxRollbacks Gets the total number of transaction rollbacks. Declaration int TxRollbacks { get; } Property Value Type Description System.Int32"
  },
  "api/Apache.Ignite.Core.Transactions.ITransactions.html": {
    "href": "api/Apache.Ignite.Core.Transactions.ITransactions.html",
    "title": "Interface ITransactions | Apache Ignite.NET",
    "keywords": "Interface ITransactions Transactions facade. All members are thread-safe and may be used concurrently from multiple threads. Namespace : Apache.Ignite.Core.Transactions Assembly : Apache.Ignite.Core.dll Syntax public interface ITransactions Properties DefaultTimeout Gets the default transaction timeout. Declaration TimeSpan DefaultTimeout { get; } Property Value Type Description System.TimeSpan DefaultTimeoutOnPartitionMapExchange Gets the default transaction timeout on partition map exchange. Declaration TimeSpan DefaultTimeoutOnPartitionMapExchange { get; } Property Value Type Description System.TimeSpan DefaultTransactionConcurrency Gets the default transaction concurrency. Declaration TransactionConcurrency DefaultTransactionConcurrency { get; } Property Value Type Description TransactionConcurrency DefaultTransactionIsolation Gets the default transaction isolation. Declaration TransactionIsolation DefaultTransactionIsolation { get; } Property Value Type Description TransactionIsolation Tx Gets transaction started by this thread or null if this thread does not have a transaction. Declaration ITransaction Tx { get; } Property Value Type Description ITransaction Transaction started by this thread or null if this thread does not have a transaction. Methods GetLocalActiveTransactions() Returns a list of active transactions initiated by this node. Returned transactions do not support next operations: Commit() . CommitAsync() . Get ThreadId . Get StartTime . Get Meta<TV>(String) . Get AddMeta<TV>(String, TV) . Get RemoveMeta<TV>(String) . Declaration ITransactionCollection GetLocalActiveTransactions() Returns Type Description ITransactionCollection Collection of ITransactionCollection GetMetrics() Gets the metrics. Declaration ITransactionMetrics GetMetrics() Returns Type Description ITransactionMetrics ResetMetrics() Resets the metrics. Declaration void ResetMetrics() TxStart() Starts a transaction with default isolation ( DefaultTransactionIsolation , concurrency ( DefaultTransactionConcurrency ), timeout ( DefaultTimeout ), and invalidation policy. All defaults are set in CacheConfiguration at startup. Declaration ITransaction TxStart() Returns Type Description ITransaction New transaction. TxStart(TransactionConcurrency, TransactionIsolation) Starts new transaction with the specified concurrency and isolation. Declaration ITransaction TxStart(TransactionConcurrency concurrency, TransactionIsolation isolation) Parameters Type Name Description TransactionConcurrency concurrency Concurrency. TransactionIsolation isolation Isolation. Returns Type Description ITransaction New transaction. TxStart(TransactionConcurrency, TransactionIsolation, TimeSpan, Int32) Starts new transaction with the specified concurrency and isolation. Declaration ITransaction TxStart(TransactionConcurrency concurrency, TransactionIsolation isolation, TimeSpan timeout, int txSize) Parameters Type Name Description TransactionConcurrency concurrency Concurrency. TransactionIsolation isolation Isolation. System.TimeSpan timeout Timeout. TimeSpan.Zero for indefinite timeout. System.Int32 txSize Number of entries participating in transaction (may be approximate). Returns Type Description ITransaction New transaction. WithLabel(String) Returns instance of Ignite Transactions to mark a transaction with a special label. Declaration ITransactions WithLabel(string label) Parameters Type Name Description System.String label Returns Type Description ITransactions ITransactions WithTracing() Returns instance of Ignite Transactions to enable tracing for a transaction. Declaration ITransactions WithTracing() Returns Type Description ITransactions ITransactions"
  },
  "api/Apache.Ignite.Core.Transactions.TransactionConcurrency.html": {
    "href": "api/Apache.Ignite.Core.Transactions.TransactionConcurrency.html",
    "title": "Enum TransactionConcurrency | Apache Ignite.NET",
    "keywords": "Enum TransactionConcurrency Transaction concurrency control. See ITransaction for more information on transaction concurrency controls. Namespace : Apache.Ignite.Core.Transactions Assembly : Apache.Ignite.Core.dll Syntax public enum TransactionConcurrency Fields Name Description Optimistic Optimistic concurrency control. Pessimistic Pessimistic concurrency control."
  },
  "api/Apache.Ignite.Core.Transactions.TransactionConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Transactions.TransactionConfiguration.html",
    "title": "Class TransactionConfiguration | Apache Ignite.NET",
    "keywords": "Class TransactionConfiguration Transactions configuration. Inheritance System.Object TransactionConfiguration Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Transactions Assembly : Apache.Ignite.Core.dll Syntax public class TransactionConfiguration Constructors TransactionConfiguration() Initializes a new instance of the TransactionConfiguration class. Declaration public TransactionConfiguration() Fields DefaultDeadlockTimeout The default value for DeadlockTimeout Declaration public static readonly TimeSpan DefaultDeadlockTimeout Field Value Type Description System.TimeSpan DefaultDefaultTimeout The default value for DefaultTransactionIsolation property. Declaration public static readonly TimeSpan DefaultDefaultTimeout Field Value Type Description System.TimeSpan DefaultDefaultTimeoutOnPartitionMapExchange The default value for DefaultTimeoutOnPartitionMapExchange Declaration public static readonly TimeSpan DefaultDefaultTimeoutOnPartitionMapExchange Field Value Type Description System.TimeSpan DefaultDefaultTransactionConcurrency The default value for DefaultTransactionConcurrency property. Declaration public const TransactionConcurrency DefaultDefaultTransactionConcurrency = TransactionConcurrency.Pessimistic Field Value Type Description TransactionConcurrency DefaultDefaultTransactionIsolation The default value for DefaultTransactionIsolation property. Declaration public const TransactionIsolation DefaultDefaultTransactionIsolation = TransactionIsolation.RepeatableRead Field Value Type Description TransactionIsolation DefaultPessimisticTransactionLogLinger The default value for PessimisticTransactionLogLinger property. Declaration public static readonly TimeSpan DefaultPessimisticTransactionLogLinger Field Value Type Description System.TimeSpan DefaultPessimisticTransactionLogSize The default value for PessimisticTransactionLogSize property. Declaration public const int DefaultPessimisticTransactionLogSize = 0 Field Value Type Description System.Int32 Properties DeadlockTimeout This is an experimental feature. Transactional SQL is currently in a beta status. Gets or sets timeout before starting deadlock detection for caches configured with TransactionalSnapshot cache atomicity mode. System.TimeSpan.Zero for disabling deadlock detection. Declaration public TimeSpan DeadlockTimeout { get; set; } Property Value Type Description System.TimeSpan DefaultTimeout Gets or sets the cache transaction timeout to use when one is not explicitly specified. System.TimeSpan.Zero for infinite timeout. Declaration public TimeSpan DefaultTimeout { get; set; } Property Value Type Description System.TimeSpan DefaultTimeoutOnPartitionMapExchange Gets or sets transaction timeout for partition map synchronization. System.TimeSpan.Zero for infinite timeout. Declaration public TimeSpan DefaultTimeoutOnPartitionMapExchange { get; set; } Property Value Type Description System.TimeSpan DefaultTransactionConcurrency Gets or sets the cache transaction concurrency to use when one is not explicitly specified. Declaration public TransactionConcurrency DefaultTransactionConcurrency { get; set; } Property Value Type Description TransactionConcurrency DefaultTransactionIsolation Gets or sets the cache transaction isolation to use when one is not explicitly specified. Declaration public TransactionIsolation DefaultTransactionIsolation { get; set; } Property Value Type Description TransactionIsolation PessimisticTransactionLogLinger Gets or sets the delay after which pessimistic recovery entries will be cleaned up for failed node. Declaration public TimeSpan PessimisticTransactionLogLinger { get; set; } Property Value Type Description System.TimeSpan PessimisticTransactionLogSize Gets or sets the size of pessimistic transactions log stored on node in order to recover transaction commit if originating node has left grid before it has sent all messages to transaction nodes. 0 for unlimited. Declaration public int PessimisticTransactionLogSize { get; set; } Property Value Type Description System.Int32"
  },
  "api/Apache.Ignite.Linq.IUpdateDescriptor-2.html": {
    "href": "api/Apache.Ignite.Linq.IUpdateDescriptor-2.html",
    "title": "Interface IUpdateDescriptor<TKey, TValue> | Apache Ignite.NET",
    "keywords": "Interface IUpdateDescriptor<TKey, TValue> Dummy interface to provide update description for UpdateAll<TKey, TValue>(IQueryable<ICacheEntry<TKey, TValue>>, Expression<Func<IUpdateDescriptor<TKey, TValue>, IUpdateDescriptor<TKey, TValue>>>) Namespace : Apache.Ignite.Linq Assembly : Apache.Ignite.Linq.dll Syntax public interface IUpdateDescriptor<out TKey, out TValue> Type Parameters Name Description TKey Key type. TValue Value type. Methods Set<TProp>(Func<TValue, TProp>, TProp) Specifies member update with constant Declaration IUpdateDescriptor<TKey, TValue> Set<TProp>(Func<TValue, TProp> selector, TProp value) Parameters Type Name Description System.Func <TValue, TProp> selector Member selector TProp value New value Returns Type Description IUpdateDescriptor <TKey, TValue> Type Parameters Name Description TProp Member type Set<TProp>(Func<TValue, TProp>, Func<ICacheEntry<TKey, TValue>, TProp>) Specifies member update with expression Declaration IUpdateDescriptor<TKey, TValue> Set<TProp>(Func<TValue, TProp> selector, Func<ICacheEntry<TKey, TValue>, TProp> valueBuilder) Parameters Type Name Description System.Func <TValue, TProp> selector Member selector System.Func < ICacheEntry <TKey, TValue>, TProp> valueBuilder New value generator Returns Type Description IUpdateDescriptor <TKey, TValue> Type Parameters Name Description TProp Member type"
  },
  "api/Apache.Ignite.Core.Transactions.TransactionDeadlockException.html": {
    "href": "api/Apache.Ignite.Core.Transactions.TransactionDeadlockException.html",
    "title": "Class TransactionDeadlockException | Apache Ignite.NET",
    "keywords": "Class TransactionDeadlockException Indicates a deadlock within Ignite transaction. This exception can be thrown from any cache method that modifies or reads data within a transaction with timeout (see TxStart(TransactionConcurrency, TransactionIsolation, TimeSpan, Int32) overload). Inheritance System.Object System.Exception IgniteException TransactionDeadlockException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Transactions Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class TransactionDeadlockException : IgniteException, ISerializable, _Exception Constructors TransactionDeadlockException() Initializes a new instance of the TransactionDeadlockException class. Declaration public TransactionDeadlockException() TransactionDeadlockException(SerializationInfo, StreamingContext) Initializes a new instance of the TransactionDeadlockException class. Declaration protected TransactionDeadlockException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. TransactionDeadlockException(String) Initializes a new instance of the TransactionDeadlockException class. Declaration public TransactionDeadlockException(string message) Parameters Type Name Description System.String message The message that describes the error. TransactionDeadlockException(String, Exception) Initializes a new instance of the TransactionDeadlockException class. Declaration public TransactionDeadlockException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Transactions.TransactionHeuristicException.html": {
    "href": "api/Apache.Ignite.Core.Transactions.TransactionHeuristicException.html",
    "title": "Class TransactionHeuristicException | Apache Ignite.NET",
    "keywords": "Class TransactionHeuristicException Exception thrown whenever Ignite transaction enters an unknown state. This exception is usually thrown whenever commit partially succeeds. Cache will still resolve this situation automatically to ensure data integrity, by invalidating all values participating in this transaction on remote nodes. Inheritance System.Object System.Exception IgniteException TransactionHeuristicException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Transactions Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class TransactionHeuristicException : IgniteException, ISerializable, _Exception Constructors TransactionHeuristicException() Initializes a new instance of the TransactionHeuristicException class. Declaration public TransactionHeuristicException() TransactionHeuristicException(SerializationInfo, StreamingContext) Initializes a new instance of the TransactionHeuristicException class. Declaration protected TransactionHeuristicException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. TransactionHeuristicException(String) Initializes a new instance of the TransactionHeuristicException class. Declaration public TransactionHeuristicException(string message) Parameters Type Name Description System.String message The message that describes the error. TransactionHeuristicException(String, Exception) Initializes a new instance of the TransactionHeuristicException class. Declaration public TransactionHeuristicException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Transactions.TransactionIsolation.html": {
    "href": "api/Apache.Ignite.Core.Transactions.TransactionIsolation.html",
    "title": "Enum TransactionIsolation | Apache Ignite.NET",
    "keywords": "Enum TransactionIsolation Defines different cache transaction isolation levels. See ITransaction documentation for more information about cache transaction isolation levels. Namespace : Apache.Ignite.Core.Transactions Assembly : Apache.Ignite.Core.dll Syntax public enum TransactionIsolation Fields Name Description ReadCommitted Read committed isolation level. RepeatableRead Repeatable read isolation level. Serializable Serializable isolation level."
  },
  "api/Apache.Ignite.Core.Transactions.TransactionOptimisticException.html": {
    "href": "api/Apache.Ignite.Core.Transactions.TransactionOptimisticException.html",
    "title": "Class TransactionOptimisticException | Apache Ignite.NET",
    "keywords": "Class TransactionOptimisticException Exception thrown whenever Ignite transactions fail optimistically. Inheritance System.Object System.Exception IgniteException TransactionOptimisticException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Transactions Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class TransactionOptimisticException : IgniteException, ISerializable, _Exception Constructors TransactionOptimisticException() Initializes a new instance of the TransactionOptimisticException class. Declaration public TransactionOptimisticException() TransactionOptimisticException(SerializationInfo, StreamingContext) Initializes a new instance of the TransactionOptimisticException class. Declaration protected TransactionOptimisticException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. TransactionOptimisticException(String) Initializes a new instance of the TransactionOptimisticException class. Declaration public TransactionOptimisticException(string message) Parameters Type Name Description System.String message The message that describes the error. TransactionOptimisticException(String, Exception) Initializes a new instance of the TransactionOptimisticException class. Declaration public TransactionOptimisticException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.AspNet.IgniteOutputCacheProvider.html": {
    "href": "api/Apache.Ignite.AspNet.IgniteOutputCacheProvider.html",
    "title": "Class IgniteOutputCacheProvider | Apache Ignite.NET",
    "keywords": "Class IgniteOutputCacheProvider ASP.NET output cache provider that uses Ignite cache as a storage. You can either start Ignite yourself, and provide gridName attribute, or provide igniteConfigurationSectionName attribute to start Ignite automatically from specified configuration section (see IgniteConfigurationSection ) using igniteConfigurationSectionName . cacheName attribute specifies Ignite cache name to use for data storage. This attribute can be omitted if cache name is null. Inheritance System.Object System.Configuration.Provider.ProviderBase System.Web.Caching.OutputCacheProvider IgniteOutputCacheProvider Inherited Members System.Configuration.Provider.ProviderBase.Name System.Configuration.Provider.ProviderBase.Description System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.AspNet Assembly : Apache.Ignite.AspNet.dll Syntax public class IgniteOutputCacheProvider : OutputCacheProvider Methods Add(String, Object, DateTime) Inserts the specified entry into the output cache. Declaration public override object Add(string key, object entry, DateTime utcExpiry) Parameters Type Name Description System.String key A unique identifier for entry . System.Object entry The content to add to the output cache. System.DateTime utcExpiry The time and date on which the cached entry expires. Returns Type Description System.Object A reference to the specified provider. Overrides System.Web.Caching.OutputCacheProvider.Add(System.String, System.Object, System.DateTime) Get(String) Returns a reference to the specified entry in the output cache. Declaration public override object Get(string key) Parameters Type Name Description System.String key A unique identifier for a cached entry in the output cache. Returns Type Description System.Object The key value that identifies the specified entry in the cache, or null if the specified entry is not in the cache. Overrides System.Web.Caching.OutputCacheProvider.Get(System.String) Initialize(String, NameValueCollection) Initializes the provider. Declaration public override void Initialize(string name, NameValueCollection config) Parameters Type Name Description System.String name The friendly name of the provider. System.Collections.Specialized.NameValueCollection config A collection of the name/value pairs representing the provider-specific attributes specified in the configuration for this provider. Overrides System.Configuration.Provider.ProviderBase.Initialize(System.String, System.Collections.Specialized.NameValueCollection) Remove(String) Removes the specified entry from the output cache. Declaration public override void Remove(string key) Parameters Type Name Description System.String key The unique identifier for the entry to remove from the output cache. Overrides System.Web.Caching.OutputCacheProvider.Remove(System.String) Set(String, Object, DateTime) Inserts the specified entry into the output cache, overwriting the entry if it is already cached. Declaration public override void Set(string key, object entry, DateTime utcExpiry) Parameters Type Name Description System.String key A unique identifier for entry . System.Object entry The content to add to the output cache. System.DateTime utcExpiry The time and date on which the cached entry expires. Overrides System.Web.Caching.OutputCacheProvider.Set(System.String, System.Object, System.DateTime)"
  },
  "api/Apache.Ignite.Core.Binary.IBinarizable.html": {
    "href": "api/Apache.Ignite.Core.Binary.IBinarizable.html",
    "title": "Interface IBinarizable | Apache Ignite.NET",
    "keywords": "Interface IBinarizable Interface to implement custom serialization logic. Namespace : Apache.Ignite.Core.Binary Assembly : Apache.Ignite.Core.dll Syntax public interface IBinarizable Methods ReadBinary(IBinaryReader) Reads this object from the given reader. Declaration void ReadBinary(IBinaryReader reader) Parameters Type Name Description IBinaryReader reader Reader. Exceptions Type Condition System.IO.IOException If read failed. WriteBinary(IBinaryWriter) Writes this object to the given writer. Declaration void WriteBinary(IBinaryWriter writer) Parameters Type Name Description IBinaryWriter writer Writer. Exceptions Type Condition System.IO.IOException If write failed."
  },
  "api/Apache.Ignite.Core.Binary.IBinaryWriter.html": {
    "href": "api/Apache.Ignite.Core.Binary.IBinaryWriter.html",
    "title": "Interface IBinaryWriter | Apache Ignite.NET",
    "keywords": "Interface IBinaryWriter Writer for binary objects. Namespace : Apache.Ignite.Core.Binary Assembly : Apache.Ignite.Core.dll Syntax public interface IBinaryWriter Methods GetRawWriter() Get raw writer. Declaration IBinaryRawWriter GetRawWriter() Returns Type Description IBinaryRawWriter Raw writer. WriteArray<T>(String, T[]) Write named object array. Declaration void WriteArray<T>(string fieldName, T[] val) Parameters Type Name Description System.String fieldName Field name. T[] val Object array. Type Parameters Name Description T WriteBoolean(String, Boolean) Write named boolean value. Declaration void WriteBoolean(string fieldName, bool val) Parameters Type Name Description System.String fieldName Field name. System.Boolean val Boolean value. WriteBooleanArray(String, Boolean[]) Write named boolean array. Declaration void WriteBooleanArray(string fieldName, bool[] val) Parameters Type Name Description System.String fieldName Field name. System.Boolean [] val Boolean array. WriteByte(String, Byte) Write named byte value. Declaration void WriteByte(string fieldName, byte val) Parameters Type Name Description System.String fieldName Field name. System.Byte val Byte value. WriteByteArray(String, Byte[]) Write named byte array. Declaration void WriteByteArray(string fieldName, byte[] val) Parameters Type Name Description System.String fieldName Field name. System.Byte [] val Byte array. WriteChar(String, Char) Write named char value. Declaration void WriteChar(string fieldName, char val) Parameters Type Name Description System.String fieldName Field name. System.Char val Char value. WriteCharArray(String, Char[]) Write named char array. Declaration void WriteCharArray(string fieldName, char[] val) Parameters Type Name Description System.String fieldName Field name. System.Char [] val Char array. WriteCollection(String, ICollection) Writes a named collection in interoperable form. Use this method to communicate with other platforms or with nodes that need to read collection elements in binary form. When there is no need for binarization or interoperability, please use WriteObject<T>(String, T) , which will properly preserve generic collection type. Declaration void WriteCollection(string fieldName, ICollection val) Parameters Type Name Description System.String fieldName Field name. System.Collections.ICollection val Collection. WriteDecimal(String, Nullable<Decimal>) Write named decimal value. Declaration void WriteDecimal(string fieldName, decimal ? val) Parameters Type Name Description System.String fieldName Field name. System.Nullable < System.Decimal > val Decimal value. WriteDecimalArray(String, Nullable<Decimal>[]) Write named decimal array. Declaration void WriteDecimalArray(string fieldName, decimal ? [] val) Parameters Type Name Description System.String fieldName Field name. System.Nullable < System.Decimal >[] val Decimal array. WriteDictionary(String, IDictionary) Writes a named dictionary in interoperable form. Use this method to communicate with other platforms or with nodes that need to read dictionary elements in binary form. When there is no need for binarization or interoperability, please use WriteObject<T>(String, T) , which will properly preserve generic dictionary type. Declaration void WriteDictionary(string fieldName, IDictionary val) Parameters Type Name Description System.String fieldName Field name. System.Collections.IDictionary val Dictionary. WriteDouble(String, Double) Write named double value. Declaration void WriteDouble(string fieldName, double val) Parameters Type Name Description System.String fieldName Field name. System.Double val Double value. WriteDoubleArray(String, Double[]) Write named double array. Declaration void WriteDoubleArray(string fieldName, double[] val) Parameters Type Name Description System.String fieldName Field name. System.Double [] val Double array. WriteEnum<T>(String, T) Write named enum value. Declaration void WriteEnum<T>(string fieldName, T val) Parameters Type Name Description System.String fieldName Field name. T val Enum value. Type Parameters Name Description T WriteEnumArray<T>(String, T[]) Write named enum array. Declaration void WriteEnumArray<T>(string fieldName, T[] val) Parameters Type Name Description System.String fieldName Field name. T[] val Enum array. Type Parameters Name Description T WriteFloat(String, Single) Write named float value. Declaration void WriteFloat(string fieldName, float val) Parameters Type Name Description System.String fieldName Field name. System.Single val Float value. WriteFloatArray(String, Single[]) Write named float array. Declaration void WriteFloatArray(string fieldName, float[] val) Parameters Type Name Description System.String fieldName Field name. System.Single [] val Float array. WriteGuid(String, Nullable<Guid>) Write named GUID value. Declaration void WriteGuid(string fieldName, Guid? val) Parameters Type Name Description System.String fieldName Field name. System.Nullable < System.Guid > val GUID value. WriteGuidArray(String, Nullable<Guid>[]) Write named GUID array. Declaration void WriteGuidArray(string fieldName, Guid? [] val) Parameters Type Name Description System.String fieldName Field name. System.Nullable < System.Guid >[] val GUID array. WriteInt(String, Int32) Write named int value. Declaration void WriteInt(string fieldName, int val) Parameters Type Name Description System.String fieldName Field name. System.Int32 val Int value. WriteIntArray(String, Int32[]) Write named int array. Declaration void WriteIntArray(string fieldName, int[] val) Parameters Type Name Description System.String fieldName Field name. System.Int32 [] val Int array. WriteLong(String, Int64) Write named long value. Declaration void WriteLong(string fieldName, long val) Parameters Type Name Description System.String fieldName Field name. System.Int64 val Long value. WriteLongArray(String, Int64[]) Write named long array. Declaration void WriteLongArray(string fieldName, long[] val) Parameters Type Name Description System.String fieldName Field name. System.Int64 [] val Long array. WriteObject<T>(String, T) Write named object value. Declaration void WriteObject<T>(string fieldName, T val) Parameters Type Name Description System.String fieldName Field name. T val Object value. Type Parameters Name Description T WriteShort(String, Int16) Write named short value. Declaration void WriteShort(string fieldName, short val) Parameters Type Name Description System.String fieldName Field name. System.Int16 val Short value. WriteShortArray(String, Int16[]) Write named short array. Declaration void WriteShortArray(string fieldName, short[] val) Parameters Type Name Description System.String fieldName Field name. System.Int16 [] val Short array. WriteString(String, String) Write named string value. Declaration void WriteString(string fieldName, string val) Parameters Type Name Description System.String fieldName Field name. System.String val String value. WriteStringArray(String, String[]) Write named string array. Declaration void WriteStringArray(string fieldName, string[] val) Parameters Type Name Description System.String fieldName Field name. System.String [] val String array. WriteTimestamp(String, Nullable<DateTime>) Write named date value. Declaration void WriteTimestamp(string fieldName, DateTime? val) Parameters Type Name Description System.String fieldName Field name. System.Nullable < System.DateTime > val Date value. WriteTimestampArray(String, Nullable<DateTime>[]) Write named date array. Declaration void WriteTimestampArray(string fieldName, DateTime? [] val) Parameters Type Name Description System.String fieldName Field name. System.Nullable < System.DateTime >[] val Date array."
  },
  "api/Apache.Ignite.Core.Cache.Affinity.AffinityTopologyVersion.html": {
    "href": "api/Apache.Ignite.Core.Cache.Affinity.AffinityTopologyVersion.html",
    "title": "Struct AffinityTopologyVersion | Apache Ignite.NET",
    "keywords": "Struct AffinityTopologyVersion Affinity topology version. Implements System.IEquatable < AffinityTopologyVersion > System.IComparable < AffinityTopologyVersion > Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() Namespace : Apache.Ignite.Core.Cache.Affinity Assembly : Apache.Ignite.Core.dll Syntax public struct AffinityTopologyVersion : IEquatable<AffinityTopologyVersion>, IComparable<AffinityTopologyVersion> Constructors AffinityTopologyVersion(Int64, Int32) Initializes a new instance of the AffinityTopologyVersion struct. Declaration public AffinityTopologyVersion(long version, int minorVersion) Parameters Type Name Description System.Int64 version The version. System.Int32 minorVersion The minor version. Properties MinorVersion Gets the minor version, which is increased when new caches start. Declaration public int MinorVersion { get; } Property Value Type Description System.Int32 Version Gets the major version, same as TopologyVersion . Declaration public long Version { get; } Property Value Type Description System.Int64 Methods CompareTo(AffinityTopologyVersion) Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. Declaration public int CompareTo(AffinityTopologyVersion other) Parameters Type Name Description AffinityTopologyVersion other Returns Type Description System.Int32 Equals(AffinityTopologyVersion) Indicates whether the current object is equal to another object of the same type. Declaration public bool Equals(AffinityTopologyVersion other) Parameters Type Name Description AffinityTopologyVersion other An object to compare with this object. Returns Type Description System.Boolean true if the current object is equal to the other parameter; otherwise, false. Equals(Object) Determines whether the specified System.Object , is equal to this instance. Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj The System.Object to compare with this instance. Returns Type Description System.Boolean true if the specified System.Object is equal to this instance; otherwise, false . Overrides System.ValueType.Equals(System.Object) GetHashCode() Returns a hash code for this instance. Declaration public override int GetHashCode() Returns Type Description System.Int32 A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Overrides System.ValueType.GetHashCode() ToString() Returns a System.String that represents this instance. Declaration public override string ToString() Returns Type Description System.String A System.String that represents this instance. Overrides System.ValueType.ToString() Operators Equality(AffinityTopologyVersion, AffinityTopologyVersion) Implements the operator ==. Declaration public static bool operator ==(AffinityTopologyVersion left, AffinityTopologyVersion right) Parameters Type Name Description AffinityTopologyVersion left The left operand. AffinityTopologyVersion right The right operand. Returns Type Description System.Boolean The result of the operator. GreaterThan(AffinityTopologyVersion, AffinityTopologyVersion) Implements the operator 'greater than'. Declaration public static bool operator>(AffinityTopologyVersion left, AffinityTopologyVersion right) Parameters Type Name Description AffinityTopologyVersion left The left operand. AffinityTopologyVersion right The right operand. Returns Type Description System.Boolean The result of the operator. GreaterThanOrEqual(AffinityTopologyVersion, AffinityTopologyVersion) Implements the operator 'greater or equal than'. Declaration public static bool operator >=(AffinityTopologyVersion left, AffinityTopologyVersion right) Parameters Type Name Description AffinityTopologyVersion left The left operand. AffinityTopologyVersion right The right operand. Returns Type Description System.Boolean The result of the operator. Inequality(AffinityTopologyVersion, AffinityTopologyVersion) Implements the operator !=. Declaration public static bool operator !=(AffinityTopologyVersion left, AffinityTopologyVersion right) Parameters Type Name Description AffinityTopologyVersion left The left operand. AffinityTopologyVersion right The right operand. Returns Type Description System.Boolean The result of the operator. LessThan(AffinityTopologyVersion, AffinityTopologyVersion) Implements the operator 'less than'. Declaration public static bool operator <(AffinityTopologyVersion left, AffinityTopologyVersion right) Parameters Type Name Description AffinityTopologyVersion left The left operand. AffinityTopologyVersion right The right operand. Returns Type Description System.Boolean The result of the operator. LessThanOrEqual(AffinityTopologyVersion, AffinityTopologyVersion) Implements the operator 'less or equal than'. Declaration public static bool operator <=(AffinityTopologyVersion left, AffinityTopologyVersion right) Parameters Type Name Description AffinityTopologyVersion left The left operand. AffinityTopologyVersion right The right operand. Returns Type Description System.Boolean The result of the operator. Implements System.IEquatable<T> System.IComparable<T>"
  },
  "api/Apache.Ignite.Core.Cache.CacheEntryProcessorException.html": {
    "href": "api/Apache.Ignite.Core.Cache.CacheEntryProcessorException.html",
    "title": "Class CacheEntryProcessorException | Apache Ignite.NET",
    "keywords": "Class CacheEntryProcessorException An exception to indicate a problem occurred attempting to execute an ICacheEntryProcessor<TK, TV, TArg, TRes> against an entry. Inheritance System.Object System.Exception IgniteException CacheEntryProcessorException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class CacheEntryProcessorException : IgniteException, ISerializable, _Exception Constructors CacheEntryProcessorException() Initializes a new instance of the CacheEntryProcessorException class. Declaration public CacheEntryProcessorException() CacheEntryProcessorException(Exception) Initializes a new instance of the CacheEntryProcessorException class. Declaration public CacheEntryProcessorException(Exception innerException) Parameters Type Name Description System.Exception innerException The inner exception. CacheEntryProcessorException(SerializationInfo, StreamingContext) Initializes a new instance of the CacheEntryProcessorException class. Declaration protected CacheEntryProcessorException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. CacheEntryProcessorException(String) Initializes a new instance of the CacheEntryProcessorException class. Declaration public CacheEntryProcessorException(string message) Parameters Type Name Description System.String message The message that describes the error. CacheEntryProcessorException(String, Exception) Initializes a new instance of the CacheEntryProcessorException class. Declaration public CacheEntryProcessorException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Cache.Configuration.CacheMode.html": {
    "href": "api/Apache.Ignite.Core.Cache.Configuration.CacheMode.html",
    "title": "Enum CacheMode | Apache Ignite.NET",
    "keywords": "Enum CacheMode Caching modes. Namespace : Apache.Ignite.Core.Cache.Configuration Assembly : Apache.Ignite.Core.dll Syntax public enum CacheMode Fields Name Description Local Specifies local-only cache behaviour. In this mode caches residing on different grid nodes will not know about each other. Other than distribution, Local caches still have all the caching features, such as eviction, expiration, swapping, querying, etc... This mode is very useful when caching read-only data or data that automatically expires at a certain interval and then automatically reloaded from persistence store. Partitioned Specifies partitioned cache behaviour. In this mode the overall key set will be divided into partitions and all partitions will be split equally between participating nodes. Note that partitioned cache is always fronted by local 'near' cache which stores most recent data. Replicated Specifies fully replicated cache behavior. In this mode all the keys are distributed to all participating nodes."
  },
  "api/Apache.Ignite.Core.Cache.Configuration.NearCacheConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Cache.Configuration.NearCacheConfiguration.html",
    "title": "Class NearCacheConfiguration | Apache Ignite.NET",
    "keywords": "Class NearCacheConfiguration Defines near cache configuration. Distributed cache can also be fronted by a Near cache, which is a smaller local cache that stores most recently or most frequently accessed data. Just like with a partitioned cache, the user can control the size of the near cache and its eviction policies. Inheritance System.Object NearCacheConfiguration Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Configuration Assembly : Apache.Ignite.Core.dll Syntax public class NearCacheConfiguration Constructors NearCacheConfiguration() Initializes a new instance of the NearCacheConfiguration class. Declaration public NearCacheConfiguration() Fields DefaultNearStartSize Initial default near cache size. Declaration public const int DefaultNearStartSize = 375000 Field Value Type Description System.Int32 Properties EvictionPolicy Gets or sets the eviction policy. Null value means disabled evictions. Declaration public IEvictionPolicy EvictionPolicy { get; set; } Property Value Type Description IEvictionPolicy NearStartSize Gets or sets the initial cache size for near cache which will be used to pre-create internal hash table after start. Declaration public int NearStartSize { get; set; } Property Value Type Description System.Int32"
  },
  "api/Apache.Ignite.Core.Cache.Configuration.QueryField.html": {
    "href": "api/Apache.Ignite.Core.Cache.Configuration.QueryField.html",
    "title": "Class QueryField | Apache Ignite.NET",
    "keywords": "Class QueryField Represents a queryable field. Inheritance System.Object QueryField Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Configuration Assembly : Apache.Ignite.Core.dll Syntax public class QueryField Constructors QueryField() Initializes a new instance of the QueryField class. Declaration public QueryField() QueryField(String, String) Initializes a new instance of the QueryField class. Declaration public QueryField(string name, string javaFieldTypeName) Parameters Type Name Description System.String name Name. System.String javaFieldTypeName Java type name. QueryField(String, Type) Initializes a new instance of the QueryField class. Declaration public QueryField(string name, Type fieldType) Parameters Type Name Description System.String name Name. System.Type fieldType Type. Properties DefaultValue Gets or sets the default value for the field. Declaration public object DefaultValue { get; set; } Property Value Type Description System.Object FieldType Gets or sets the type of the value. This is a shortcut for FieldTypeName . Getter will return null for non-primitive types. Declaration public Type FieldType { get; set; } Property Value Type Description System.Type FieldTypeName Gets the Java type name. Declaration public string FieldTypeName { get; set; } Property Value Type Description System.String IsKeyField Gets or sets a value indicating whether this field belongs to the cache key. Proper value here is required for SQL DML queries which create/modify cache keys. Declaration public bool IsKeyField { get; set; } Property Value Type Description System.Boolean Name Gets or sets the field name. Declaration public string Name { get; set; } Property Value Type Description System.String NotNull Gets or sets a value indicating whether null value is allowed for the field. Declaration public bool NotNull { get; set; } Property Value Type Description System.Boolean Precision Gets or sets the precision for the field. Declaration public int Precision { get; set; } Property Value Type Description System.Int32 Scale Gets or sets the scale for the field. Declaration public int Scale { get; set; } Property Value Type Description System.Int32"
  },
  "api/Apache.Ignite.EntityFramework.IgniteDbConfiguration.html": {
    "href": "api/Apache.Ignite.EntityFramework.IgniteDbConfiguration.html",
    "title": "Class IgniteDbConfiguration | Apache Ignite.NET",
    "keywords": "Class IgniteDbConfiguration System.Data.Entity.DbConfiguration implementation that uses Ignite as a second-level cache for Entity Framework queries. Inheritance System.Object System.Data.Entity.DbConfiguration IgniteDbConfiguration Inherited Members System.Data.Entity.DbConfiguration.SetConfiguration(System.Data.Entity.DbConfiguration) System.Data.Entity.DbConfiguration.LoadConfiguration(System.Type) System.Data.Entity.DbConfiguration.LoadConfiguration(System.Reflection.Assembly) System.Data.Entity.DbConfiguration.AddDependencyResolver(System.Data.Entity.Infrastructure.DependencyResolution.IDbDependencyResolver) System.Data.Entity.DbConfiguration.AddDefaultResolver(System.Data.Entity.Infrastructure.DependencyResolution.IDbDependencyResolver) System.Data.Entity.DbConfiguration.SetProviderServices(System.String, System.Data.Entity.Core.Common.DbProviderServices) System.Data.Entity.DbConfiguration.SetProviderFactory(System.String, System.Data.Common.DbProviderFactory) System.Data.Entity.DbConfiguration.SetExecutionStrategy(System.String, System.Func<System.Data.Entity.Infrastructure.IDbExecutionStrategy>) System.Data.Entity.DbConfiguration.SetExecutionStrategy(System.String, System.Func<System.Data.Entity.Infrastructure.IDbExecutionStrategy>, System.String) System.Data.Entity.DbConfiguration.SetDefaultTransactionHandler(System.Func<System.Data.Entity.Infrastructure.TransactionHandler>) System.Data.Entity.DbConfiguration.SetTransactionHandler(System.String, System.Func<System.Data.Entity.Infrastructure.TransactionHandler>) System.Data.Entity.DbConfiguration.SetTransactionHandler(System.String, System.Func<System.Data.Entity.Infrastructure.TransactionHandler>, System.String) System.Data.Entity.DbConfiguration.SetDefaultConnectionFactory(System.Data.Entity.Infrastructure.IDbConnectionFactory) System.Data.Entity.DbConfiguration.SetPluralizationService(System.Data.Entity.Infrastructure.Pluralization.IPluralizationService) System.Data.Entity.DbConfiguration.SetDatabaseInitializer<TContext>(System.Data.Entity.IDatabaseInitializer<TContext>) System.Data.Entity.DbConfiguration.SetMigrationSqlGenerator(System.String, System.Func<System.Data.Entity.Migrations.Sql.MigrationSqlGenerator>) System.Data.Entity.DbConfiguration.SetManifestTokenResolver(System.Data.Entity.Infrastructure.IManifestTokenResolver) System.Data.Entity.DbConfiguration.SetMetadataAnnotationSerializer(System.String, System.Func<System.Data.Entity.Infrastructure.IMetadataAnnotationSerializer>) System.Data.Entity.DbConfiguration.SetProviderFactoryResolver(System.Data.Entity.Infrastructure.IDbProviderFactoryResolver) System.Data.Entity.DbConfiguration.SetModelCacheKey(System.Func<System.Data.Entity.DbContext, System.Data.Entity.Infrastructure.IDbModelCacheKey>) System.Data.Entity.DbConfiguration.SetDefaultHistoryContext(System.Func<System.Data.Common.DbConnection, System.String, System.Data.Entity.Migrations.History.HistoryContext>) System.Data.Entity.DbConfiguration.SetHistoryContext(System.String, System.Func<System.Data.Common.DbConnection, System.String, System.Data.Entity.Migrations.History.HistoryContext>) System.Data.Entity.DbConfiguration.SetDefaultSpatialServices(System.Data.Entity.Spatial.DbSpatialServices) System.Data.Entity.DbConfiguration.SetSpatialServices(System.Data.Entity.Infrastructure.DbProviderInfo, System.Data.Entity.Spatial.DbSpatialServices) System.Data.Entity.DbConfiguration.SetSpatialServices(System.String, System.Data.Entity.Spatial.DbSpatialServices) System.Data.Entity.DbConfiguration.SetDatabaseLogFormatter(System.Func<System.Data.Entity.DbContext, System.Action<System.String>, System.Data.Entity.Infrastructure.Interception.DatabaseLogFormatter>) System.Data.Entity.DbConfiguration.AddInterceptor(System.Data.Entity.Infrastructure.Interception.IDbInterceptor) System.Data.Entity.DbConfiguration.SetContextFactory(System.Type, System.Func<System.Data.Entity.DbContext>) System.Data.Entity.DbConfiguration.SetContextFactory<TContext>(System.Func<TContext>) System.Data.Entity.DbConfiguration.SetTableExistenceChecker(System.String, System.Data.Entity.Infrastructure.TableExistenceChecker) System.Data.Entity.DbConfiguration.DependencyResolver System.Data.Entity.DbConfiguration.Loaded System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.EntityFramework Assembly : Apache.Ignite.EntityFramework.dll Syntax public class IgniteDbConfiguration : DbConfiguration Constructors IgniteDbConfiguration() Initializes a new instance of the IgniteDbConfiguration class. This constructor uses default Ignite instance (with null IgniteInstanceName ) and a cache with DefaultCacheNamePrefix name. Ignite instance will be started automatically, if it is not started yet. IgniteConfigurationSection with name Apache.Ignite.EntityFramework.IgniteDbConfiguration.ConfigurationSectionName will be picked up when starting Ignite, if present. Declaration public IgniteDbConfiguration() IgniteDbConfiguration(IgniteConfiguration, CacheConfiguration, CacheConfiguration, IDbCachingPolicy) Initializes a new instance of the IgniteDbConfiguration class. Declaration public IgniteDbConfiguration(IgniteConfiguration igniteConfiguration, CacheConfiguration metaCacheConfiguration, CacheConfiguration dataCacheConfiguration, IDbCachingPolicy policy) Parameters Type Name Description IgniteConfiguration igniteConfiguration The ignite configuration to use for starting Ignite instance. CacheConfiguration metaCacheConfiguration Configuration of the metadata cache which holds entity set information. Null for default configuration. This cache holds small amount of data, but should not lose entries. At least one backup recommended. CacheConfiguration dataCacheConfiguration Configuration of the data cache which holds query results. Null for default configuration. This cache tolerates lost data and can have no backups. IDbCachingPolicy policy The caching policy. Null for default DbCachingPolicy . IgniteDbConfiguration(IIgnite, CacheConfiguration, CacheConfiguration, IDbCachingPolicy) Initializes a new instance of the IgniteDbConfiguration class. Declaration public IgniteDbConfiguration(IIgnite ignite, CacheConfiguration metaCacheConfiguration, CacheConfiguration dataCacheConfiguration, IDbCachingPolicy policy) Parameters Type Name Description IIgnite ignite The ignite instance to use. CacheConfiguration metaCacheConfiguration Configuration of the metadata cache which holds entity set information. Null for default configuration. This cache holds small amount of data, but should not lose entries. At least one backup recommended. CacheConfiguration dataCacheConfiguration Configuration of the data cache which holds query results. Null for default configuration. This cache tolerates lost data and can have no backups. IDbCachingPolicy policy The caching policy. Null for default DbCachingPolicy . IgniteDbConfiguration(String, CacheConfiguration, CacheConfiguration, IDbCachingPolicy) Initializes a new instance of the IgniteDbConfiguration class. Declaration public IgniteDbConfiguration(string configurationSectionName, CacheConfiguration metaCacheConfiguration, CacheConfiguration dataCacheConfiguration, IDbCachingPolicy policy) Parameters Type Name Description System.String configurationSectionName Name of the configuration section. CacheConfiguration metaCacheConfiguration Configuration of the metadata cache which holds entity set information. Null for default configuration. This cache holds small amount of data, but should not lose entries. At least one backup recommended. CacheConfiguration dataCacheConfiguration Configuration of the data cache which holds query results. Null for default configuration. This cache tolerates lost data and can have no backups. IDbCachingPolicy policy The caching policy. Null for default DbCachingPolicy . IgniteDbConfiguration(String, String, IDbCachingPolicy) Initializes a new instance of the IgniteDbConfiguration class. Declaration public IgniteDbConfiguration(string configurationSectionName, string cacheNamePrefix, IDbCachingPolicy policy) Parameters Type Name Description System.String configurationSectionName Name of the configuration section. System.String cacheNamePrefix The cache name prefix for Data and Metadata caches. IDbCachingPolicy policy The caching policy. Null for default DbCachingPolicy . Fields DefaultCacheNamePrefix The default cache name to be used for cached EF data. Declaration public const string DefaultCacheNamePrefix = \"entityFrameworkQueryCache\" Field Value Type Description System.String Methods InitializeIgniteCaching(DbConfiguration, IIgnite, CacheConfiguration, CacheConfiguration, IDbCachingPolicy) Initializes Ignite caching for specified System.Data.Entity.DbConfiguration . This method should be used when it is not possible to use or inherit IgniteDbConfiguration . Declaration public static void InitializeIgniteCaching(DbConfiguration dbConfiguration, IIgnite ignite, CacheConfiguration metaCacheConfiguration, CacheConfiguration dataCacheConfiguration, IDbCachingPolicy policy) Parameters Type Name Description System.Data.Entity.DbConfiguration dbConfiguration System.Data.Entity.DbConfiguration instance to be initialized for Ignite caching. IIgnite ignite The ignite instance to use. CacheConfiguration metaCacheConfiguration Configuration of the metadata cache which holds entity set information. Null for default configuration. This cache holds small amount of data, but should not lose entries. At least one backup recommended. CacheConfiguration dataCacheConfiguration Configuration of the data cache which holds query results. Null for default configuration. This cache tolerates lost data and can have no backups. IDbCachingPolicy policy The caching policy. Null for default DbCachingPolicy ."
  },
  "api/Apache.Ignite.EntityFramework.html": {
    "href": "api/Apache.Ignite.EntityFramework.html",
    "title": "Namespace Apache.Ignite.EntityFramework | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.EntityFramework Classes DbCachingPolicy Default caching policy implementation: everything is cached with ReadWrite , no expiration. DbQueryInfo Query info. IgniteDbConfiguration System.Data.Entity.DbConfiguration implementation that uses Ignite as a second-level cache for Entity Framework queries. Interfaces IDbCachingPolicy Caching policy: defines which queries should be cached. Enums DbCachingMode Represents a second-level caching strategy."
  },
  "api/Apache.Ignite.Linq.CacheClientLinqExtensions.html": {
    "href": "api/Apache.Ignite.Linq.CacheClientLinqExtensions.html",
    "title": "Class CacheClientLinqExtensions | Apache Ignite.NET",
    "keywords": "Class CacheClientLinqExtensions Extensions methods for ICacheClient<TK, TV> . Inheritance System.Object CacheClientLinqExtensions Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Linq Assembly : Apache.Ignite.Linq.dll Syntax public static class CacheClientLinqExtensions Methods AsCacheQueryable<TKey, TValue>(ICacheClient<TKey, TValue>) Gets an System.Linq.IQueryable<T> instance over this cache. Resulting query will be translated to cache SQL query and executed over the cache instance via either Query(SqlFieldsQuery) . Result of this method (and subsequent query) can be cast to ICacheQueryable for introspection, or converted with ToCacheQueryable<T>(IQueryable<T>) extension method. Declaration public static IQueryable<ICacheEntry<TKey, TValue>> AsCacheQueryable<TKey, TValue>(this ICacheClient<TKey, TValue> cache) Parameters Type Name Description ICacheClient <TKey, TValue> cache The cache. Returns Type Description System.Linq.IQueryable < ICacheEntry <TKey, TValue>> System.Linq.IQueryable<T> instance over this cache. Type Parameters Name Description TKey The type of the key. TValue The type of the value. AsCacheQueryable<TKey, TValue>(ICacheClient<TKey, TValue>, QueryOptions) Gets an System.Linq.IQueryable<T> instance over this cache. Resulting query will be translated to cache SQL query and executed over the cache instance via either Query(SqlFieldsQuery) . Result of this method (and subsequent query) can be cast to ICacheQueryable for introspection. Declaration public static IQueryable<ICacheEntry<TKey, TValue>> AsCacheQueryable<TKey, TValue>(this ICacheClient<TKey, TValue> cache, QueryOptions queryOptions) Parameters Type Name Description ICacheClient <TKey, TValue> cache The cache. QueryOptions queryOptions The query options. Returns Type Description System.Linq.IQueryable < ICacheEntry <TKey, TValue>> System.Linq.IQueryable<T> instance over this cache. Type Parameters Name Description TKey The type of the key. TValue The type of the value. AsCacheQueryable<TKey, TValue>(ICacheClient<TKey, TValue>, Boolean) Gets an System.Linq.IQueryable<T> instance over this cache. Resulting query will be translated to cache SQL query and executed over the cache instance via either Query(SqlFieldsQuery) . Result of this method (and subsequent query) can be cast to ICacheQueryable for introspection. Declaration public static IQueryable<ICacheEntry<TKey, TValue>> AsCacheQueryable<TKey, TValue>(this ICacheClient<TKey, TValue> cache, bool local) Parameters Type Name Description ICacheClient <TKey, TValue> cache The cache. System.Boolean local Local flag. When set query will be executed only on local node, so only local entries will be returned as query result. Returns Type Description System.Linq.IQueryable < ICacheEntry <TKey, TValue>> System.Linq.IQueryable<T> instance over this cache. Type Parameters Name Description TKey The type of the key. TValue The type of the value. AsCacheQueryable<TKey, TValue>(ICacheClient<TKey, TValue>, Boolean, String) Gets an System.Linq.IQueryable<T> instance over this cache. Resulting query will be translated to cache SQL query and executed over the cache instance via either Query(SqlFieldsQuery) . Result of this method (and subsequent query) can be cast to ICacheQueryable for introspection. Declaration public static IQueryable<ICacheEntry<TKey, TValue>> AsCacheQueryable<TKey, TValue>(this ICacheClient<TKey, TValue> cache, bool local, string tableName) Parameters Type Name Description ICacheClient <TKey, TValue> cache The cache. System.Boolean local Local flag. When set query will be executed only on local node, so only local entries will be returned as query result. System.String tableName Name of the table. Table name is equal to short class name of a cache value. When a cache has only one type of values, or only one QueryEntity defined, table name will be inferred and can be omitted. Returns Type Description System.Linq.IQueryable < ICacheEntry <TKey, TValue>> System.Linq.IQueryable<T> instance over this cache. Type Parameters Name Description TKey The type of the key. TValue The type of the value."
  },
  "api/Apache.Ignite.Core.Binary.BinaryBasicNameMapper.html": {
    "href": "api/Apache.Ignite.Core.Binary.BinaryBasicNameMapper.html",
    "title": "Class BinaryBasicNameMapper | Apache Ignite.NET",
    "keywords": "Class BinaryBasicNameMapper Base binary name mapper implementation. Inheritance System.Object BinaryBasicNameMapper Implements IBinaryNameMapper Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Binary Assembly : Apache.Ignite.Core.dll Syntax public class BinaryBasicNameMapper : IBinaryNameMapper Properties IsSimpleName Gets or sets a value indicating whether this instance maps to simple type names. Declaration public bool IsSimpleName { get; set; } Property Value Type Description System.Boolean Methods GetFieldName(String) Gets the field name. Declaration public string GetFieldName(string name) Parameters Type Name Description System.String name Returns Type Description System.String GetTypeName(String) Gets the type name. Declaration public string GetTypeName(string name) Parameters Type Name Description System.String name Returns Type Description System.String Implements IBinaryNameMapper"
  },
  "api/Apache.Ignite.Core.Binary.BinaryTypeConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Binary.BinaryTypeConfiguration.html",
    "title": "Class BinaryTypeConfiguration | Apache Ignite.NET",
    "keywords": "Class BinaryTypeConfiguration Binary type configuration. Inheritance System.Object BinaryTypeConfiguration Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Binary Assembly : Apache.Ignite.Core.dll Syntax public class BinaryTypeConfiguration Constructors BinaryTypeConfiguration() Constructor. Declaration public BinaryTypeConfiguration() BinaryTypeConfiguration(BinaryTypeConfiguration) Copying constructor. Declaration public BinaryTypeConfiguration(BinaryTypeConfiguration cfg) Parameters Type Name Description BinaryTypeConfiguration cfg Configuration to copy. BinaryTypeConfiguration(String) Constructor. Declaration public BinaryTypeConfiguration(string typeName) Parameters Type Name Description System.String typeName Type name. BinaryTypeConfiguration(Type) Constructor. Declaration public BinaryTypeConfiguration(Type type) Parameters Type Name Description System.Type type Type. Properties AffinityKeyFieldName Affinity key field name. Declaration public string AffinityKeyFieldName { get; set; } Property Value Type Description System.String IdMapper 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. Declaration public IBinaryIdMapper IdMapper { get; set; } Property Value Type Description IBinaryIdMapper IsEnum Gets or sets a value indicating whether this instance describes an enum type. Declaration public bool IsEnum { get; set; } Property Value Type Description System.Boolean KeepDeserialized Keep deserialized flag. If set to non-null value, overrides default value set in BinaryTypeConfiguration . Declaration public bool ? KeepDeserialized { get; set; } Property Value Type Description System.Nullable < System.Boolean > NameMapper Name mapper for the given type. Declaration public IBinaryNameMapper NameMapper { get; set; } Property Value Type Description IBinaryNameMapper Serializer 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. Declaration public IBinarySerializer Serializer { get; set; } Property Value Type Description IBinarySerializer TypeName Fully qualified type name. Declaration public string TypeName { get; set; } Property Value Type Description System.String Methods ToString() Returns a string that represents the current object. Declaration public override string ToString() Returns Type Description System.String A string that represents the current object. Overrides System.Object.ToString()"
  },
  "api/Apache.Ignite.Core.Binary.IBinaryRawReader.html": {
    "href": "api/Apache.Ignite.Core.Binary.IBinaryRawReader.html",
    "title": "Interface IBinaryRawReader | Apache Ignite.NET",
    "keywords": "Interface IBinaryRawReader Raw reader for binary objects. Namespace : Apache.Ignite.Core.Binary Assembly : Apache.Ignite.Core.dll Syntax public interface IBinaryRawReader Methods ReadArray<T>() Read object array. Declaration T[] ReadArray<T>() Returns Type Description T[] Object array. Type Parameters Name Description T ReadBoolean() Read boolean value. Declaration bool ReadBoolean() Returns Type Description System.Boolean Boolean value. ReadBooleanArray() Read boolean array. Declaration bool[] ReadBooleanArray() Returns Type Description System.Boolean [] Boolean array. ReadByte() Read byte value. Declaration byte ReadByte() Returns Type Description System.Byte Byte value. ReadByteArray() Read byte array. Declaration byte[] ReadByteArray() Returns Type Description System.Byte [] Byte array. ReadChar() Read char value. Declaration char ReadChar() Returns Type Description System.Char Char value. ReadCharArray() Read char array. Declaration char[] ReadCharArray() Returns Type Description System.Char [] Char array. ReadCollection() Read collection. Declaration ICollection ReadCollection() Returns Type Description System.Collections.ICollection Collection. ReadCollection(Func<Int32, ICollection>, Action<ICollection, Object>) Read collection. Declaration ICollection ReadCollection(Func<int, ICollection> factory, Action<ICollection, object> adder) Parameters Type Name Description System.Func < System.Int32 , System.Collections.ICollection > factory Factory. System.Action < System.Collections.ICollection , System.Object > adder Adder. Returns Type Description System.Collections.ICollection Collection. ReadDecimal() Read decimal value. Declaration decimal ? ReadDecimal() Returns Type Description System.Nullable < System.Decimal > Decimal value. ReadDecimalArray() Read decimal array. Declaration decimal ? [] ReadDecimalArray() Returns Type Description System.Nullable < System.Decimal >[] Decimal array. ReadDictionary() Read dictionary. Declaration IDictionary ReadDictionary() Returns Type Description System.Collections.IDictionary Dictionary. ReadDictionary(Func<Int32, IDictionary>) Read dictionary. Declaration IDictionary ReadDictionary(Func<int, IDictionary> factory) Parameters Type Name Description System.Func < System.Int32 , System.Collections.IDictionary > factory Factory. Returns Type Description System.Collections.IDictionary Dictionary. ReadDouble() Read double value. Declaration double ReadDouble() Returns Type Description System.Double Double value. ReadDoubleArray() Read double array. Declaration double[] ReadDoubleArray() Returns Type Description System.Double [] Double array. ReadEnum<T>() Read enum value. Declaration T ReadEnum<T>() Returns Type Description T Enum value. Type Parameters Name Description T ReadEnumArray<T>() Read enum array. Declaration T[] ReadEnumArray<T>() Returns Type Description T[] Enum array. Type Parameters Name Description T ReadFloat() Read float value. Declaration float ReadFloat() Returns Type Description System.Single Float value. ReadFloatArray() Read float array. Declaration float[] ReadFloatArray() Returns Type Description System.Single [] Float array. ReadGuid() Read GUID value. Declaration Guid? ReadGuid() Returns Type Description System.Nullable < System.Guid > GUID value. ReadGuidArray() Read GUID array. Declaration Guid? [] ReadGuidArray() Returns Type Description System.Nullable < System.Guid >[] GUID array. ReadInt() Read int value. Declaration int ReadInt() Returns Type Description System.Int32 Int value. ReadIntArray() Read int array. Declaration int[] ReadIntArray() Returns Type Description System.Int32 [] Int array. ReadLong() Read long value. Declaration long ReadLong() Returns Type Description System.Int64 Long value. ReadLongArray() Read long array. Declaration long[] ReadLongArray() Returns Type Description System.Int64 [] Long array. ReadObject<T>() Read object. Declaration T ReadObject<T>() Returns Type Description T Object. Type Parameters Name Description T ReadShort() Read short value. Declaration short ReadShort() Returns Type Description System.Int16 Short value. ReadShortArray() Read short array. Declaration short[] ReadShortArray() Returns Type Description System.Int16 [] Short array. ReadString() Read string value. Declaration string ReadString() Returns Type Description System.String String value. ReadStringArray() Read string array. Declaration string[] ReadStringArray() Returns Type Description System.String [] String array. ReadTimestamp() Read date value in UTC form. Shortcut for ReadTimestamp(false) . Declaration DateTime? ReadTimestamp() Returns Type Description System.Nullable < System.DateTime > Date value. ReadTimestampArray() Read date array in UTC form. Shortcut for ReadTimestampArray(false) . Declaration DateTime? [] ReadTimestampArray() Returns Type Description System.Nullable < System.DateTime >[] Date array."
  },
  "api/Apache.Ignite.Core.Cache.Affinity.AffinityKey.html": {
    "href": "api/Apache.Ignite.Core.Cache.Affinity.AffinityKey.html",
    "title": "Struct AffinityKey | Apache Ignite.NET",
    "keywords": "Struct AffinityKey Optional wrapper for cache keys to provide support for custom affinity mapping. The value returned by Affinity will be used for key-to-node affinity. Implements System.IEquatable < AffinityKey > Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() Namespace : Apache.Ignite.Core.Cache.Affinity Assembly : Apache.Ignite.Core.dll Syntax public struct AffinityKey : IEquatable<AffinityKey>, IBinaryWriteAware Constructors AffinityKey(Object) Initializes a new instance of the AffinityKey struct. Declaration public AffinityKey(object key) Parameters Type Name Description System.Object key The key. AffinityKey(Object, Object) Initializes a new instance of the AffinityKey struct. Declaration public AffinityKey(object key, object affinity) Parameters Type Name Description System.Object key The key. System.Object affinity The affinity key. Properties Affinity Gets the affinity key. Declaration public object Affinity { get; } Property Value Type Description System.Object Key Gets the key. Declaration public object Key { get; } Property Value Type Description System.Object Methods Equals(AffinityKey) Indicates whether the current object is equal to another object of the same type. Declaration public bool Equals(AffinityKey other) Parameters Type Name Description AffinityKey other An object to compare with this object. Returns Type Description System.Boolean true if the current object is equal to the other parameter; otherwise, false. Equals(Object) Determines whether the specified System.Object , is equal to this instance. Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj The System.Object to compare with this instance. Returns Type Description System.Boolean true if the specified System.Object is equal to this instance; otherwise, false . Overrides System.ValueType.Equals(System.Object) GetHashCode() Returns a hash code for this instance. Declaration public override int GetHashCode() Returns Type Description System.Int32 A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Overrides System.ValueType.GetHashCode() ToString() Returns a System.String that represents this instance. Declaration public override string ToString() Returns Type Description System.String A System.String that represents this instance. Overrides System.ValueType.ToString() WriteBinary(IBinaryWriter) Writes this object to the given writer. Declaration public void WriteBinary(IBinaryWriter writer) Parameters Type Name Description IBinaryWriter writer Writer. Operators Equality(AffinityKey, AffinityKey) Implements the operator ==. Declaration public static bool operator ==(AffinityKey left, AffinityKey right) Parameters Type Name Description AffinityKey left The left. AffinityKey right The right. Returns Type Description System.Boolean The result of the operator. Inequality(AffinityKey, AffinityKey) Implements the operator !=. Declaration public static bool operator !=(AffinityKey left, AffinityKey right) Parameters Type Name Description AffinityKey left The left. AffinityKey right The right. Returns Type Description System.Boolean The result of the operator. Implements System.IEquatable<T>"
  },
  "api/Apache.Ignite.Core.Cache.CachePartialUpdateException.html": {
    "href": "api/Apache.Ignite.Core.Cache.CachePartialUpdateException.html",
    "title": "Class CachePartialUpdateException | Apache Ignite.NET",
    "keywords": "Class CachePartialUpdateException Exception thrown from non-transactional cache in case when update succeeded only partially. Inheritance System.Object System.Exception IgniteException CacheException CachePartialUpdateException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class CachePartialUpdateException : CacheException, ISerializable, _Exception Constructors CachePartialUpdateException() Initializes a new instance of the CachePartialUpdateException class. Declaration public CachePartialUpdateException() CachePartialUpdateException(SerializationInfo, StreamingContext) Initializes a new instance of the CachePartialUpdateException class. Declaration protected CachePartialUpdateException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. CachePartialUpdateException(String) Initializes a new instance of the CachePartialUpdateException class. Declaration public CachePartialUpdateException(string message) Parameters Type Name Description System.String message The message that describes the error. CachePartialUpdateException(String, IList<Object>) Constructor. Declaration public CachePartialUpdateException(string msg, IList<object> failedKeys) Parameters Type Name Description System.String msg Exception message. System.Collections.Generic.IList < System.Object > failedKeys Failed keys. CachePartialUpdateException(String, Exception) Constructor. Declaration public CachePartialUpdateException(string msg, Exception failedKeysException) Parameters Type Name Description System.String msg Exception message. System.Exception failedKeysException Exception occurred during failed keys read/write. Methods GetFailedKeys<T>() Gets the failed keys. Declaration public IEnumerable<T> GetFailedKeys<T>() Returns Type Description System.Collections.Generic.IEnumerable <T> Type Parameters Name Description T GetObjectData(SerializationInfo, StreamingContext) When overridden in a derived class, sets the System.Runtime.Serialization.SerializationInfo with information about the exception. Declaration public override void GetObjectData(SerializationInfo info, StreamingContext context) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info The System.Runtime.Serialization.SerializationInfo that holds the serialized object data about the exception being thrown. System.Runtime.Serialization.StreamingContext context The System.Runtime.Serialization.StreamingContext that contains contextual information about the source or destination. Overrides System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Cache.Configuration.MemoryPolicyConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Cache.Configuration.MemoryPolicyConfiguration.html",
    "title": "Class MemoryPolicyConfiguration | Apache Ignite.NET",
    "keywords": "Class MemoryPolicyConfiguration Defines page memory policy configuration. See MemoryPolicies . Obsolete, use DataRegionConfiguration . Inheritance System.Object MemoryPolicyConfiguration Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Configuration Assembly : Apache.Ignite.Core.dll Syntax [Obsolete(\"Use DataRegionConfiguration.\")] public class MemoryPolicyConfiguration Constructors MemoryPolicyConfiguration() Initializes a new instance of the MemoryPolicyConfiguration class. Declaration public MemoryPolicyConfiguration() Fields DefaultEmptyPagesPoolSize The default empty pages pool size. Declaration public const int DefaultEmptyPagesPoolSize = 100 Field Value Type Description System.Int32 DefaultEvictionThreshold The default eviction threshold. Declaration public const double DefaultEvictionThreshold = 0.9 Field Value Type Description System.Double DefaultInitialSize The default initial size. Declaration public const long DefaultInitialSize = 268435456L Field Value Type Description System.Int64 DefaultMaxSize The default maximum size, equals to 20% of total RAM. Declaration public static readonly long DefaultMaxSize Field Value Type Description System.Int64 DefaultRateTimeInterval The default rate time interval. Declaration public static readonly TimeSpan DefaultRateTimeInterval Field Value Type Description System.TimeSpan DefaultSubIntervals The default sub intervals. Declaration public const int DefaultSubIntervals = 5 Field Value Type Description System.Int32 Properties EmptyPagesPoolSize Gets or sets the minimal number of empty pages to be present in reuse lists for this memory policy. This parameter ensures that Ignite will be able to successfully evict old data entries when the size of (key, value) pair is slightly larger than page size / 2. Increase this parameter if cache can contain very big entries (total size of pages in this pool should be enough to contain largest cache entry). Declaration public int EmptyPagesPoolSize { get; set; } Property Value Type Description System.Int32 EvictionThreshold Gets or sets the threshold for memory pages eviction initiation. For instance, if the threshold is 0.9 it means that the page memory will start the eviction only after 90% of the memory region (defined by this policy) is occupied. Declaration public double EvictionThreshold { get; set; } Property Value Type Description System.Double InitialSize Gets or sets initial memory region size defined by this memory policy. When the used memory size exceeds this value, new chunks of memory will be allocated. Declaration public long InitialSize { get; set; } Property Value Type Description System.Int64 MaxSize Sets maximum memory region size defined by this memory policy. The total size should not be less than 10 MB due to internal data structures overhead. Declaration public long MaxSize { get; set; } Property Value Type Description System.Int64 MetricsEnabled Gets or sets a value indicating whether memory metrics should be enabled. Metrics can be retrieved with GetMemoryMetrics() method. Declaration public bool MetricsEnabled { get; set; } Property Value Type Description System.Boolean Name Gets or sets the memory policy name. Defaults to DefaultDefaultMemoryPolicyName . Declaration public string Name { get; set; } Property Value Type Description System.String PageEvictionMode Gets or sets the page eviction mode. If Disabled is used (default) then an out of memory exception will be thrown if the memory region usage, defined by this memory policy, goes beyond MaxSize . Declaration public DataPageEvictionMode PageEvictionMode { get; set; } Property Value Type Description DataPageEvictionMode RateTimeInterval Gets or sets the rate time interval for AllocationRate and EvictionRate monitoring purposes. For instance, after setting the interval to 60 seconds, subsequent calls to AllocationRate will return average allocation rate (pages per second) for the last minute. Declaration public TimeSpan RateTimeInterval { get; set; } Property Value Type Description System.TimeSpan SubIntervals Gets or sets the number of sub intervals to split RateTimeInterval into to calculate AllocationRate and EvictionRate . Bigger value results in more accurate metrics. Declaration public int SubIntervals { get; set; } Property Value Type Description System.Int32 SwapFilePath Gets or sets the the path to the memory-mapped file the memory region defined by this memory policy will be mapped to. Having the path set, allows relying on swapping capabilities of an underlying operating system for the memory region. Null for no swap. Declaration public string SwapFilePath { get; set; } Property Value Type Description System.String"
  },
  "api/Apache.Ignite.Core.Cache.Configuration.QueryIndexType.html": {
    "href": "api/Apache.Ignite.Core.Cache.Configuration.QueryIndexType.html",
    "title": "Enum QueryIndexType | Apache Ignite.NET",
    "keywords": "Enum QueryIndexType Query index type. Namespace : Apache.Ignite.Core.Cache.Configuration Assembly : Apache.Ignite.Core.dll Syntax public enum QueryIndexType Fields Name Description FullText Fulltext index. Geospatial Geo-spatial index. Sorted Sorted index."
  },
  "api/Apache.Ignite.Core.Cache.Eviction.FifoEvictionPolicy.html": {
    "href": "api/Apache.Ignite.Core.Cache.Eviction.FifoEvictionPolicy.html",
    "title": "Class FifoEvictionPolicy | Apache Ignite.NET",
    "keywords": "Class FifoEvictionPolicy Eviction policy based on First In First Out (FIFO) algorithm with batch eviction support. The eviction starts in the following cases: The cache size becomes BatchSize elements greater than the maximum size; The size of cache entries in bytes becomes greater than the maximum memory size; The size of cache entry calculates as sum of key size and value size. Note: Batch eviction is enabled only if maximum memory limit isn't set. This implementation is very efficient since it does not create any additional table-like data structures. The FIFO ordering information is maintained by attaching ordering metadata to cache entries. Inheritance System.Object EvictionPolicyBase FifoEvictionPolicy Implements IEvictionPolicy Inherited Members EvictionPolicyBase.DefaultBatchSize EvictionPolicyBase.DefaultMaxSize EvictionPolicyBase.DefaultMaxMemorySize EvictionPolicyBase.BatchSize EvictionPolicyBase.MaxSize EvictionPolicyBase.MaxMemorySize System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Eviction Assembly : Apache.Ignite.Core.dll Syntax public class FifoEvictionPolicy : EvictionPolicyBase, IEvictionPolicy Implements IEvictionPolicy"
  },
  "api/Apache.Ignite.Core.Cache.ICacheEntryProcessor-4.html": {
    "href": "api/Apache.Ignite.Core.Cache.ICacheEntryProcessor-4.html",
    "title": "Interface ICacheEntryProcessor<TK, TV, TArg, TRes> | Apache Ignite.NET",
    "keywords": "Interface ICacheEntryProcessor<TK, TV, TArg, TRes> An invocable function that allows applications to perform compound operations on a cache entry atomically, according the defined consistency of a cache. Any cache entry mutations will not take effect until after the Process(IMutableCacheEntry<TK, TV>, TArg) method has completedS execution. If an exception is thrown by an entry processor, a Caching Implementation must wrap any exception thrown wrapped in an CacheEntryProcessorException If this occurs no mutations will be made to the cache entry. Namespace : Apache.Ignite.Core.Cache Assembly : Apache.Ignite.Core.dll Syntax public interface ICacheEntryProcessor<in TK, TV, in TArg, out TRes> Type Parameters Name Description TK Key type. TV Value type. TArg The type of the processor argument. TRes The type of the processor result. Methods Process(IMutableCacheEntry<TK, TV>, TArg) Process an entry. Declaration TRes Process(IMutableCacheEntry<TK, TV> entry, TArg arg) Parameters Type Name Description IMutableCacheEntry <TK, TV> entry The entry to process. TArg arg The argument. Returns Type Description TRes Processing result."
  },
  "api/Apache.Ignite.Core.Cache.ICacheEntryProcessorResult-2.html": {
    "href": "api/Apache.Ignite.Core.Cache.ICacheEntryProcessorResult-2.html",
    "title": "Interface ICacheEntryProcessorResult<TK, T> | Apache Ignite.NET",
    "keywords": "Interface ICacheEntryProcessorResult<TK, T> Represents a result of processing ICacheEntry<TK, TV> by ICacheEntryProcessor<TK, TV, TArg, TRes> . Namespace : Apache.Ignite.Core.Cache Assembly : Apache.Ignite.Core.dll Syntax public interface ICacheEntryProcessorResult<out TK, out T> Type Parameters Name Description TK Key type. T Processor result type. Properties Key Gets the cache key. Declaration TK Key { get; } Property Value Type Description TK Result Gets the result of processing an entry. If an exception was thrown during the processing of an entry, either by the ICacheEntryProcessor<TK, TV, TArg, TRes> itself or by the Caching implementation, the exceptions will be wrapped and re-thrown as a CacheEntryProcessorException when calling this property. Declaration T Result { get; } Property Value Type Description T The result."
  },
  "api/Apache.Ignite.Core.Cache.Query.IFieldsQueryCursor.html": {
    "href": "api/Apache.Ignite.Core.Cache.Query.IFieldsQueryCursor.html",
    "title": "Interface IFieldsQueryCursor | Apache Ignite.NET",
    "keywords": "Interface IFieldsQueryCursor Fields query cursor. Inherited Members IQueryCursor<IList<Object>>.GetAll() System.Collections.Generic.IEnumerable<System.Collections.Generic.IList<System.Object>>.GetEnumerator() System.IDisposable.Dispose() Namespace : Apache.Ignite.Core.Cache.Query Assembly : Apache.Ignite.Core.dll Syntax public interface IFieldsQueryCursor : IQueryCursor<IList<object>>, IEnumerable<IList<object>>, IEnumerable, IDisposable Properties FieldNames Gets the field names. Declaration IList<string> FieldNames { get; } Property Value Type Description System.Collections.Generic.IList < System.String > Fields Gets fields metadata. Declaration IList<IQueryCursorField> Fields { get; } Property Value Type Description System.Collections.Generic.IList < IQueryCursorField >"
  },
  "api/Apache.Ignite.Core.Cache.Query.IQueryCursor-1.html": {
    "href": "api/Apache.Ignite.Core.Cache.Query.IQueryCursor-1.html",
    "title": "Interface IQueryCursor<T> | Apache Ignite.NET",
    "keywords": "Interface IQueryCursor<T> Query result cursor. Can be processed either in iterative mode, or by taking all entries using GetAll() method. Note that you get enumerator or call GetAll() method only once during cursor lifetime. Any further attempts to get enumerator or all entries will result in exception. Inherited Members System.Collections.Generic.IEnumerable<T>.GetEnumerator() System.IDisposable.Dispose() Namespace : Apache.Ignite.Core.Cache.Query Assembly : Apache.Ignite.Core.dll Syntax public interface IQueryCursor<T> : IEnumerable<T>, IEnumerable, IDisposable Type Parameters Name Description T Methods GetAll() Gets all query results. Use this method when you know in advance that query result is relatively small and will not cause memory utilization issues. Declaration IList<T> GetAll() Returns Type Description System.Collections.Generic.IList <T> List containing all query results."
  },
  "api/Apache.Ignite.Core.Cache.Store.ICacheStoreSession.html": {
    "href": "api/Apache.Ignite.Core.Cache.Store.ICacheStoreSession.html",
    "title": "Interface ICacheStoreSession | Apache Ignite.NET",
    "keywords": "Interface ICacheStoreSession Session for the cache store operations. The main purpose of cache store session is to hold context between multiple store invocations whenever in transaction. For example, you can save current database connection in the session Properties map. You can then commit this connection in the SessionEnd(Boolean) method. Namespace : Apache.Ignite.Core.Cache.Store Assembly : Apache.Ignite.Core.dll Syntax public interface ICacheStoreSession Properties CacheName Cache name for the current store operation. Note that if the same store is reused between different caches, then the cache name will change between different store operations. Declaration string CacheName { get; } Property Value Type Description System.String Properties Current session properties. You can add properties directly to the returned map. Declaration IDictionary<object, object> Properties { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.Object , System.Object >"
  },
  "api/Apache.Ignite.Core.Cache.Store.html": {
    "href": "api/Apache.Ignite.Core.Cache.Store.html",
    "title": "Namespace Apache.Ignite.Core.Cache.Store | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Cache.Store Classes CacheParallelLoadStoreAdapter<TK, TV, TData> Cache storage adapter with parallel loading in LoadAll method. CacheStoreAdapter<TK, TV> Cache storage convenience adapter. It provides default implementation for bulk operations, such as LoadAll , PutAll and RemoveAll by sequentially calling corresponding Load , Put and Remove operations. Use this adapter whenever such behaviour is acceptable. However in many cases it maybe more preferable to take advantage of database batch update functionality, and therefore default adapter implementation may not be the best option. Note that LoadCache method has empty implementation because it is essentially up to the user to invoke it with specific arguments. CacheStoreException Indicates an error during CacheStore operation. Interfaces ICacheStore Non-generic base type for ICacheStore<TK, TV> , used only for configuration property. Users should implement generic ICacheStore<TK, TV> . ICacheStore<TK, TV> API for cache persistent storage for read-through and write-through behavior. Generic argument types depend on KeepBinaryInStore property. When true (default), cache store operates on IBinaryObject instances. Otherwise, generic arguments should be the same as in corresponding ICache<TK, TV> . Persistent store is configured in Ignite's Spring XML configuration file via CacheConfiguration.setStore() property. If you have an implementation of cache store in .NET, you should use special Java wrapper which accepts assembly name and class name of .NET store implementation (both properties are mandatory). Optionally, you may specify \"properies\" property to set any property values on an instance of your store. Here is an example: <bean class=\"org.apache.ignite.configuration.CacheConfiguration\"> ... <property name=\"cacheStoreFactory\"> <bean class=\"org.apache.ignite.platform.dotnet.PlatformDotNetCacheStoreFactory\"> <property name=\"assemblyName\" value=\"MyAssembly\"/> <property name=\"className\" value=\"MyApp.MyCacheStore\"/> <property name=\"properties\"> <map> <entry key=\"IntProperty\"> <value type=\"java.lang.Integer\">42</value> </entry> <entry key=\"StringProperty\" value=\"String value\"/> </map> </property> </bean> </property> ... </bean> Assemply name and class name are passed to System.Activator.CreateInstance(String, String) method during node startup to create an instance of cache store. Refer to its documentation for details. All transactional operations of this API are provided with ongoing ITransaction , if any. You can attach any metadata to transaction, e.g. to recognize if several operations belong to the same transaction or not. Here is an example of how attach a ODBC connection as transaction metadata: OdbcConnection conn = tx.Meta(\"some.name\"); if (conn == null) { conn = ...; // Create or get connection. // Store connection in transaction metadata, so it can be accessed // for other operations on the same transaction. tx.AddMeta(\"some.name\", conn); } ICacheStoreSession Session for the cache store operations. The main purpose of cache store session is to hold context between multiple store invocations whenever in transaction. For example, you can save current database connection in the session Properties map. You can then commit this connection in the SessionEnd(Boolean) method."
  },
  "api/Apache.Ignite.Core.Client.IgniteClientConfigurationSection.html": {
    "href": "api/Apache.Ignite.Core.Client.IgniteClientConfigurationSection.html",
    "title": "Class IgniteClientConfigurationSection | Apache Ignite.NET",
    "keywords": "Class IgniteClientConfigurationSection Ignite configuration section for app.config and web.config files. Inheritance System.Object System.Configuration.ConfigurationElement System.Configuration.ConfigurationSection IgniteClientConfigurationSection Inherited Members System.Configuration.ConfigurationSection.GetRuntimeObject() System.Configuration.ConfigurationSection.IsModified() System.Configuration.ConfigurationSection.ResetModified() System.Configuration.ConfigurationSection.ShouldSerializePropertyInTargetVersion(System.Configuration.ConfigurationProperty, System.String, System.Runtime.Versioning.FrameworkName, System.Configuration.ConfigurationElement) System.Configuration.ConfigurationSection.ShouldSerializeElementInTargetVersion(System.Configuration.ConfigurationElement, System.String, System.Runtime.Versioning.FrameworkName) System.Configuration.ConfigurationSection.ShouldSerializeSectionInTargetVersion(System.Runtime.Versioning.FrameworkName) System.Configuration.ConfigurationSection.SectionInformation System.Configuration.ConfigurationElement.Init() System.Configuration.ConfigurationElement.IsReadOnly() System.Configuration.ConfigurationElement.SetReadOnly() System.Configuration.ConfigurationElement.ListErrors(System.Collections.IList) System.Configuration.ConfigurationElement.InitializeDefault() System.Configuration.ConfigurationElement.Reset(System.Configuration.ConfigurationElement) System.Configuration.ConfigurationElement.Equals(System.Object) System.Configuration.ConfigurationElement.GetHashCode() System.Configuration.ConfigurationElement.SetPropertyValue(System.Configuration.ConfigurationProperty, System.Object, System.Boolean) System.Configuration.ConfigurationElement.Unmerge(System.Configuration.ConfigurationElement, System.Configuration.ConfigurationElement, System.Configuration.ConfigurationSaveMode) System.Configuration.ConfigurationElement.SerializeToXmlElement(System.Xml.XmlWriter, System.String) System.Configuration.ConfigurationElement.SerializeElement(System.Xml.XmlWriter, System.Boolean) System.Configuration.ConfigurationElement.DeserializeElement(System.Xml.XmlReader, System.Boolean) System.Configuration.ConfigurationElement.OnRequiredPropertyNotFound(System.String) System.Configuration.ConfigurationElement.PostDeserialize() System.Configuration.ConfigurationElement.PreSerialize(System.Xml.XmlWriter) System.Configuration.ConfigurationElement.OnDeserializeUnrecognizedAttribute(System.String, System.String) System.Configuration.ConfigurationElement.OnDeserializeUnrecognizedElement(System.String, System.Xml.XmlReader) System.Configuration.ConfigurationElement.GetTransformedTypeString(System.String) System.Configuration.ConfigurationElement.GetTransformedAssemblyString(System.String) System.Configuration.ConfigurationElement.LockAttributes System.Configuration.ConfigurationElement.LockAllAttributesExcept System.Configuration.ConfigurationElement.LockElements System.Configuration.ConfigurationElement.LockAllElementsExcept System.Configuration.ConfigurationElement.LockItem System.Configuration.ConfigurationElement.Item[System.Configuration.ConfigurationProperty] System.Configuration.ConfigurationElement.Item[System.String] System.Configuration.ConfigurationElement.Properties System.Configuration.ConfigurationElement.ElementInformation System.Configuration.ConfigurationElement.EvaluationContext System.Configuration.ConfigurationElement.ElementProperty System.Configuration.ConfigurationElement.CurrentConfiguration System.Object.ToString() System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Client Assembly : Apache.Ignite.Core.dll Syntax public class IgniteClientConfigurationSection : ConfigurationSection Properties IgniteClientConfiguration Gets the Ignite client configuration. Declaration public IgniteClientConfiguration IgniteClientConfiguration { get; } Property Value Type Description IgniteClientConfiguration Methods DeserializeSection(XmlReader) Reads XML from the configuration file. Declaration protected override void DeserializeSection(XmlReader reader) Parameters Type Name Description System.Xml.XmlReader reader The reader object, which reads from the configuration file. Overrides System.Configuration.ConfigurationSection.DeserializeSection(System.Xml.XmlReader) SerializeSection(ConfigurationElement, String, ConfigurationSaveMode) Creates an XML string containing an unmerged view of the System.Configuration.ConfigurationSection object as a single section to write to a file. Declaration protected override string SerializeSection(ConfigurationElement parentElement, string name, ConfigurationSaveMode saveMode) Parameters Type Name Description System.Configuration.ConfigurationElement parentElement The System.Configuration.ConfigurationElement instance to use as the parent when performing the un-merge. System.String name The name of the section to create. System.Configuration.ConfigurationSaveMode saveMode The System.Configuration.ConfigurationSaveMode instance to use when writing to a string. Returns Type Description System.String An XML string containing an unmerged view of the System.Configuration.ConfigurationSection object. Overrides System.Configuration.ConfigurationSection.SerializeSection(System.Configuration.ConfigurationElement, System.String, System.Configuration.ConfigurationSaveMode)"
  },
  "api/Apache.Ignite.Core.Client.IgniteClientException.html": {
    "href": "api/Apache.Ignite.Core.Client.IgniteClientException.html",
    "title": "Class IgniteClientException | Apache Ignite.NET",
    "keywords": "Class IgniteClientException Ignite thin client exception. Inheritance System.Object System.Exception IgniteException IgniteClientException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Client Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class IgniteClientException : IgniteException, ISerializable, _Exception Constructors IgniteClientException() Initializes a new instance of the IgniteClientException class. Declaration public IgniteClientException() IgniteClientException(SerializationInfo, StreamingContext) Initializes a new instance of the IgniteClientException class. Declaration protected IgniteClientException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. IgniteClientException(String) Initializes a new instance of the IgniteClientException class. Declaration public IgniteClientException(string message) Parameters Type Name Description System.String message The message that describes the error. IgniteClientException(String, Exception) Initializes a new instance of the IgniteClientException class. Declaration public IgniteClientException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. IgniteClientException(String, Exception, ClientStatusCode) Initializes a new instance of the IgniteClientException class. Declaration public IgniteClientException(string message, Exception cause, ClientStatusCode statusCode) Parameters Type Name Description System.String message The message. System.Exception cause The cause. ClientStatusCode statusCode The error code. Properties StatusCode Gets the status code code. Declaration public ClientStatusCode StatusCode { get; } Property Value Type Description ClientStatusCode Methods GetObjectData(SerializationInfo, StreamingContext) When overridden in a derived class, sets the System.Runtime.Serialization.SerializationInfo with information about the exception. Declaration public override void GetObjectData(SerializationInfo info, StreamingContext context) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info The System.Runtime.Serialization.SerializationInfo that holds the serialized object data about the exception being thrown. System.Runtime.Serialization.StreamingContext context The System.Runtime.Serialization.StreamingContext that contains contextual information about the source or destination. Overrides System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) ToString() Returns a System.String that represents this instance. Declaration public override string ToString() Returns Type Description System.String Overrides System.Exception.ToString() Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Cluster.IClusterGroup.html": {
    "href": "api/Apache.Ignite.Core.Cluster.IClusterGroup.html",
    "title": "Interface IClusterGroup | Apache Ignite.NET",
    "keywords": "Interface IClusterGroup Defines grid projection which represents a common functionality over a group of nodes. Grid projection allows to group Ignite nodes into various subgroups to perform distributed operations on them. All ForXXX(...)' methods will create a child grid projection from existing projection. If you create a new projection from current one, then the resulting projection will include a subset of nodes from current projection. The following code snippet shows how to create grid projections: var g = Ignition.GetIgnite(); // Projection over remote nodes. var remoteNodes = g.ForRemotes(); // Projection over random remote node. var randomNode = g.ForRandom(); // Projection over all nodes with cache named \"myCache\" enabled. var cacheNodes = g.ForCacheNodes(\"myCache\"); // Projection over all nodes that have user attribute \"group\" set to value \"worker\". var workerNodes = g.ForAttribute(\"group\", \"worker\"); Grid projection provides functionality for executing tasks and closures over nodes in this projection using GetCompute() . All members are thread-safe and may be used concurrently from multiple threads. Namespace : Apache.Ignite.Core.Cluster Assembly : Apache.Ignite.Core.dll Syntax public interface IClusterGroup Properties Ignite Instance of Ignite. Declaration IIgnite Ignite { get; } Property Value Type Description IIgnite Methods ClearStatistics(IEnumerable<String>) Clears statistics for caches cluster wide. Declaration void ClearStatistics(IEnumerable<string> caches) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.String > caches Collection of cache names. EnableStatistics(IEnumerable<String>, Boolean) Sets statistics enabled flag globally for the caches Declaration void EnableStatistics(IEnumerable<string> cacheNames, bool enabled) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.String > cacheNames Collection of cache names to set the flag System.Boolean enabled Enabled flag ForAttribute(String, String) Creates projection for nodes containing given name and value specified in user attributes. Declaration IClusterGroup ForAttribute(string name, string val) Parameters Type Name Description System.String name Name of the attribute. System.String val Optional attribute value to match. Returns Type Description IClusterGroup Grid projection for nodes containing specified attribute. ForCacheNodes(String) Creates projection for all nodes that have cache with specified name running. Declaration IClusterGroup ForCacheNodes(string name) Parameters Type Name Description System.String name Cache name to include into projection. Returns Type Description IClusterGroup Projection over nodes that have specified cache running. ForClientNodes(String) Creates projection for all nodes that have cache with specified name running and cache distribution mode is CLIENT_ONLY or NEAR_ONLY. Declaration IClusterGroup ForClientNodes(string name) Parameters Type Name Description System.String name Cache name to include into projection. Returns Type Description IClusterGroup Projection over nodes that have specified cache running. ForDaemons() Gets a cluster group consisting of the daemon nodes. Daemon nodes are the usual grid nodes that participate in topology but not visible on the main APIs, i.e. they are not part of any cluster group. The only way to see daemon nodes is to use this method. Daemon nodes are used primarily for management and monitoring functionality that is build on Ignite and needs to participate in the topology, but also needs to be excluded from the \"normal\" topology, so that it won't participate in the task execution or in-memory data grid storage. Declaration IClusterGroup ForDaemons() Returns Type Description IClusterGroup Cluster group consisting of the daemon nodes. ForDataNodes(String) Creates projection for all nodes that have cache with specified name running and cache distribution mode is PARTITIONED_ONLY or NEAR_PARTITIONED. Declaration IClusterGroup ForDataNodes(string name) Parameters Type Name Description System.String name Cache name to include into projection. Returns Type Description IClusterGroup Projection over nodes that have specified cache running. ForDotNet() Creates grid projection for nodes supporting .Net, i.e. for nodes started with Apache.Ignite.exe. Declaration IClusterGroup ForDotNet() Returns Type Description IClusterGroup Grid projection for nodes supporting .Net. ForHost(IClusterNode) Gets grid projection consisting from the nodes in this projection residing on the same host as given node. Declaration IClusterGroup ForHost(IClusterNode node) Parameters Type Name Description IClusterNode node Node residing on the host for which projection is created. Returns Type Description IClusterGroup Projection for nodes residing on the same host as passed in node. ForNodeIds(IEnumerable<Guid>) Creates a grid projection over a given set of node IDs. Declaration IClusterGroup ForNodeIds(IEnumerable<Guid> ids) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Guid > ids Collection of node IDs to create a projection from. Returns Type Description IClusterGroup Projection over provided Ignite node IDs. ForNodeIds(Guid[]) Creates a grid projection over a given set of node IDs. Declaration IClusterGroup ForNodeIds(params Guid[] ids) Parameters Type Name Description System.Guid [] ids Collection of node IDs to create a projection from. Returns Type Description IClusterGroup Projection over provided Ignite node IDs. ForNodes(IClusterNode[]) Creates a grid projection over a given set of nodes. Declaration IClusterGroup ForNodes(params IClusterNode[] nodes) Parameters Type Name Description IClusterNode [] nodes Collection of nodes to create a projection from. Returns Type Description IClusterGroup Projection over provided Ignite nodes. ForNodes(IEnumerable<IClusterNode>) Creates a grid projection over a given set of nodes. Declaration IClusterGroup ForNodes(IEnumerable<IClusterNode> nodes) Parameters Type Name Description System.Collections.Generic.IEnumerable < IClusterNode > nodes Collection of nodes to create a projection from. Returns Type Description IClusterGroup Projection over provided Ignite nodes. ForOldest() Creates grid projection with one oldest node in the current projection. The resulting projection is dynamic and will always pick the next oldest node if the previous one leaves topology even after the projection has been created. Declaration IClusterGroup ForOldest() Returns Type Description IClusterGroup Grid projection with one oldest node from the current projection. ForPredicate(Func<IClusterNode, Boolean>) Creates a grid projection which includes all nodes that pass the given predicate filter. Declaration IClusterGroup ForPredicate(Func<IClusterNode, bool> p) Parameters Type Name Description System.Func < IClusterNode , System.Boolean > p Predicate filter for nodes to include into this projection. Returns Type Description IClusterGroup Grid projection for nodes that passed the predicate filter. ForRandom() Creates grid projection with one random node from current projection. Declaration IClusterGroup ForRandom() Returns Type Description IClusterGroup Grid projection with one random node from current projection. ForRemotes() Gets grid projection consisting from the nodes in this projection excluding the local node. Declaration IClusterGroup ForRemotes() Returns Type Description IClusterGroup Grid projection consisting from the nodes in this projection excluding the local node. ForServers() Creates a cluster group of nodes started in server mode ( ClientMode ). Declaration IClusterGroup ForServers() Returns Type Description IClusterGroup Cluster group of nodes started in server mode. ForYoungest() Creates grid projection with one youngest node in the current projection. The resulting projection is dynamic and will always pick the newest node in the topology, even if more nodes entered after the projection has been created. Declaration IClusterGroup ForYoungest() Returns Type Description IClusterGroup Grid projection with one youngest node from the current projection. GetCompute() Gets compute functionality over this grid projection. All operations on the returned ICompute instance will only include nodes from this projection. Declaration ICompute GetCompute() Returns Type Description ICompute Compute instance over this grid projection. GetEvents() Gets events facade over nodes within this cluster group. All operations on the returned IEvents > instance will only include nodes from current cluster group. Declaration IEvents GetEvents() Returns Type Description IEvents Events instance over this cluster group. GetMessaging() Gets messaging facade over nodes within this cluster group. All operations on the returned IMessaging > instance will only include nodes from current cluster group. Declaration IMessaging GetMessaging() Returns Type Description IMessaging Messaging instance over this cluster group. GetMetrics() Gets a metrics snapshot for this projection Declaration IClusterMetrics GetMetrics() Returns Type Description IClusterMetrics Grid projection metrics snapshot. GetNode() Gets first node from the list of nodes in this projection. Declaration IClusterNode GetNode() Returns Type Description IClusterNode Node. GetNode(Guid) Gets a node for given ID from this grid projection. Declaration IClusterNode GetNode(Guid id) Parameters Type Name Description System.Guid id Node ID. Returns Type Description IClusterNode Node with given ID from this projection or null if such node does not exist in this projection. GetNodes() Gets read-only collections of nodes in this projection. Declaration ICollection<IClusterNode> GetNodes() Returns Type Description System.Collections.Generic.ICollection < IClusterNode > All nodes in this projection. GetServices() Gets services facade over nodes within this cluster group. All operations on the returned IServices > instance will only include nodes from current cluster group. Declaration IServices GetServices() Returns Type Description IServices Services instance over this cluster group."
  },
  "api/Apache.Ignite.Core.Cluster.IClusterMetrics.html": {
    "href": "api/Apache.Ignite.Core.Cluster.IClusterMetrics.html",
    "title": "Interface IClusterMetrics | Apache Ignite.NET",
    "keywords": "Interface IClusterMetrics Represents runtime information of a cluster. Apart from obvious statistical value, this information is used for implementation of load balancing, failover, and collision SPIs. For example, collision SPI in combination with fail-over SPI could check if other nodes don't have any active or waiting jobs and fail-over some jobs to those nodes. Node metrics for any node can be accessed via GetMetrics() method. Keep in mind that there will be a certain network delay (usually equal to heartbeat delay) for the accuracy of node metrics. However, when accessing metrics on local node the metrics are always accurate and up to date. Namespace : Apache.Ignite.Core.Cluster Assembly : Apache.Ignite.Core.dll Syntax public interface IClusterMetrics Properties AverageActiveJobs Average number of active jobs. Declaration float AverageActiveJobs { get; } Property Value Type Description System.Single AverageCancelledJobs Average number of cancelled jobs. Declaration float AverageCancelledJobs { get; } Property Value Type Description System.Single AverageCpuLoad Average of CPU load values in [0, 1] range over all metrics kept in the history. Declaration double AverageCpuLoad { get; } Property Value Type Description System.Double AverageJobExecuteTime Average job execution time. Declaration double AverageJobExecuteTime { get; } Property Value Type Description System.Double AverageJobWaitTime Average time jobs spend waiting in the queue to be executed. Declaration double AverageJobWaitTime { get; } Property Value Type Description System.Double AverageRejectedJobs Average number of jobs this node rejects during collision resolution operations. Declaration float AverageRejectedJobs { get; } Property Value Type Description System.Single AverageWaitingJobs Average number of waiting jobs. Declaration float AverageWaitingJobs { get; } Property Value Type Description System.Single BusyTimePercentage Percentage of time this node is busy. Declaration float BusyTimePercentage { get; } Property Value Type Description System.Single CurrentActiveJobs Number of currently active jobs concurrently executing on the node. Declaration int CurrentActiveJobs { get; } Property Value Type Description System.Int32 CurrentCancelledJobs Number of cancelled jobs that are still running. Declaration int CurrentCancelledJobs { get; } Property Value Type Description System.Int32 CurrentCpuLoad Returns the CPU usage usage in [0, 1] range. Declaration double CurrentCpuLoad { get; } Property Value Type Description System.Double CurrentDaemonThreadCount Current number of live daemon threads. Declaration int CurrentDaemonThreadCount { get; } Property Value Type Description System.Int32 CurrentGcCpuLoad Average time spent in CG since the last update. Declaration double CurrentGcCpuLoad { get; } Property Value Type Description System.Double CurrentIdleTime Time this node spend idling since executing last job. Declaration long CurrentIdleTime { get; } Property Value Type Description System.Int64 CurrentJobExecuteTime Longest time a current job has been executing for. Declaration long CurrentJobExecuteTime { get; } Property Value Type Description System.Int64 CurrentJobWaitTime Current time an oldest jobs has spent waiting to be executed. Declaration long CurrentJobWaitTime { get; } Property Value Type Description System.Int64 CurrentRejectedJobs Number of jobs rejected after more recent collision resolution operation. Declaration int CurrentRejectedJobs { get; } Property Value Type Description System.Int32 CurrentThreadCount Current number of live threads. Declaration int CurrentThreadCount { get; } Property Value Type Description System.Int32 CurrentWaitingJobs Number of queued jobs currently waiting to be executed. Declaration int CurrentWaitingJobs { get; } Property Value Type Description System.Int32 HeapMemoryCommitted Amount of heap memory in bytes that is committed for the JVM to use. This amount of memory is guaranteed for the JVM to use. The heap consists of one or more memory pools. This value is the sum of committed heap memory values of all heap memory pools. Declaration long HeapMemoryCommitted { get; } Property Value Type Description System.Int64 HeapMemoryInitialized Amount of heap memory in bytes that the JVM initially requests from the operating system for memory management. This method returns -1 if the initial memory size is undefined. This value represents a setting of the heap memory for Java VM and is not a sum of all initial heap values for all memory pools. Declaration long HeapMemoryInitialized { get; } Property Value Type Description System.Int64 HeapMemoryMaximum Mmaximum amount of heap memory in bytes that can be used for memory management. This method returns -1 if the maximum memory size is undefined. This amount of memory is not guaranteed to be available for memory management if it is greater than the amount of committed memory. The JVM may fail to allocate memory even if the amount of used memory does not exceed this maximum size. This value represents a setting of the heap memory for Java VM and is not a sum of all initial heap values for all memory pools. Declaration long HeapMemoryMaximum { get; } Property Value Type Description System.Int64 HeapMemoryTotal Total amount of heap memory in bytes. This method returns -1 if the total memory size is undefined. This amount of memory is not guaranteed to be available for memory management if it is greater than the amount of committed memory. The JVM may fail to allocate memory even if the amount of used memory does not exceed this maximum size. This value represents a setting of the heap memory for Java VM and is not a sum of all initial heap values for all memory pools. Declaration long HeapMemoryTotal { get; } Property Value Type Description System.Int64 HeapMemoryUsed Current heap size that is used for object allocation. The heap consists of one or more memory pools. This value is the sum of used heap memory values of all heap memory pools. The amount of used memory in the returned is the amount of memory occupied by both live objects and garbage objects that have not been collected, if any. Declaration long HeapMemoryUsed { get; } Property Value Type Description System.Int64 IdleTimePercentage Percentage of time this node is idle Declaration float IdleTimePercentage { get; } Property Value Type Description System.Single LastDataVersion Ignite assigns incremental versions to all cache operations. This property provides the latest data version on the node. Declaration long LastDataVersion { get; } Property Value Type Description System.Int64 LastUpdateTime Last update time of this node metrics. Declaration DateTime LastUpdateTime { get; } Property Value Type Description System.DateTime MaximumActiveJobs Maximum number of jobs that ever ran concurrently on this node. Declaration int MaximumActiveJobs { get; } Property Value Type Description System.Int32 MaximumCancelledJobs Maximum number of cancelled jobs ever had running concurrently. Declaration int MaximumCancelledJobs { get; } Property Value Type Description System.Int32 MaximumJobExecuteTime Time it took to execute the longest job on the node. Declaration long MaximumJobExecuteTime { get; } Property Value Type Description System.Int64 MaximumJobWaitTime Maximum time a job ever spent waiting in a queue to be executed. Declaration long MaximumJobWaitTime { get; } Property Value Type Description System.Int64 MaximumRejectedJobs Maximum number of jobs rejected at once. Declaration int MaximumRejectedJobs { get; } Property Value Type Description System.Int32 MaximumThreadCount The peak live thread count. Declaration int MaximumThreadCount { get; } Property Value Type Description System.Int32 MaximumWaitingJobs Maximum number of waiting jobs. Declaration int MaximumWaitingJobs { get; } Property Value Type Description System.Int32 NodeStartTime Start time of the Ignite node in milliseconds. Declaration DateTime NodeStartTime { get; } Property Value Type Description System.DateTime NonHeapMemoryCommitted Amount of non-heap memory in bytes that is committed for the JVM to use. Declaration long NonHeapMemoryCommitted { get; } Property Value Type Description System.Int64 NonHeapMemoryInitialized Amount of non-heap memory in bytes that the JVM initially requests from the operating system for memory management. Declaration long NonHeapMemoryInitialized { get; } Property Value Type Description System.Int64 NonHeapMemoryMaximum Maximum amount of non-heap memory in bytes that can be used for memory management. Declaration long NonHeapMemoryMaximum { get; } Property Value Type Description System.Int64 NonHeapMemoryTotal Total amount of non-heap memory in bytes that can be used for memory management. Declaration long NonHeapMemoryTotal { get; } Property Value Type Description System.Int64 NonHeapMemoryUsed Current non-heap memory size that is used by Java VM. Declaration long NonHeapMemoryUsed { get; } Property Value Type Description System.Int64 OutboundMessagesQueueSize Outbound messages queue size. Declaration int OutboundMessagesQueueSize { get; } Property Value Type Description System.Int32 ReceivedBytesCount Received bytes count. Declaration long ReceivedBytesCount { get; } Property Value Type Description System.Int64 ReceivedMessagesCount Received messages count. Declaration int ReceivedMessagesCount { get; } Property Value Type Description System.Int32 SentBytesCount Sent bytes count. Declaration long SentBytesCount { get; } Property Value Type Description System.Int64 SentMessagesCount Sent messages count Declaration int SentMessagesCount { get; } Property Value Type Description System.Int32 StartTime Start time of the JVM in milliseconds. Declaration DateTime StartTime { get; } Property Value Type Description System.DateTime TotalBusyTime Total time this node spent executing jobs. Declaration long TotalBusyTime { get; } Property Value Type Description System.Int64 TotalCancelledJobs Total number of cancelled jobs since node startup. Declaration int TotalCancelledJobs { get; } Property Value Type Description System.Int32 TotalCpus Returns the number of CPUs available to the Java Virtual Machine. Declaration int TotalCpus { get; } Property Value Type Description System.Int32 TotalExecutedJobs Total number of jobs handled by the node since node startup. Declaration int TotalExecutedJobs { get; } Property Value Type Description System.Int32 TotalExecutedTasks Total number of jobs handled by the node. Declaration int TotalExecutedTasks { get; } Property Value Type Description System.Int32 TotalIdleTime Total time this node spent idling. Declaration long TotalIdleTime { get; } Property Value Type Description System.Int64 TotalNodes Gets total number of nodes. Declaration int TotalNodes { get; } Property Value Type Description System.Int32 TotalRejectedJobs Total number of jobs this node rejects during collision resolution operations since node startup. Declaration int TotalRejectedJobs { get; } Property Value Type Description System.Int32 TotalStartedThreadCount The total number of threads started. Declaration long TotalStartedThreadCount { get; } Property Value Type Description System.Int64 Uptime Uptime of the JVM in milliseconds. Declaration long Uptime { get; } Property Value Type Description System.Int64"
  },
  "api/Apache.Ignite.Core.Common.JavaException.html": {
    "href": "api/Apache.Ignite.Core.Common.JavaException.html",
    "title": "Class JavaException | Apache Ignite.NET",
    "keywords": "Class JavaException Indicates an error on Java side and contains full Java stack trace. Inheritance System.Object System.Exception IgniteException JavaException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Common Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class JavaException : IgniteException, ISerializable, _Exception Constructors JavaException() Initializes a new instance of the JavaException class. Declaration public JavaException() JavaException(SerializationInfo, StreamingContext) Initializes a new instance of the JavaException class. Declaration protected JavaException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. JavaException(String) Initializes a new instance of the JavaException class. Declaration public JavaException(string message) Parameters Type Name Description System.String message The message that describes the error. JavaException(String, Exception) Initializes a new instance of the JavaException class. Declaration public JavaException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. JavaException(String, String, String) Initializes a new instance of the JavaException class. Declaration public JavaException(string javaClassName, string javaMessage, string stackTrace) Parameters Type Name Description System.String javaClassName Java exception class name. System.String javaMessage Java exception message. System.String stackTrace Java stack trace. JavaException(String, String, String, Exception) Initializes a new instance of the JavaException class. Declaration public JavaException(string javaClassName, string javaMessage, string stackTrace, Exception cause) Parameters Type Name Description System.String javaClassName Java exception class name. System.String javaMessage Java exception message. System.String stackTrace Java stack trace. System.Exception cause The cause. Properties JavaClassName Gets the Java exception class name. Declaration public string JavaClassName { get; } Property Value Type Description System.String JavaMessage Gets the Java exception message. Declaration public string JavaMessage { get; } Property Value Type Description System.String Methods GetObjectData(SerializationInfo, StreamingContext) When overridden in a derived class, sets the System.Runtime.Serialization.SerializationInfo with information about the exception. Declaration public override void GetObjectData(SerializationInfo info, StreamingContext context) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info The System.Runtime.Serialization.SerializationInfo that holds the serialized object data about the exception being thrown. System.Runtime.Serialization.StreamingContext context The System.Runtime.Serialization.StreamingContext that contains contextual information about the source or destination. Overrides System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Common.html": {
    "href": "api/Apache.Ignite.Core.Common.html",
    "title": "Namespace Apache.Ignite.Core.Common | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Common Classes ClientDisconnectedException Indicates that client-mode local node has been disconnected from the cluster. IgniteException General Ignite exception. Indicates any error condition within Ignite. IgniteExperimentalAttribute This attribute marks API elements (such as interfaces and methods) as experimental meaning that the API is not finalized yet and may be changed or replaced in future Ignite releases. Such APIs are exposed so that users can make use of a feature before the API has been stabilized. The expectation is that an API element should be \"eventually\" stabilized. Incompatible changes are allowed for such APIs: API may be removed, changed or stabilized in future Ignite releases (both minor and maintenance). IgniteFutureCancelledException Indicates future cancellation within Ignite. IgniteIllegalStateException Indicates that ignite in invalid state was accessed. IgniteProductVersion Represents node version. JavaException Indicates an error on Java side and contains full Java stack trace. Structs IgniteGuid Ignite guid with additional local ID. Interfaces IFactory<T> Factory that produces instances of a specific type. Implementation can be passed over the wire and thus should be marked with System.SerializableAttribute . Delegates ExceptionFactory Exception factory delegate."
  },
  "api/Apache.Ignite.Core.Compute.ComputeTaskTimeoutException.html": {
    "href": "api/Apache.Ignite.Core.Compute.ComputeTaskTimeoutException.html",
    "title": "Class ComputeTaskTimeoutException | Apache Ignite.NET",
    "keywords": "Class ComputeTaskTimeoutException Indicates that task execution timed out. Inheritance System.Object System.Exception IgniteException ComputeTaskTimeoutException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Compute Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class ComputeTaskTimeoutException : IgniteException, ISerializable, _Exception Constructors ComputeTaskTimeoutException() Initializes a new instance of the ComputeTaskTimeoutException class. Declaration public ComputeTaskTimeoutException() ComputeTaskTimeoutException(SerializationInfo, StreamingContext) Initializes a new instance of the ComputeTaskTimeoutException class. Declaration protected ComputeTaskTimeoutException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. ComputeTaskTimeoutException(String) Initializes a new instance of the ComputeTaskTimeoutException class. Declaration public ComputeTaskTimeoutException(string message) Parameters Type Name Description System.String message The message that describes the error. ComputeTaskTimeoutException(String, Exception) Initializes a new instance of the ComputeTaskTimeoutException class. Declaration public ComputeTaskTimeoutException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Compute.ComputeUserUndeclaredException.html": {
    "href": "api/Apache.Ignite.Core.Compute.ComputeUserUndeclaredException.html",
    "title": "Class ComputeUserUndeclaredException | Apache Ignite.NET",
    "keywords": "Class ComputeUserUndeclaredException This exception is thrown when user's code throws undeclared runtime exception. By user core it is assumed the code in Ignite task, Ignite job or SPI. In most cases it should be an indication of unrecoverable error condition such as assertion, out of memory error, etc. Inheritance System.Object System.Exception IgniteException ComputeUserUndeclaredException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Compute Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class ComputeUserUndeclaredException : IgniteException, ISerializable, _Exception Constructors ComputeUserUndeclaredException() Initializes a new instance of the ComputeUserUndeclaredException class. Declaration public ComputeUserUndeclaredException() ComputeUserUndeclaredException(SerializationInfo, StreamingContext) Initializes a new instance of the ComputeUserUndeclaredException class. Declaration protected ComputeUserUndeclaredException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. ComputeUserUndeclaredException(String) Initializes a new instance of the ComputeUserUndeclaredException class. Declaration public ComputeUserUndeclaredException(string message) Parameters Type Name Description System.String message The message that describes the error. ComputeUserUndeclaredException(String, Exception) Initializes a new instance of the ComputeUserUndeclaredException class. Declaration public ComputeUserUndeclaredException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Compute.IComputeTask-3.html": {
    "href": "api/Apache.Ignite.Core.Compute.IComputeTask-3.html",
    "title": "Interface IComputeTask<TArg, TJobRes, TRes> | Apache Ignite.NET",
    "keywords": "Interface IComputeTask<TArg, TJobRes, TRes> Ignite task interface defines a task that can be executed on the grid. Ignite task is responsible for splitting business logic into multiple Ignite jobs, receiving results from individual Ignite jobs executing on remote nodes, and reducing (aggregating) received jobs' results into final Ignite task result. Upon request to execute a task, the system will do the following: Inject annotated resources into task instance. Apply Map(IList<IClusterNode>, TArg) . This method is responsible for splitting business logic into multiple jobs (units of execution) and mapping them to Ignite nodes. System will send mapped Ignite jobs to their respective nodes. Once job execution results become available, OnResult(IComputeJobResult<TJobRes>, IList<IComputeJobResult<TJobRes>>) method will be called for ech received job result. The policy returned by this method will determine the way task reacts to every job result. If Wait is returned, task will continue to wait for other job results. If this result is the last job result, then reduce phase will be started. If Reduce is returned, reduce phase will be started right away without waiting for other jobs completion (all remaining jobs will receive cancel request). If Failover is returned, job will be failed over to another node for execution. Note that if you use ComputeTaskAdapter<TArg, TJobRes, TTaskRes> , it will automatically fail jobs to another node for 2 well-known failure cases: 1) job has failed to due to node crash (in this case Exception will return ClusterTopologyException ); 2) job execution was rejected, i.e. remote node has cancelled job before it got a chance to execute, while it still was on the waiting list. (in this case Exception will return ComputeExecutionRejectedException ). Once all results are received or OnResult(IComputeJobResult<TJobRes>, IList<IComputeJobResult<TJobRes>>) method returned Reduce policy, method Reduce(IList<IComputeJobResult<TJobRes>>) is called to aggregate received results into one final result. Once this method is finished the execution of the Ignite task is complete. This result will be returned to the user through future. Namespace : Apache.Ignite.Core.Compute Assembly : Apache.Ignite.Core.dll Syntax public interface IComputeTask<in TArg, TJobRes, out TRes> Type Parameters Name Description TArg Argument type. TJobRes Type of job result. TRes Type of final task result after reduce. Methods Map(IList<IClusterNode>, TArg) This method is called to map or split Ignite task into multiple Ignite jobs. This is the first method that gets called when task execution starts. Declaration IDictionary<IComputeJob<TJobRes>, IClusterNode> Map(IList<IClusterNode> subgrid, TArg arg) Parameters Type Name Description System.Collections.Generic.IList < IClusterNode > subgrid Nodes available for this task execution. Note that order of nodes is guaranteed to be randomized by container. This ensures that every time you simply iterate through Ignite nodes, the order of nodes will be random which over time should result into all nodes being used equally. TArg arg Task execution argument. Can be null . This is the same argument as the one passed into ICompute.Execute() methods. Returns Type Description System.Collections.Generic.IDictionary < IComputeJob <TJobRes>, IClusterNode > Map of Ignite jobs assigned to subgrid node. If null or empty map is returned, exception will be thrown. OnResult(IComputeJobResult<TJobRes>, IList<IComputeJobResult<TJobRes>>) Asynchronous callback invoked every time a result from remote execution is received. It is ultimately upto this method to return a policy based on which the system will either wait for more results, reduce results received so far, or failover this job to another node. See ComputeJobResultPolicy for more information. Declaration ComputeJobResultPolicy OnResult(IComputeJobResult<TJobRes> res, IList<IComputeJobResult<TJobRes>> rcvd) Parameters Type Name Description IComputeJobResult <TJobRes> res Received remote Ignite executable result. System.Collections.Generic.IList < IComputeJobResult <TJobRes>> rcvd All previously received results. Note that if task class has ComputeTaskNoResultCacheAttribute attribute, then this list will be empty. Returns Type Description ComputeJobResultPolicy Result policy that dictates how to process further upcoming job results. Reduce(IList<IComputeJobResult<TJobRes>>) Reduces (or aggregates) results received so far into one compound result to be returned to caller via future. Note, that if some jobs did not succeed and could not be failed over then the list of results passed into this method will include the failed results. Otherwise, failed results will not be in the list. Declaration TRes Reduce(IList<IComputeJobResult<TJobRes>> results) Parameters Type Name Description System.Collections.Generic.IList < IComputeJobResult <TJobRes>> results Received job results. Note that if task class has ComputeTaskNoResultCacheAttribute attribute, then this list will be empty. Returns Type Description TRes Task result constructed from results of remote executions."
  },
  "api/Apache.Ignite.Core.Compute.html": {
    "href": "api/Apache.Ignite.Core.Compute.html",
    "title": "Namespace Apache.Ignite.Core.Compute | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Compute Classes ComputeExecutionRejectedException Indicates a situation when execution service provided by the user in configuration rejects execution. ComputeJobAdapter<T> Convenience adapter for IComputeJob<TRes> implementations. It provides the following functionality: Default implementation of Cancel() method and ability to check whether cancellation occurred with IsCancelled() method. Ability to set and get job arguments via SetArguments(Object[]) and GetArgument<TArg>(Int32) methods. ComputeJobFailoverException This runtime exception can be thrown from Execute() method to force job failover to another node within task topology. IComputeFunc<TArg, TRes> or IComputeFunc<TRes> passed into any of the ICompute methods can also throw this exception to force failover. ComputeTaskAdapter<TArg, TJobRes, TTaskRes> Convenience adapter for IComputeTask<TArg, TJobRes, TRes> interface ComputeTaskCancelledException This exception indicates that Ignite task was cancelled. ComputeTaskNoResultCacheAttribute This attribute disables caching of task results when attached to IComputeTask<TArg, TJobRes, TRes> instance. Use it when number of jobs within task grows too big, or jobs themselves are too large to keep in memory throughout task execution. By default all results are cached and passed into OnResult(IComputeJobResult<TJobRes>, IList<IComputeJobResult<TJobRes>>) and Reduce(IList<IComputeJobResult<TJobRes>>) methods. When this attribute is attached to a task class, then this list of job results will always be empty. ComputeTaskSplitAdapter<TArg, TJobRes, TTaskRes> This class defines simplified adapter for IComputeTask<TArg, TJobRes, TRes> . This adapter can be used when jobs can be randomly assigned to available Ignite nodes. This adapter is sufficient in most homogeneous environments where all nodes are equally suitable for executing grid job, see Split(Int32, TArg) method for more details. ComputeTaskTimeoutException Indicates that task execution timed out. ComputeUserUndeclaredException This exception is thrown when user's code throws undeclared runtime exception. By user core it is assumed the code in Ignite task, Ignite job or SPI. In most cases it should be an indication of unrecoverable error condition such as assertion, out of memory error, etc. Interfaces ICompute Defines Ignite functionality for executing tasks and closures over nodes in the IClusterGroup . Instance of ICompute is obtained from grid projection using GetCompute() method. Note that if attempt is made to execute a computation over an empty projection (i.e. projection that does not have any alive nodes), ClusterGroupEmptyException will be thrown out of result task. Ignite must select a node for a computation to be executed. The node will be selected based on the underlying GridLoadBalancingSpi , which by default sequentially picks next available node from grid projection. Other load balancing policies, such as random or adaptive , can be configured as well by selecting different load balancing SPI in Ignite configuration. If your logic requires some custom load balancing behavior, consider implementing ComputeTask in Java directly. Ignite guarantees that as long as there is at least one Ignite node standing, every job will be executed. Jobs will automatically failover to another node if a remote node crashed or has rejected execution due to lack of resources. By default, in case of failover, next load balanced node will be picked for job execution. Also jobs will never be re-routed to the nodes they have failed on. This behavior can be changed by configuring any of the existing or a custom FailoverSpi in Ignite configuration. All members are thread-safe and may be used concurrently from multiple threads. IComputeAction Defines a void function having no arguments. IComputeFunc<TRes> Defines function having no arguments. IComputeFunc<TArg, TRes> Defines function having a single argument. IComputeJob<TRes> Defines executable unit for IComputeTask<TArg, TJobRes, TRes> . Ignite task gets split into jobs when Map(IList<IClusterNode>, TArg) method is called. This method returns all jobs for the task mapped to their corresponding Ignite nodes for execution. Grid will then serialize this jobs and send them to requested nodes for execution. Once job execution is complete, the return value will be sent back to parent task and will be passed into OnResult(IComputeJobResult<TJobRes>, IList<IComputeJobResult<TJobRes>>) method via IComputeJobResult<TRes> instance. Ignite job implementation can be injected with IIgnite using InstanceResourceAttribute attribute. IComputeJobResult<TRes> Job execution result which gets passed to OnResult(IComputeJobResult<TJobRes>, IList<IComputeJobResult<TJobRes>>) method. IComputeReducer<TRes, TReduceRes> Compute reducer which is capable of result collecting and reducing. IComputeTask<TJobRes, TReduceRes> IComputeTask without an argument. IComputeTask<TArg, TJobRes, TRes> Ignite task interface defines a task that can be executed on the grid. Ignite task is responsible for splitting business logic into multiple Ignite jobs, receiving results from individual Ignite jobs executing on remote nodes, and reducing (aggregating) received jobs' results into final Ignite task result. Upon request to execute a task, the system will do the following: Inject annotated resources into task instance. Apply Map(IList<IClusterNode>, TArg) . This method is responsible for splitting business logic into multiple jobs (units of execution) and mapping them to Ignite nodes. System will send mapped Ignite jobs to their respective nodes. Once job execution results become available, OnResult(IComputeJobResult<TJobRes>, IList<IComputeJobResult<TJobRes>>) method will be called for ech received job result. The policy returned by this method will determine the way task reacts to every job result. If Wait is returned, task will continue to wait for other job results. If this result is the last job result, then reduce phase will be started. If Reduce is returned, reduce phase will be started right away without waiting for other jobs completion (all remaining jobs will receive cancel request). If Failover is returned, job will be failed over to another node for execution. Note that if you use ComputeTaskAdapter<TArg, TJobRes, TTaskRes> , it will automatically fail jobs to another node for 2 well-known failure cases: 1) job has failed to due to node crash (in this case Exception will return ClusterTopologyException ); 2) job execution was rejected, i.e. remote node has cancelled job before it got a chance to execute, while it still was on the waiting list. (in this case Exception will return ComputeExecutionRejectedException ). Once all results are received or OnResult(IComputeJobResult<TJobRes>, IList<IComputeJobResult<TJobRes>>) method returned Reduce policy, method Reduce(IList<IComputeJobResult<TJobRes>>) is called to aggregate received results into one final result. Once this method is finished the execution of the Ignite task is complete. This result will be returned to the user through future. Enums ComputeJobResultPolicy This enumeration provides different types of actions following the last received job result. See OnResult(IComputeJobResult<TJobRes>, IList<IComputeJobResult<TJobRes>>) for more details."
  },
  "api/Apache.Ignite.Core.Datastream.StreamVisitor-2.html": {
    "href": "api/Apache.Ignite.Core.Datastream.StreamVisitor-2.html",
    "title": "Class StreamVisitor<TK, TV> | Apache Ignite.NET",
    "keywords": "Class StreamVisitor<TK, TV> Convenience adapter to visit every key-value tuple in the stream. Note that the visitor does not update the cache. Inheritance System.Object StreamVisitor<TK, TV> Implements IStreamReceiver <TK, TV> Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Datastream Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public sealed class StreamVisitor<TK, TV> : IStreamReceiver<TK, TV> Type Parameters Name Description TK The type of the cache key. TV The type of the cache value. Constructors StreamVisitor(Action<ICache<TK, TV>, ICacheEntry<TK, TV>>) Initializes a new instance of the StreamVisitor<TK, TV> class. Declaration public StreamVisitor(Action<ICache<TK, TV>, ICacheEntry<TK, TV>> action) Parameters Type Name Description System.Action < ICache <TK, TV>, ICacheEntry <TK, TV>> action The action to be called on each stream entry. Methods Receive(ICache<TK, TV>, ICollection<ICacheEntry<TK, TV>>) Updates cache with batch of entries. Declaration public void Receive(ICache<TK, TV> cache, ICollection<ICacheEntry<TK, TV>> entries) Parameters Type Name Description ICache <TK, TV> cache Cache. System.Collections.Generic.ICollection < ICacheEntry <TK, TV>> entries Entries. Implements IStreamReceiver<TK, TV>"
  },
  "api/Apache.Ignite.Core.Datastream.html": {
    "href": "api/Apache.Ignite.Core.Datastream.html",
    "title": "Namespace Apache.Ignite.Core.Datastream | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Datastream Classes DataStreamerDefaults Data streamer configuration defaults. StreamTransformer<TK, TV, TArg, TRes> Convenience adapter to transform update existing values in streaming cache based on the previously cached value. StreamVisitor<TK, TV> Convenience adapter to visit every key-value tuple in the stream. Note that the visitor does not update the cache. Interfaces IDataStreamer<TK, TV> Data streamer is responsible for loading external data into cache. It achieves it by properly buffering updates and properly mapping keys to nodes responsible for the data to make sure that there is the least amount of data movement possible and optimal network and memory utilization. Note that streamer will load data concurrently by multiple internal threads, so the data may get to remote nodes in different order from which it was added to the streamer. Also note that IDataStreamer is not the only way to load data into cache. Alternatively you can use LoadCache(Action<TK, TV>, Object[]) method to load data from underlying data store. You can also use standard cache put and putAll operations as well, but they most likely will not perform as well as this class for loading data. And finally, data can be loaded from underlying data store on demand, whenever it is accessed - for this no explicit data loading step is needed. IDataStreamer supports the following configuration properties: PerNodeBufferSizeWhen entries are added to data streamer they are not sent to Ignite right away and are buffered internally for better performance and network utilization. This setting controls the size of internal per-node buffer before buffered data is sent to remote node. Default value is 1024. PerThreadBufferSizeWhen entries are added to data streamer they are not sent to Ignite right away and are buffered internally on per thread basis for better performance and network utilization. This setting controls the size of internal per-thread buffer before buffered data is sent to remote node. Default value is 4096. PerNodeParallelOperationsSometimes data may be added to the data streamer faster than it can be put in cache. In this case, new buffered load messages are sent to remote nodes before responses from previous ones are received. This could cause unlimited heap memory utilization growth on local and remote nodes. To control memory utilization, this setting limits maximum allowed number of parallel buffered load messages that are being processed on remote nodes. If this number is exceeded, then data streamer add/remove methods will block to control memory utilization. Default value is 16. AutoFlushFrequencyAutomatic flush frequency in milliseconds. Essentially, this is the time after which the streamer will make an attempt to submit all data added so far to remote nodes. Note that there is no guarantee that data will be delivered after this concrete attempt (e.g., it can fail when topology is changing), but it won't be lost anyway. Disabled by default (default value is 0 ). IsolatedDefines if data streamer will assume that there are no other concurrent updates and allow data streamer choose most optimal concurrent implementation. Default value is false . All members are thread-safe and may be used concurrently from multiple threads. IStreamReceiver<TK, TV> Updates cache with batch of entries. Usually it is enough to configure AllowOverwrite property and appropriate internal cache receiver will be chosen automatically. But in some cases custom implementation may help to achieve better performance."
  },
  "api/Apache.Ignite.Core.DataStructures.Configuration.AtomicConfiguration.html": {
    "href": "api/Apache.Ignite.Core.DataStructures.Configuration.AtomicConfiguration.html",
    "title": "Class AtomicConfiguration | Apache Ignite.NET",
    "keywords": "Class AtomicConfiguration Configuration for atomic data structures. Inheritance System.Object AtomicConfiguration Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.DataStructures.Configuration Assembly : Apache.Ignite.Core.dll Syntax public class AtomicConfiguration Constructors AtomicConfiguration() Initializes a new instance of the AtomicConfiguration class. Declaration public AtomicConfiguration() Fields DefaultAtomicSequenceReserveSize Default atomic sequence reservation size. Declaration public const int DefaultAtomicSequenceReserveSize = 1000 Field Value Type Description System.Int32 DefaultBackups Default number of backups. Declaration public const int DefaultBackups = 0 Field Value Type Description System.Int32 DefaultCacheMode Default caching mode. Declaration public const CacheMode DefaultCacheMode = CacheMode.Partitioned Field Value Type Description CacheMode Properties AtomicSequenceReserveSize Gets or sets the default number of sequence values reserved for IAtomicSequence instances. After a certain number has been reserved, consequent increments of sequence will happen locally, without communication with other nodes, until the next reservation has to be made. Declaration public int AtomicSequenceReserveSize { get; set; } Property Value Type Description System.Int32 Backups Gets or sets number of nodes used to back up single partition for Partitioned cache. Declaration public int Backups { get; set; } Property Value Type Description System.Int32 CacheMode Gets or sets caching mode to use. Declaration public CacheMode CacheMode { get; set; } Property Value Type Description CacheMode"
  },
  "api/Apache.Ignite.Core.DataStructures.Configuration.html": {
    "href": "api/Apache.Ignite.Core.DataStructures.Configuration.html",
    "title": "Namespace Apache.Ignite.Core.DataStructures.Configuration | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.DataStructures.Configuration Classes AtomicConfiguration Configuration for atomic data structures."
  },
  "api/Apache.Ignite.Core.Events.CheckpointEvent.html": {
    "href": "api/Apache.Ignite.Core.Events.CheckpointEvent.html",
    "title": "Class CheckpointEvent | Apache Ignite.NET",
    "keywords": "Class CheckpointEvent Grid checkpoint event. Inheritance System.Object EventBase CheckpointEvent Implements IEvent System.IEquatable < EventBase > Inherited Members EventBase.Id EventBase.LocalOrder EventBase.Node EventBase.Message EventBase.Type EventBase.Name EventBase.Timestamp EventBase.Equals(EventBase) EventBase.Equals(Object) EventBase.GetHashCode() EventBase.ToString() EventBase.ReadNode(IBinaryRawReader) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Events Assembly : Apache.Ignite.Core.dll Syntax public sealed class CheckpointEvent : EventBase, IEvent, IEquatable<EventBase> Properties Key Gets checkpoint key associated with this event. Declaration public string Key { get; } Property Value Type Description System.String Methods ToShortString() Gets shortened version of ToString result. Declaration public override string ToShortString() Returns Type Description System.String Overrides EventBase.ToShortString() Implements IEvent System.IEquatable<T>"
  },
  "api/Apache.Ignite.Core.Events.DiscoveryEvent.html": {
    "href": "api/Apache.Ignite.Core.Events.DiscoveryEvent.html",
    "title": "Class DiscoveryEvent | Apache Ignite.NET",
    "keywords": "Class DiscoveryEvent Grid discovery event. Inheritance System.Object EventBase DiscoveryEvent Implements IEvent System.IEquatable < EventBase > Inherited Members EventBase.Id EventBase.LocalOrder EventBase.Node EventBase.Message EventBase.Type EventBase.Name EventBase.Timestamp EventBase.Equals(EventBase) EventBase.Equals(Object) EventBase.GetHashCode() EventBase.ToString() EventBase.ReadNode(IBinaryRawReader) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Events Assembly : Apache.Ignite.Core.dll Syntax public sealed class DiscoveryEvent : EventBase, IEvent, IEquatable<EventBase> Properties EventNode Gets node that caused this event to be generated. It is potentially different from the node on which this event was recorded. For example, node A locally recorded the event that a remote node B joined the topology. In this case this property will return node B. Declaration public IClusterNode EventNode { get; } Property Value Type Description IClusterNode TopologyNodes Gets topology nodes from topology snapshot. If SPI implementation does not support versioning, the best effort snapshot will be captured. Declaration public ICollection<IClusterNode> TopologyNodes { get; } Property Value Type Description System.Collections.Generic.ICollection < IClusterNode > TopologyVersion Gets topology version if this event is raised on topology change and configured discovery SPI implementation supports topology versioning. Declaration public long TopologyVersion { get; } Property Value Type Description System.Int64 Methods ToShortString() Gets shortened version of ToString result. Declaration public override string ToShortString() Returns Type Description System.String Overrides EventBase.ToShortString() Implements IEvent System.IEquatable<T>"
  },
  "api/Apache.Ignite.Core.Events.EventBase.html": {
    "href": "api/Apache.Ignite.Core.Events.EventBase.html",
    "title": "Class EventBase | Apache Ignite.NET",
    "keywords": "Class EventBase Base event implementation. Inheritance System.Object EventBase CacheEvent CacheQueryExecutedEvent CacheQueryReadEvent CacheRebalancingEvent CheckpointEvent DiscoveryEvent JobEvent TaskEvent Implements IEvent System.IEquatable < EventBase > Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Events Assembly : Apache.Ignite.Core.dll Syntax public abstract class EventBase : IEvent, IEquatable<EventBase> Constructors EventBase(IBinaryRawReader) Initializes a new instance of the EventBase class. Declaration protected EventBase(IBinaryRawReader r) Parameters Type Name Description IBinaryRawReader r The reader to read data from. Properties Id Gets globally unique ID of this event. Declaration public IgniteGuid Id { get; } Property Value Type Description IgniteGuid LocalOrder Gets locally unique ID that is atomically incremented for each event. Unlike global Id this local ID can be used for ordering events on this node. Note that for performance considerations Ignite doesn't order events globally. Declaration public long LocalOrder { get; } Property Value Type Description System.Int64 Message Gets optional message for this event. Declaration public string Message { get; } Property Value Type Description System.String Name Gets name of this event. Declaration public string Name { get; } Property Value Type Description System.String Node Node where event occurred and was recorded. Declaration public IClusterNode Node { get; } Property Value Type Description IClusterNode Timestamp Gets event timestamp. Timestamp is local to the node on which this event was produced. Note that more than one event can be generated with the same timestamp. For ordering purposes use LocalOrder instead. Declaration public DateTime Timestamp { get; } Property Value Type Description System.DateTime Type Gets type of this event. All system event types are defined in EventType Declaration public int Type { get; } Property Value Type Description System.Int32 Methods Equals(EventBase) Determines whether the specified object is equal to this instance. Declaration public bool Equals(EventBase other) Parameters Type Name Description EventBase other The object to compare with this instance. Returns Type Description System.Boolean true if the specified object is equal to this instance; otherwise, false . Equals(Object) Determines whether the specified object is equal to this instance. Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj The object to compare with this instance. Returns Type Description System.Boolean true if the specified object is equal to this instance; otherwise, false . Overrides System.Object.Equals(System.Object) GetHashCode() Returns a hash code for this instance. Declaration public override int GetHashCode() Returns Type Description System.Int32 A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Overrides System.Object.GetHashCode() ReadNode(IBinaryRawReader) Reads a node from stream. Declaration protected static IClusterNode ReadNode(IBinaryRawReader reader) Parameters Type Name Description IBinaryRawReader reader Reader. Returns Type Description IClusterNode Node or null. ToShortString() Gets shortened version of ToString result. Declaration public virtual string ToShortString() Returns Type Description System.String ToString() Returns a System.String that represents this instance. Declaration public override string ToString() Returns Type Description System.String A System.String that represents this instance. Overrides System.Object.ToString() Implements IEvent System.IEquatable<T>"
  },
  "api/Apache.Ignite.Core.Events.EventType.html": {
    "href": "api/Apache.Ignite.Core.Events.EventType.html",
    "title": "Class EventType | Apache Ignite.NET",
    "keywords": "Class EventType Contains event type constants. The decision to use class and not enumeration is dictated by allowing users to create their own events and/or event types which would be impossible with enumerations. Note that this interface defines not only individual type constants, but arrays of types as well to be conveniently used with IEvents methods. NOTE: all types in range from 1 to 1000 are reserved for internal Ignite events and should not be used by user-defined events. Inheritance System.Object EventType Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Events Assembly : Apache.Ignite.Core.dll Syntax public static class EventType Fields CacheEntryCreated Built-in event type: entry created. Declaration public static readonly int CacheEntryCreated Field Value Type Description System.Int32 CacheEntryDestroyed Built-in event type: entry destroyed. Declaration public static readonly int CacheEntryDestroyed Field Value Type Description System.Int32 CacheEntryEvicted Built-in event type: entry evicted. Declaration public static readonly int CacheEntryEvicted Field Value Type Description System.Int32 CacheNodesLeft Built-in event type: cache nodes left. Declaration public static readonly int CacheNodesLeft Field Value Type Description System.Int32 CacheObjectExpired Built-in event type: cache object was expired when reading it. Declaration public static readonly int CacheObjectExpired Field Value Type Description System.Int32 CacheObjectFromOffheap Built-in event type: cache object moved from off-heap storage back into memory. Declaration public static readonly int CacheObjectFromOffheap Field Value Type Description System.Int32 CacheObjectLocked Built-in event type: object locked. Declaration public static readonly int CacheObjectLocked Field Value Type Description System.Int32 CacheObjectPut Built-in event type: object put. Declaration public static readonly int CacheObjectPut Field Value Type Description System.Int32 CacheObjectRead Built-in event type: object read. Declaration public static readonly int CacheObjectRead Field Value Type Description System.Int32 CacheObjectRemoved Built-in event type: object removed. Declaration public static readonly int CacheObjectRemoved Field Value Type Description System.Int32 CacheObjectToOffheap Built-in event type: cache object stored in off-heap storage. Declaration public static readonly int CacheObjectToOffheap Field Value Type Description System.Int32 CacheObjectUnlocked Built-in event type: object unlocked. Declaration public static readonly int CacheObjectUnlocked Field Value Type Description System.Int32 CacheQueryExecuted Built-in event type: query executed. Declaration public static readonly int CacheQueryExecuted Field Value Type Description System.Int32 CacheQueryObjectRead Built-in event type: query entry read. Declaration public static readonly int CacheQueryObjectRead Field Value Type Description System.Int32 CacheRebalanceObjectLoaded Built-in event type: cache entry rebalanced. Declaration public static readonly int CacheRebalanceObjectLoaded Field Value Type Description System.Int32 CacheRebalanceObjectUnloaded Built-in event type: cache entry unloaded. Declaration public static readonly int CacheRebalanceObjectUnloaded Field Value Type Description System.Int32 CacheRebalancePartDataLost Built-in event type: all nodes that hold partition left topology. Declaration public static readonly int CacheRebalancePartDataLost Field Value Type Description System.Int32 CacheRebalancePartLoaded Built-in event type: cache partition loaded. Declaration public static readonly int CacheRebalancePartLoaded Field Value Type Description System.Int32 CacheRebalancePartUnloaded Built-in event type: cache partition unloaded. Declaration public static readonly int CacheRebalancePartUnloaded Field Value Type Description System.Int32 CacheRebalanceStarted Built-in event type: cache rebalance started. Declaration public static readonly int CacheRebalanceStarted Field Value Type Description System.Int32 CacheRebalanceStopped Built-in event type: cache rebalance stopped. Declaration public static readonly int CacheRebalanceStopped Field Value Type Description System.Int32 CacheStarted Built-in event type: cache started. Declaration public static readonly int CacheStarted Field Value Type Description System.Int32 CacheStopped Built-in event type: cache started. Declaration public static readonly int CacheStopped Field Value Type Description System.Int32 CheckpointLoaded Built-in event type: checkpoint was loaded. Declaration public static readonly int CheckpointLoaded Field Value Type Description System.Int32 CheckpointRemoved Built-in event type: checkpoint was removed. Reasons are: timeout expired, or or it was manually removed, or it was automatically removed by the task session. Declaration public static readonly int CheckpointRemoved Field Value Type Description System.Int32 CheckpointSaved Built-in event type: checkpoint was saved. Declaration public static readonly int CheckpointSaved Field Value Type Description System.Int32 ClientNodeDisconnected Built-in event type: client node disconnected. Declaration public static readonly int ClientNodeDisconnected Field Value Type Description System.Int32 ClientNodeReconnected Built-in event type: client node reconnected. Declaration public static readonly int ClientNodeReconnected Field Value Type Description System.Int32 JobCancelled Built-in event type: Ignite job cancelled. Declaration public static readonly int JobCancelled Field Value Type Description System.Int32 JobFailed Built-in event type: Ignite job failed. Job has failed. This means that there was some error event during job execution and job did not produce a result. Declaration public static readonly int JobFailed Field Value Type Description System.Int32 JobFailedOver Built-in event type: Ignite job failed over. Declaration public static readonly int JobFailedOver Field Value Type Description System.Int32 JobFinished Built-in event type: Ignite job finished. Job has successfully completed and produced a result which from the user perspective can still be either negative or positive. Declaration public static readonly int JobFinished Field Value Type Description System.Int32 JobMapped Built-in event type: Ignite job was mapped in {@link org.apache.ignite.compute.ComputeTask#map(List, Object)} method. Declaration public static readonly int JobMapped Field Value Type Description System.Int32 JobQueued Built-in event type: Ignite job queued. Job arrived for execution and has been queued (added to passive queue during collision resolution). Declaration public static readonly int JobQueued Field Value Type Description System.Int32 JobRejected Built-in event type: Ignite job rejected during collision resolution. Declaration public static readonly int JobRejected Field Value Type Description System.Int32 JobResulted Built-in event type: Ignite job result was received by {@link org.apache.ignite.compute.ComputeTask#result(org.apache.ignite.compute.ComputeJobResult, List)} method. Declaration public static readonly int JobResulted Field Value Type Description System.Int32 JobStarted Built-in event type: Ignite job started. Declaration public static readonly int JobStarted Field Value Type Description System.Int32 JobTimedout Built-in event type: Ignite job timed out. Declaration public static readonly int JobTimedout Field Value Type Description System.Int32 NodeFailed Built-in event type: node failed. Ignite detected that node has presumably crashed and is considered failed. Declaration public static readonly int NodeFailed Field Value Type Description System.Int32 NodeJoined Built-in event type: node joined topology. New node has been discovered and joined grid topology. Note that even though a node has been discovered there could be a number of warnings in the log. In certain situations Ignite doesn't prevent a node from joining but prints warning messages into the log. Declaration public static readonly int NodeJoined Field Value Type Description System.Int32 NodeLeft Built-in event type: node has normally left topology. Declaration public static readonly int NodeLeft Field Value Type Description System.Int32 NodeMetricsUpdated Built-in event type: node metrics updated. Generated when node's metrics are updated. In most cases this callback is invoked with every heartbeat received from a node (including local node). Declaration public static readonly int NodeMetricsUpdated Field Value Type Description System.Int32 NodeSegmented Built-in event type: local node segmented. Generated when node determines that it runs in invalid network segment. Declaration public static readonly int NodeSegmented Field Value Type Description System.Int32 TaskFailed Built-in event type: task failed. Task failed. This event is triggered every time a task finished with an exception. Note that prior to this event, there could be other events recorded specific to the failure. Declaration public static readonly int TaskFailed Field Value Type Description System.Int32 TaskFinished Built-in event type: task finished. Task got finished. This event is triggered every time a task finished without exception. Declaration public static readonly int TaskFinished Field Value Type Description System.Int32 TaskReduced Built-in event type: task reduced. Declaration public static readonly int TaskReduced Field Value Type Description System.Int32 TaskSessionAttrSet Built-in event type: task session attribute set. Declaration public static readonly int TaskSessionAttrSet Field Value Type Description System.Int32 TaskStarted Built-in event type: task started. Declaration public static readonly int TaskStarted Field Value Type Description System.Int32 TaskTimedout Built-in event type: task timed out. Declaration public static readonly int TaskTimedout Field Value Type Description System.Int32 Properties All All Ignite events. Declaration public static ICollection<int> All { get; } Property Value Type Description System.Collections.Generic.ICollection < System.Int32 > AllMinusMetricUpdate All Ignite events ( excluding metric update event). Declaration public static ICollection<int> AllMinusMetricUpdate { get; } Property Value Type Description System.Collections.Generic.ICollection < System.Int32 > CacheAll All cache events. Declaration public static ICollection<int> CacheAll { get; } Property Value Type Description System.Collections.Generic.ICollection < System.Int32 > CacheLifecycleAll All cache lifecycle events. Declaration public static ICollection<int> CacheLifecycleAll { get; } Property Value Type Description System.Collections.Generic.ICollection < System.Int32 > CacheQueryAll All cache query events. Declaration public static ICollection<int> CacheQueryAll { get; } Property Value Type Description System.Collections.Generic.ICollection < System.Int32 > CacheRebalanceAll All cache rebalance events. Declaration public static ICollection<int> CacheRebalanceAll { get; } Property Value Type Description System.Collections.Generic.ICollection < System.Int32 > DiscoveryAll All discovery events. Declaration public static ICollection<int> DiscoveryAll { get; } Property Value Type Description System.Collections.Generic.ICollection < System.Int32 > DiscoveryAllMinusMetrics All discovery events except for NodeMetricsUpdated . Subscription to NodeMetricsUpdated can generate massive amount of event processing in most cases is not necessary. If this event is indeed required you can subscribe to it individually or use Apache.Ignite.Core.Events.EventType.DiscoveryAll0 array. Declaration public static ICollection<int> DiscoveryAllMinusMetrics { get; } Property Value Type Description System.Collections.Generic.ICollection < System.Int32 > ErrorAll All events indicating an error or failure condition. It is convenient to use when fetching all events indicating error or failure. Declaration public static ICollection<int> ErrorAll { get; } Property Value Type Description System.Collections.Generic.ICollection < System.Int32 > JobExecutionAll All Ignite job execution events. Declaration public static ICollection<int> JobExecutionAll { get; } Property Value Type Description System.Collections.Generic.ICollection < System.Int32 > TaskExecutionAll All Ignite task execution events. Declaration public static ICollection<int> TaskExecutionAll { get; } Property Value Type Description System.Collections.Generic.ICollection < System.Int32 >"
  },
  "api/Apache.Ignite.Core.Failure.html": {
    "href": "api/Apache.Ignite.Core.Failure.html",
    "title": "Namespace Apache.Ignite.Core.Failure | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Failure Classes NoOpFailureHandler Just ignores any failure. It's useful for tests and debugging. StopNodeFailureHandler Handler will stop node in case of critical error. StopNodeOrHaltFailureHandler Handler will try to stop node if TryStop value is true. If node can't be stopped during provided Timeout or TryStop value is false then JVM process will be terminated forcibly. Interfaces IFailureHandler Failure handler interface. Only predefined implementations are supported: NoOpFailureHandler , StopNodeFailureHandler , StopNodeOrHaltFailureHandler ."
  },
  "api/Apache.Ignite.Core.IDataRegionMetrics.html": {
    "href": "api/Apache.Ignite.Core.IDataRegionMetrics.html",
    "title": "Interface IDataRegionMetrics | Apache Ignite.NET",
    "keywords": "Interface IDataRegionMetrics Memory usage metrics. Namespace : Apache.Ignite.Core Assembly : Apache.Ignite.Core.dll Syntax public interface IDataRegionMetrics Properties AllocationRate Gets the allocation rate, in pages per second. Declaration float AllocationRate { get; } Property Value Type Description System.Single CheckpointBufferPages Gets checkpoint buffer size in pages. Deprecated, always returns 0. Use UsedCheckpointBufferPages instead. Declaration [Obsolete(\"Deprecated, always returns 0. Use UsedCheckpointBufferPages instead.\")] long CheckpointBufferPages { get; } Property Value Type Description System.Int64 CheckpointBufferSize Gets checkpoint buffer size in bytes. Declaration long CheckpointBufferSize { get; } Property Value Type Description System.Int64 DirtyPages Gets the number of dirty RAM pages. Declaration long DirtyPages { get; } Property Value Type Description System.Int64 EvictionRate Gets the eviction rate, in pages per second. Declaration float EvictionRate { get; } Property Value Type Description System.Single LargeEntriesPagesPercentage Gets the percentage of pages fully occupied by entries that are larger than page. Declaration float LargeEntriesPagesPercentage { get; } Property Value Type Description System.Single Name Gets the memory policy name. Declaration string Name { get; } Property Value Type Description System.String OffHeapSize Gets total offheap size in bytes. Declaration long OffHeapSize { get; } Property Value Type Description System.Int64 OffheapUsedSize Gets total used offheap size in bytes. Declaration long OffheapUsedSize { get; } Property Value Type Description System.Int64 PageFillFactor Gets the page fill factor: free space to overall size ratio across all pages. Declaration float PageFillFactor { get; } Property Value Type Description System.Single PageReplaceAge Gets the average age (in milliseconds) for pages being replaced from persistent storage. Declaration float PageReplaceAge { get; } Property Value Type Description System.Single PageReplaceRate Gets the rate (pages per second) at which pages get replaced with other pages from persistent storage. Declaration float PageReplaceRate { get; } Property Value Type Description System.Single PageSize Gets memory page size in bytes. Declaration int PageSize { get; } Property Value Type Description System.Int32 PagesRead Gets the number of read pages from last restart. Declaration long PagesRead { get; } Property Value Type Description System.Int64 PagesReplaced Gets the number of replaced pages from last restart. Declaration long PagesReplaced { get; } Property Value Type Description System.Int64 PagesWritten Gets the number of written pages from last restart. Declaration long PagesWritten { get; } Property Value Type Description System.Int64 PhysicalMemoryPages Gets the count of pages loaded to RAM. Declaration long PhysicalMemoryPages { get; } Property Value Type Description System.Int64 PhysicalMemorySize Gets the size of pages loaded to RAM in bytes. Declaration long PhysicalMemorySize { get; } Property Value Type Description System.Int64 TotalAllocatedPages Gets the count of allocated pages. Declaration long TotalAllocatedPages { get; } Property Value Type Description System.Int64 TotalAllocatedSize Gets the size of allocated pages in bytes. Declaration long TotalAllocatedSize { get; } Property Value Type Description System.Int64 TotalUsedPages Gets a total number of pages used for storing the data. Declaration long TotalUsedPages { get; } Property Value Type Description System.Int64 UsedCheckpointBufferPages Gets used checkpoint buffer size in pages. Declaration long UsedCheckpointBufferPages { get; } Property Value Type Description System.Int64 UsedCheckpointBufferSize Gets used checkpoint buffer size in bytes. Declaration long UsedCheckpointBufferSize { get; } Property Value Type Description System.Int64"
  },
  "api/Apache.Ignite.Core.IDataStorageMetrics.html": {
    "href": "api/Apache.Ignite.Core.IDataStorageMetrics.html",
    "title": "Interface IDataStorageMetrics | Apache Ignite.NET",
    "keywords": "Interface IDataStorageMetrics Persistent store metrics. Namespace : Apache.Ignite.Core Assembly : Apache.Ignite.Core.dll Syntax public interface IDataStorageMetrics Properties LastCheckpointCopiedOnWritePagesNumber Gets the number of pages copied to a temporary checkpoint buffer during the last checkpoint. Declaration long LastCheckpointCopiedOnWritePagesNumber { get; } Property Value Type Description System.Int64 LastCheckpointDataPagesNumber Gets the number of data pages written during the last checkpoint. Declaration long LastCheckpointDataPagesNumber { get; } Property Value Type Description System.Int64 LastCheckpointDuration Gets the duration of the last checkpoint. Declaration TimeSpan LastCheckpointDuration { get; } Property Value Type Description System.TimeSpan LastCheckpointFsyncDuration Gets the duration of the sync phase of the last checkpoint. Declaration TimeSpan LastCheckpointFsyncDuration { get; } Property Value Type Description System.TimeSpan LastCheckpointLockWaitDuration Gets the duration of last checkpoint lock wait. Declaration TimeSpan LastCheckpointLockWaitDuration { get; } Property Value Type Description System.TimeSpan LastCheckpointMarkDuration Gets the duration of last checkpoint mark phase. Declaration TimeSpan LastCheckpointMarkDuration { get; } Property Value Type Description System.TimeSpan LastCheckpointPagesWriteDuration Gets the duration of last checkpoint pages write phase. Declaration TimeSpan LastCheckpointPagesWriteDuration { get; } Property Value Type Description System.TimeSpan LastCheckpointTotalPagesNumber Gets the total number of pages written during the last checkpoint. Declaration long LastCheckpointTotalPagesNumber { get; } Property Value Type Description System.Int64 WalArchiveSegments Gets the current number of WAL segments in the WAL archive. Declaration int WalArchiveSegments { get; } Property Value Type Description System.Int32 WalFsyncTimeAverage Gets the average WAL fsync duration in microseconds over the last time interval. Declaration float WalFsyncTimeAverage { get; } Property Value Type Description System.Single WalLoggingRate Gets the average number of WAL records per second written during the last time interval. Declaration float WalLoggingRate { get; } Property Value Type Description System.Single WalWritingRate Gets the average number of bytes per second written during the last time interval. Declaration float WalWritingRate { get; } Property Value Type Description System.Single"
  },
  "api/Apache.Ignite.Core.IgniteConfiguration.html": {
    "href": "api/Apache.Ignite.Core.IgniteConfiguration.html",
    "title": "Class IgniteConfiguration | Apache Ignite.NET",
    "keywords": "Class IgniteConfiguration Grid configuration. Inheritance System.Object IgniteConfiguration Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core Assembly : Apache.Ignite.Core.dll Syntax public class IgniteConfiguration Constructors IgniteConfiguration() Initializes a new instance of the IgniteConfiguration class. Declaration public IgniteConfiguration() IgniteConfiguration(IgniteConfiguration) Initializes a new instance of the IgniteConfiguration class. Declaration public IgniteConfiguration(IgniteConfiguration configuration) Parameters Type Name Description IgniteConfiguration configuration The configuration to copy. Fields DefaultAuthenticationEnabled Default value for AuthenticationEnabled property. Declaration public const bool DefaultAuthenticationEnabled = false Field Value Type Description System.Boolean DefaultClientConnectorConfigurationEnabled Default value for ClientConnectorConfigurationEnabled . Declaration public const bool DefaultClientConnectorConfigurationEnabled = true Field Value Type Description System.Boolean DefaultClientFailureDetectionTimeout Default failure detection timeout. Declaration public static readonly TimeSpan DefaultClientFailureDetectionTimeout Field Value Type Description System.TimeSpan DefaultFailureDetectionTimeout Default failure detection timeout. Declaration public static readonly TimeSpan DefaultFailureDetectionTimeout Field Value Type Description System.TimeSpan DefaultIsActiveOnStart Default value for IsActiveOnStart property. Declaration public const bool DefaultIsActiveOnStart = true Field Value Type Description System.Boolean DefaultIsLateAffinityAssignment Default late affinity assignment mode. Declaration public const bool DefaultIsLateAffinityAssignment = true Field Value Type Description System.Boolean DefaultJvmInitMem Default initial JVM memory in megabytes. Declaration public const int DefaultJvmInitMem = -1 Field Value Type Description System.Int32 DefaultJvmMaxMem Default maximum JVM memory in megabytes. Declaration public const int DefaultJvmMaxMem = -1 Field Value Type Description System.Int32 DefaultLongQueryWarningTimeout Default timeout after which long query warning will be printed. Declaration public static readonly TimeSpan DefaultLongQueryWarningTimeout Field Value Type Description System.TimeSpan DefaultManagementThreadPoolSize Default management thread pool size. Declaration public const int DefaultManagementThreadPoolSize = 4 Field Value Type Description System.Int32 DefaultMetricsExpireTime Default metrics expire time. Declaration public static readonly TimeSpan DefaultMetricsExpireTime Field Value Type Description System.TimeSpan DefaultMetricsHistorySize Default metrics history size. Declaration public const int DefaultMetricsHistorySize = 10000 Field Value Type Description System.Int32 DefaultMetricsLogFrequency Default metrics log frequency. Declaration public static readonly TimeSpan DefaultMetricsLogFrequency Field Value Type Description System.TimeSpan DefaultMetricsUpdateFrequency Default metrics update frequency. Declaration public static readonly TimeSpan DefaultMetricsUpdateFrequency Field Value Type Description System.TimeSpan DefaultMvccVacuumFrequency Default value for MvccVacuumFrequency property. Declaration public const long DefaultMvccVacuumFrequency = 5000L Field Value Type Description System.Int64 DefaultMvccVacuumThreadCount Default value for MvccVacuumThreadCount property. Declaration public const int DefaultMvccVacuumThreadCount = 2 Field Value Type Description System.Int32 DefaultNetworkSendRetryCount Default network retry count. Declaration public const int DefaultNetworkSendRetryCount = 3 Field Value Type Description System.Int32 DefaultNetworkSendRetryDelay Default network retry delay. Declaration public static readonly TimeSpan DefaultNetworkSendRetryDelay Field Value Type Description System.TimeSpan DefaultNetworkTimeout Default network timeout. Declaration public static readonly TimeSpan DefaultNetworkTimeout Field Value Type Description System.TimeSpan DefaultRedirectJavaConsoleOutput Default value for RedirectJavaConsoleOutput property. Declaration public const bool DefaultRedirectJavaConsoleOutput = true Field Value Type Description System.Boolean DefaultSqlQueryHistorySize Default value for SqlQueryHistorySize property. Declaration public const int DefaultSqlQueryHistorySize = 1000 Field Value Type Description System.Int32 DefaultThreadPoolSize Default thread pool size. Declaration public static readonly int DefaultThreadPoolSize Field Value Type Description System.Int32 Properties Assemblies 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. Declaration public ICollection<string> Assemblies { get; set; } Property Value Type Description System.Collections.Generic.ICollection < System.String > AsyncCallbackThreadPoolSize Gets or sets the size of the asynchronous callback thread pool. Declaration public int AsyncCallbackThreadPoolSize { get; set; } Property Value Type Description System.Int32 AtomicConfiguration Gets or sets the atomic data structures configuration. Declaration public AtomicConfiguration AtomicConfiguration { get; set; } Property Value Type Description AtomicConfiguration AuthenticationEnabled Gets or sets whether user authentication is enabled for the cluster. Default is false . Declaration public bool AuthenticationEnabled { get; set; } Property Value Type Description System.Boolean AutoGenerateIgniteInstanceName Gets or sets a value indicating whether unique IgniteInstanceName should be generated. Set this to true in scenarios where new node should be started regardless of other nodes present within current process. In particular, this setting is useful is ASP.NET and IIS environments, where AppDomains are loaded and unloaded within a single process during application restarts. Ignite stops all nodes on System.AppDomain unload, however, IIS does not wait for previous AppDomain to unload before starting up a new one, which may cause \"Ignite instance with this name has already been started\" errors. This setting solves the issue. Declaration public bool AutoGenerateIgniteInstanceName { get; set; } Property Value Type Description System.Boolean BinaryConfiguration Gets or sets the binary configuration. Declaration public BinaryConfiguration BinaryConfiguration { get; set; } Property Value Type Description BinaryConfiguration The binary configuration. CacheConfiguration Gets or sets the cache configuration. Declaration public ICollection<CacheConfiguration> CacheConfiguration { get; set; } Property Value Type Description System.Collections.Generic.ICollection < CacheConfiguration > The cache configuration. ClientConnectorConfiguration Gets or sets the client connector configuration (for JDBC, ODBC, and thin clients). Declaration public ClientConnectorConfiguration ClientConnectorConfiguration { get; set; } Property Value Type Description ClientConnectorConfiguration ClientConnectorConfigurationEnabled Gets or sets a value indicating whether client connector is enabled: allow thin clients, ODBC and JDBC drivers to work with Ignite (see ClientConnectorConfiguration ). Default is DefaultClientConnectorConfigurationEnabled . Declaration public bool ClientConnectorConfigurationEnabled { get; set; } Property Value Type Description System.Boolean ClientFailureDetectionTimeout Gets or sets the failure detection timeout used by TcpDiscoverySpi and TcpCommunicationSpi for client nodes. Declaration public TimeSpan ClientFailureDetectionTimeout { get; set; } Property Value Type Description System.TimeSpan ClientMode Gets or sets a value indicating whether node should start in client mode. Client node cannot hold data in the caches. Declaration public bool ClientMode { get; set; } Property Value Type Description System.Boolean CommunicationSpi Gets or sets the communication service provider. Null for default communication. Declaration public ICommunicationSpi CommunicationSpi { get; set; } Property Value Type Description ICommunicationSpi ConsistentId Gets or sets consistent globally unique node identifier which survives node restarts. Declaration public object ConsistentId { get; set; } Property Value Type Description System.Object DataStorageConfiguration Gets or sets the data storage configuration. Declaration public DataStorageConfiguration DataStorageConfiguration { get; set; } Property Value Type Description DataStorageConfiguration DataStreamerThreadPoolSize Gets or sets the size of the data streamer thread pool. Declaration public int DataStreamerThreadPoolSize { get; set; } Property Value Type Description System.Int32 DiscoverySpi Gets or sets the discovery service provider. Null for default discovery. Declaration public IDiscoverySpi DiscoverySpi { get; set; } Property Value Type Description IDiscoverySpi EncryptionSpi Gets or sets the encryption service provider. Null for disabled encryption. Declaration public IEncryptionSpi EncryptionSpi { get; set; } Property Value Type Description IEncryptionSpi EventStorageSpi Gets or sets the event storage interface. Only predefined implementations are supported: NoopEventStorageSpi , MemoryEventStorageSpi . Declaration public IEventStorageSpi EventStorageSpi { get; set; } Property Value Type Description IEventStorageSpi ExecutorConfiguration Gets or sets custom executor configuration for compute tasks. Declaration public ICollection<ExecutorConfiguration> ExecutorConfiguration { get; set; } Property Value Type Description System.Collections.Generic.ICollection < ExecutorConfiguration > FailureDetectionTimeout Gets or sets the failure detection timeout used by TcpDiscoverySpi and TcpCommunicationSpi . Declaration public TimeSpan FailureDetectionTimeout { get; set; } Property Value Type Description System.TimeSpan FailureHandler Gets or sets predefined failure handlers implementation. A failure handler handles critical failures of Ignite instance accordingly: NoOpFailureHandler -- do nothing. StopNodeFailureHandler -- stop node. StopNodeOrHaltFailureHandler -- try to stop node if tryStop value is true. If node can't be stopped during provided timeout or tryStop value is false then JVM process will be terminated forcibly. Only these implementations are supported: NoOpFailureHandler , StopNodeOrHaltFailureHandler , StopNodeFailureHandler . Declaration public IFailureHandler FailureHandler { get; set; } Property Value Type Description IFailureHandler GridName Gets or sets optional local instance name. This name only works locally and has no effect on topology. This property is used to when there are multiple Ignite nodes in one process to distinguish them. Declaration [Obsolete(\"Use IgniteInstanceName instead.\")] public string GridName { get; set; } Property Value Type Description System.String IgniteHome Path to Ignite home. If not set environment variable IGNITE_HOME will be used. Declaration public string IgniteHome { get; set; } Property Value Type Description System.String IgniteInstanceName Gets or sets optional local instance name. This name only works locally and has no effect on topology. This property is used to when there are multiple Ignite nodes in one process to distinguish them. Declaration public string IgniteInstanceName { get; set; } Property Value Type Description System.String IncludedEventTypes Gets or sets a set of event types ( EventType ) to be recorded by Ignite. Declaration public ICollection<int> IncludedEventTypes { get; set; } Property Value Type Description System.Collections.Generic.ICollection < System.Int32 > IsActiveOnStart Gets or sets a value indicating whether grid should be active on start. See also IsActive() and SetActive(Boolean) . This property is ignored when DataStorageConfiguration is present: cluster is always inactive on start when Ignite Persistence is enabled. Declaration public bool IsActiveOnStart { get; set; } Property Value Type Description System.Boolean IsDaemon Gets or sets a value indicating whether this node should be a daemon node. Daemon nodes are the usual grid nodes that participate in topology but not visible on the main APIs, i.e. they are not part of any cluster groups. Daemon nodes are used primarily for management and monitoring functionality that is built on Ignite and needs to participate in the topology, but also needs to be excluded from the \"normal\" topology, so that it won't participate in the task execution or in-memory data grid storage. Declaration public bool IsDaemon { get; set; } Property Value Type Description System.Boolean IsLateAffinityAssignment Gets or sets a value indicating whether late affinity assignment mode should be used. On each topology change, for each started cache, partition-to-node mapping is calculated using AffinityFunction for cache. When late affinity assignment mode is disabled then new affinity mapping is applied immediately. With late affinity assignment mode, if primary node was changed for some partition, but data for this partition is not rebalanced yet on this node, then current primary is not changed and new primary is temporary assigned as backup. This nodes becomes primary only when rebalancing for all assigned primary partitions is finished. This mode can show better performance for cache operations, since when cache primary node executes some operation and data is not rebalanced yet, then it sends additional message to force rebalancing from other nodes. Note, that ICacheAffinity interface provides assignment information taking late assignment into account, so while rebalancing for new primary nodes is not finished it can return assignment which differs from assignment calculated by AffinityFunction. This property should have the same value for all nodes in cluster. If not provided, default value is DefaultIsLateAffinityAssignment . Declaration [Obsolete(\"No longer supported, always true.\")] public bool IsLateAffinityAssignment { get; set; } Property Value Type Description System.Boolean JvmClasspath Classpath used by JVM on Ignite start. Declaration public string JvmClasspath { get; set; } Property Value Type Description System.String JvmDllPath Path to jvm.dll (libjvm.so on Linux, libjvm.dylib on Mac) file. If not set, it's location will be determined using JAVA_HOME environment variable. If path is neither set nor determined automatically, an exception will be thrown. Declaration public string JvmDllPath { get; set; } Property Value Type Description System.String JvmInitialMemoryMb Initial amount of memory in megabytes given to JVM. Maps to -Xms Java option. -1 maps to JVM defaults. Defaults to DefaultJvmInitMem . Declaration public int JvmInitialMemoryMb { get; set; } Property Value Type Description System.Int32 JvmMaxMemoryMb Maximum amount of memory in megabytes given to JVM. Maps to -Xmx Java option. -1 maps to JVM defaults. Defaults to DefaultJvmMaxMem . Declaration public int JvmMaxMemoryMb { get; set; } Property Value Type Description System.Int32 JvmOptions Collection of options passed to JVM on Ignite start. Declaration public ICollection<string> JvmOptions { get; set; } Property Value Type Description System.Collections.Generic.ICollection < System.String > LifecycleHandlers Lifecycle handlers. Declaration public ICollection<ILifecycleHandler> LifecycleHandlers { get; set; } Property Value Type Description System.Collections.Generic.ICollection < ILifecycleHandler > LocalEventListeners Gets or sets pre-configured local event listeners. This is similar to calling LocalListen<T>(IEventListener<T>, Int32[]) , but important difference is that some events occur during startup and can be only received this way. Declaration public ICollection<LocalEventListener> LocalEventListeners { get; set; } Property Value Type Description System.Collections.Generic.ICollection < LocalEventListener > Localhost Gets or sets system-wide local address or host for all Ignite components to bind to. If provided it will override all default local bind settings within Ignite. If null then Ignite tries to use local wildcard address.That means that all services will be available on all network interfaces of the host machine. It is strongly recommended to set this parameter for all production environments. Declaration public string Localhost { get; set; } Property Value Type Description System.String Logger Gets or sets the logger. If no logger is set, logging is delegated to Java, which uses the logger defined in Spring XML (if present) or logs to console otherwise. Declaration public ILogger Logger { get; set; } Property Value Type Description ILogger LongQueryWarningTimeout Gets or sets the timeout after which long query warning will be printed. Declaration public TimeSpan LongQueryWarningTimeout { get; set; } Property Value Type Description System.TimeSpan ManagementThreadPoolSize Gets or sets the size of the management thread pool, which processes internal Ignite jobs. Declaration public int ManagementThreadPoolSize { get; set; } Property Value Type Description System.Int32 MemoryConfiguration Gets or sets the page memory configuration. MemoryConfiguration for more details. Obsolete, use DataStorageConfiguration . Declaration [Obsolete(\"Use DataStorageConfiguration.\")] public MemoryConfiguration MemoryConfiguration { get; set; } Property Value Type Description MemoryConfiguration MetricsExpireTime Gets or sets the time after which a certain metric value is considered expired. Declaration public TimeSpan MetricsExpireTime { get; set; } Property Value Type Description System.TimeSpan MetricsHistorySize Gets or sets the number of metrics kept in history to compute totals and averages. Declaration public int MetricsHistorySize { get; set; } Property Value Type Description System.Int32 MetricsLogFrequency Gets or sets the frequency of metrics log print out. System.TimeSpan.Zero to disable metrics print out. Declaration public TimeSpan MetricsLogFrequency { get; set; } Property Value Type Description System.TimeSpan MetricsUpdateFrequency Gets or sets the job metrics update frequency. System.TimeSpan.Zero to update metrics on job start/finish. Negative value to never update metrics. Declaration public TimeSpan MetricsUpdateFrequency { get; set; } Property Value Type Description System.TimeSpan MvccVacuumFrequency This is an experimental feature. Transactional SQL is currently in a beta status. Time interval between MVCC vacuum runs in milliseconds. Declaration public long MvccVacuumFrequency { get; set; } Property Value Type Description System.Int64 MvccVacuumThreadCount This is an experimental feature. Transactional SQL is currently in a beta status. Number of MVCC vacuum threads. Declaration public int MvccVacuumThreadCount { get; set; } Property Value Type Description System.Int32 NetworkSendRetryCount Gets or sets the network send retry count. Declaration public int NetworkSendRetryCount { get; set; } Property Value Type Description System.Int32 NetworkSendRetryDelay Gets or sets the network send retry delay. Declaration public TimeSpan NetworkSendRetryDelay { get; set; } Property Value Type Description System.TimeSpan NetworkTimeout Gets or sets the network timeout. Declaration public TimeSpan NetworkTimeout { get; set; } Property Value Type Description System.TimeSpan PeerAssemblyLoadingMode Gets or sets a value indicating how user assemblies should be loaded on remote nodes. For example, when executing Call<TRes>(IComputeFunc<TRes>) , the assembly with corresponding IComputeFunc<TRes> should be loaded on remote nodes. With this option enabled, Ignite will attempt to send the assembly to remote nodes and load it there automatically. Default is Disabled . Peer loading is enabled for ICompute functionality. Declaration public PeerAssemblyLoadingMode PeerAssemblyLoadingMode { get; set; } Property Value Type Description PeerAssemblyLoadingMode PersistentStoreConfiguration Gets or sets the persistent store configuration. Obsolete, use DataStorageConfiguration . Declaration [Obsolete(\"Use DataStorageConfiguration.\")] public PersistentStoreConfiguration PersistentStoreConfiguration { get; set; } Property Value Type Description PersistentStoreConfiguration PluginConfigurations Gets or sets the configurations for plugins to be started. Declaration public ICollection<IPluginConfiguration> PluginConfigurations { get; set; } Property Value Type Description System.Collections.Generic.ICollection < IPluginConfiguration > PublicThreadPoolSize Gets or sets the size of the public thread pool, which processes compute jobs and user messages. Declaration public int PublicThreadPoolSize { get; set; } Property Value Type Description System.Int32 QueryThreadPoolSize Gets or sets the size of the query thread pool. Declaration public int QueryThreadPoolSize { get; set; } Property Value Type Description System.Int32 RedirectJavaConsoleOutput Gets or sets a value indicating whether Java console output should be redirected to System.Console.Out and System.Console.Error , respectively. Default is DefaultRedirectJavaConsoleOutput . Java code outputs valuable information to console. However, since that is Java console, it is not possible to capture that output with standard .NET APIs ( System.Console.SetOut(System.IO.TextWriter) ). As a result, many tools (IDEs, test runners) are not able to display Ignite console output in UI. This property is enabled by default and redirects Java console output to standard .NET console. It is recommended to disable this in production. Declaration public bool RedirectJavaConsoleOutput { get; set; } Property Value Type Description System.Boolean ServiceThreadPoolSize Gets or sets the size of the service thread pool, which processes Ignite services. Declaration public int ServiceThreadPoolSize { get; set; } Property Value Type Description System.Int32 SpringConfigUrl URL to Spring configuration file. Spring configuration is loaded first, then IgniteConfiguration properties are applied. Null property values do not override Spring values. Value-typed properties are tracked internally: if setter was not called, Spring value won't be overwritten. This merging happens on the top level only; e. g. if there are cache configurations defined in Spring and in .NET, .NET caches will overwrite Spring caches. Declaration public string SpringConfigUrl { get; set; } Property Value Type Description System.String SqlConnectorConfiguration Gets or sets the SQL connector configuration (for JDBC and ODBC). Declaration [Obsolete(\"Use ClientConnectorConfiguration instead.\")] public SqlConnectorConfiguration SqlConnectorConfiguration { get; set; } Property Value Type Description SqlConnectorConfiguration SqlQueryHistorySize Gets or sets the value indicating the number of SQL query history elements to keep in memory. Zero or negative value disables the history. Declaration public int SqlQueryHistorySize { get; set; } Property Value Type Description System.Int32 SqlSchemas Gets or sets SQL schemas to be created on node startup. Schemas are created on local node only and are not propagated. to other cluster nodes. Created schemas cannot be dropped. By default schema names are case-insensitive. Use quotes to enforce case sensitivity. Declaration public ICollection<string> SqlSchemas { get; set; } Property Value Type Description System.Collections.Generic.ICollection < System.String > SslContextFactory Gets or sets the SSL context factory that will be used for creating a secure socket layer b/w nodes. Default is null (no SSL). Declaration public ISslContextFactory SslContextFactory { get; set; } Property Value Type Description ISslContextFactory StripedThreadPoolSize Gets or sets the size of the striped thread pool, which processes cache requests. Declaration public int StripedThreadPoolSize { get; set; } Property Value Type Description System.Int32 SuppressWarnings Whether to suppress warnings. Declaration public bool SuppressWarnings { get; set; } Property Value Type Description System.Boolean SystemThreadPoolSize Gets or sets the size of the system thread pool, which processes internal system messages. Declaration public int SystemThreadPoolSize { get; set; } Property Value Type Description System.Int32 SystemWorkerBlockedTimeout Gets or sets the timeout for blocked system workers detection. Declaration public TimeSpan? SystemWorkerBlockedTimeout { get; set; } Property Value Type Description System.Nullable < System.TimeSpan > TransactionConfiguration Gets or sets the transaction configuration. Declaration public TransactionConfiguration TransactionConfiguration { get; set; } Property Value Type Description TransactionConfiguration UserAttributes Gets or sets the user attributes for this node. These attributes can be retrieved later via Attributes . Environment variables are added to node attributes automatically. NOTE: attribute names starting with \"org.apache.ignite\" are reserved for internal use. Declaration public IDictionary<string, object> UserAttributes { get; set; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.Object > UtilityCacheThreadPoolSize Gets or sets the size of the utility cache thread pool. Declaration public int UtilityCacheThreadPoolSize { get; set; } Property Value Type Description System.Int32 WorkDirectory Gets or sets the work directory. If not provided, a folder under IgniteHome will be used. Declaration public string WorkDirectory { get; set; } Property Value Type Description System.String Methods FromXml(String) Deserializes IgniteConfiguration from the XML string. Declaration public static IgniteConfiguration FromXml(string xml) Parameters Type Name Description System.String xml Xml string. Returns Type Description IgniteConfiguration Deserialized instance. FromXml(XmlReader) Deserializes IgniteConfiguration from the XML reader. Declaration public static IgniteConfiguration FromXml(XmlReader reader) Parameters Type Name Description System.Xml.XmlReader reader The reader. Returns Type Description IgniteConfiguration Deserialized instance. ToXml() Serializes this instance to an XML string. Declaration public string ToXml() Returns Type Description System.String ToXml(XmlWriter, String) Serializes this instance to the specified XML writer. Declaration public void ToXml(XmlWriter writer, string rootElementName) Parameters Type Name Description System.Xml.XmlWriter writer The writer. System.String rootElementName Name of the root element."
  },
  "api/Apache.Ignite.Core.PersistentStore.PersistentStoreConfiguration.html": {
    "href": "api/Apache.Ignite.Core.PersistentStore.PersistentStoreConfiguration.html",
    "title": "Class PersistentStoreConfiguration | Apache Ignite.NET",
    "keywords": "Class PersistentStoreConfiguration Configures Apache Ignite persistent store. Obsolete, use DataStorageConfiguration . Inheritance System.Object PersistentStoreConfiguration Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.PersistentStore Assembly : Apache.Ignite.Core.dll Syntax [Obsolete(\"Use DataStorageConfiguration.\")] public class PersistentStoreConfiguration Constructors PersistentStoreConfiguration() Initializes a new instance of the PersistentStoreConfiguration class. Declaration public PersistentStoreConfiguration() Fields DefaultCheckpointingFrequency Default value for CheckpointingFrequency . Declaration public static readonly TimeSpan DefaultCheckpointingFrequency Field Value Type Description System.TimeSpan DefaultCheckpointingThreads Default value for CheckpointingThreads . Declaration public const int DefaultCheckpointingThreads = 4 Field Value Type Description System.Int32 DefaultCheckpointWriteOrder Default value for CheckpointWriteOrder . Declaration public const CheckpointWriteOrder DefaultCheckpointWriteOrder = CheckpointWriteOrder.Sequential Field Value Type Description CheckpointWriteOrder DefaultLockWaitTime Default value for LockWaitTime . Declaration public static readonly TimeSpan DefaultLockWaitTime Field Value Type Description System.TimeSpan DefaultRateTimeInterval The default rate time interval. Declaration public static readonly TimeSpan DefaultRateTimeInterval Field Value Type Description System.TimeSpan DefaultSubIntervals The default sub intervals. Declaration public const int DefaultSubIntervals = 5 Field Value Type Description System.Int32 DefaultTlbSize Default value for TlbSize . Declaration public const int DefaultTlbSize = 131072 Field Value Type Description System.Int32 DefaultWalArchivePath Default value for WalArchivePath . Declaration public const string DefaultWalArchivePath = \"db/wal/archive\" Field Value Type Description System.String DefaultWalFlushFrequency Default value for WalFlushFrequency . Declaration public static readonly TimeSpan DefaultWalFlushFrequency Field Value Type Description System.TimeSpan DefaultWalFsyncDelayNanos Default value for WalFsyncDelayNanos . Declaration public const long DefaultWalFsyncDelayNanos = 1000L Field Value Type Description System.Int64 DefaultWalHistorySize Default value for WalHistorySize . Declaration public const int DefaultWalHistorySize = 20 Field Value Type Description System.Int32 DefaultWalRecordIteratorBufferSize Default value for WalRecordIteratorBufferSize . Declaration public const int DefaultWalRecordIteratorBufferSize = 67108864 Field Value Type Description System.Int32 DefaultWalSegments Default value for WalSegments . Declaration public const int DefaultWalSegments = 10 Field Value Type Description System.Int32 DefaultWalSegmentSize Default value for WalSegmentSize . Declaration public const int DefaultWalSegmentSize = 67108864 Field Value Type Description System.Int32 DefaultWalStorePath Default value for WalStorePath . Declaration public const string DefaultWalStorePath = \"db/wal\" Field Value Type Description System.String DefaultWriteThrottlingEnabled Default value for WriteThrottlingEnabled . Declaration public const bool DefaultWriteThrottlingEnabled = false Field Value Type Description System.Boolean Properties AlwaysWriteFullPages Gets or sets a value indicating whether full pages should always be written. Declaration public bool AlwaysWriteFullPages { get; set; } Property Value Type Description System.Boolean CheckpointingFrequency Gets or sets the checkpointing frequency which is a minimal interval when the dirty pages will be written to the Persistent Store. Declaration public TimeSpan CheckpointingFrequency { get; set; } Property Value Type Description System.TimeSpan CheckpointingPageBufferSize Gets or sets the size of the checkpointing page buffer. Default is 0 : Ignite will choose buffer size automatically. Declaration public long CheckpointingPageBufferSize { get; set; } Property Value Type Description System.Int64 CheckpointingThreads Gets or sets the number of threads for checkpointing. Declaration public int CheckpointingThreads { get; set; } Property Value Type Description System.Int32 CheckpointWriteOrder Gets or sets the checkpoint page write order on disk. Declaration public CheckpointWriteOrder CheckpointWriteOrder { get; set; } Property Value Type Description CheckpointWriteOrder LockWaitTime Gets or sets the persistent manager file lock wait time. Declaration public TimeSpan LockWaitTime { get; set; } Property Value Type Description System.TimeSpan MetricsEnabled Gets or sets a value indicating whether to enable persistent store metrics. See GetPersistentStoreMetrics() . Declaration public bool MetricsEnabled { get; set; } Property Value Type Description System.Boolean PersistentStorePath Gets or sets the path where data and indexes will be persisted. Declaration public string PersistentStorePath { get; set; } Property Value Type Description System.String RateTimeInterval Gets or sets the length of the time interval for rate-based metrics. This interval defines a window over which hits will be tracked. Declaration public TimeSpan RateTimeInterval { get; set; } Property Value Type Description System.TimeSpan SubIntervals Number of sub-intervals to split the RateTimeInterval into to track the update history. Declaration public int SubIntervals { get; set; } Property Value Type Description System.Int32 TlbSize Gets or sets the size of the TLB (Thread-Local Buffer), in bytes. Declaration public int TlbSize { get; set; } Property Value Type Description System.Int32 WalArchivePath Gets or sets the path to the directory where WAL (Write Ahead Log) archive is stored. Every WAL segment will be fully copied to this directory before it can be reused for WAL purposes. Declaration public string WalArchivePath { get; set; } Property Value Type Description System.String WalFlushFrequency Gets or sets the WAL (Write Ahead Log) flush frequency. Declaration public TimeSpan WalFlushFrequency { get; set; } Property Value Type Description System.TimeSpan WalFsyncDelayNanos Gets or sets the WAL (Write Ahead Log) fsync (disk sync) delay, in nanoseconds Declaration public long WalFsyncDelayNanos { get; set; } Property Value Type Description System.Int64 WalHistorySize Gets or sets the number of checkpoints to store in WAL (Write Ahead Log) history. Declaration public int WalHistorySize { get; set; } Property Value Type Description System.Int32 WalMode Gets or sets the WAL (Write Ahead Log) mode. Declaration public WalMode WalMode { get; set; } Property Value Type Description WalMode WalRecordIteratorBufferSize Gets or sets the size of the WAL (Write Ahead Log) record iterator buffer, in bytes. Declaration public int WalRecordIteratorBufferSize { get; set; } Property Value Type Description System.Int32 WalSegments Gets or sets a number of WAL (Write Ahead Log) segments to work with. For performance reasons, the whole WAL is split into files of fixed length called segments. Declaration public int WalSegments { get; set; } Property Value Type Description System.Int32 WalSegmentSize Gets or sets the size of the WAL (Write Ahead Log) segment. For performance reasons, the whole WAL is split into files of fixed length called segments. Declaration public int WalSegmentSize { get; set; } Property Value Type Description System.Int32 WalStorePath Gets or sets the path to the directory where WAL (Write Ahead Log) is stored. Declaration public string WalStorePath { get; set; } Property Value Type Description System.String WriteThrottlingEnabled Gets or sets a value indicating whether threads that generate dirty pages too fast during ongoing checkpoint will be throttled. Declaration public bool WriteThrottlingEnabled { get; set; } Property Value Type Description System.Boolean"
  },
  "api/Apache.Ignite.Core.PersistentStore.WalMode.html": {
    "href": "api/Apache.Ignite.Core.PersistentStore.WalMode.html",
    "title": "Enum WalMode | Apache Ignite.NET",
    "keywords": "Enum WalMode Write Ahead Log mode. Namespace : Apache.Ignite.Core.PersistentStore Assembly : Apache.Ignite.Core.dll Syntax [Obsolete(\"Use Apache.Ignite.Core.Data.WalMode\")] public enum WalMode Fields Name Description Background Background mode. Does not force application buffer flush. Data may be lost in case of process crash. Default Default mode: full-sync disk writes. These writes survive power loss scenarios. LogOnly Log only mode: flushes application buffers. These writes survive process crash. None WAL disabled."
  },
  "api/Apache.Ignite.Core.PersistentStore.html": {
    "href": "api/Apache.Ignite.Core.PersistentStore.html",
    "title": "Namespace Apache.Ignite.Core.PersistentStore | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.PersistentStore Classes PersistentStoreConfiguration Configures Apache Ignite persistent store. Obsolete, use DataStorageConfiguration . Interfaces IPersistentStoreMetrics Persistent store metrics. Obsolete, see IDataStorageMetrics . Enums CheckpointWriteOrder Defines checkpoint pages order on disk. WalMode Write Ahead Log mode."
  },
  "api/Apache.Ignite.Core.Plugin.Cache.ICachePluginConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Plugin.Cache.ICachePluginConfiguration.html",
    "title": "Interface ICachePluginConfiguration | Apache Ignite.NET",
    "keywords": "Interface ICachePluginConfiguration Cache plugin configuration marker interface. Starting point to extend CacheConfiguration and extend existing cache functionality. Namespace : Apache.Ignite.Core.Plugin.Cache Assembly : Apache.Ignite.Core.dll Syntax public interface ICachePluginConfiguration Properties CachePluginConfigurationClosureFactoryId Gets the id to locate PlatformCachePluginConfigurationClosureFactory on Java side and read the data written by WriteBinary(IBinaryRawWriter) method. Declaration int ? CachePluginConfigurationClosureFactoryId { get; } Property Value Type Description System.Nullable < System.Int32 > Methods WriteBinary(IBinaryRawWriter) Writes this instance to a raw writer. This method will be called when CachePluginConfigurationClosureFactoryId is not null to propagate configuration to the Java side. Declaration void WriteBinary(IBinaryRawWriter writer) Parameters Type Name Description IBinaryRawWriter writer The writer."
  },
  "api/Apache.Ignite.Core.Ssl.SslContextFactory.html": {
    "href": "api/Apache.Ignite.Core.Ssl.SslContextFactory.html",
    "title": "Class SslContextFactory | Apache Ignite.NET",
    "keywords": "Class SslContextFactory This SSL context factory that provides ssl context configuration with specified key and trust stores. Inheritance System.Object SslContextFactory Implements ISslContextFactory Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Ssl Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class SslContextFactory : ISslContextFactory Constructors SslContextFactory() Default constructor. Declaration public SslContextFactory() SslContextFactory(String, String) Creates a new instance of the SslContextFactory class. Trust store file is not set that results in accepting any SSL Certificate. Declaration public SslContextFactory(string keyStoreFilePath, string keyStorePassword) Parameters Type Name Description System.String keyStoreFilePath Path to key store file. System.String keyStorePassword Key store password. SslContextFactory(String, String, String, String) Creates a new instance of the SslContextFactory class. Declaration public SslContextFactory(string keyStoreFilePath, string keyStorePassword, string trustStoreFilePath, string trustStorePassword) Parameters Type Name Description System.String keyStoreFilePath Path to key store file. System.String keyStorePassword Key store password. System.String trustStoreFilePath Path to trust store file. System.String trustStorePassword Trust store password. Fields DefaultKeyAlgorithm Default value for KeyAlgorithm . Declaration public const string DefaultKeyAlgorithm = \"SunX509\" Field Value Type Description System.String DefaultSslProtocol Default value for Protocol . Declaration public const string DefaultSslProtocol = \"TLS\" Field Value Type Description System.String DefaultStoreType Default value for KeyStoreType and TrustStoreType . Declaration public const string DefaultStoreType = \"JKS\" Field Value Type Description System.String Properties KeyAlgorithm Key manager algorithm that will be used to create a key manager. Notice that in most cased default value DefaultKeyAlgorithm suites well, however, on Android platform this value need to be set to X509. Declaration public string KeyAlgorithm { get; set; } Property Value Type Description System.String KeyStoreFilePath Key store file path. Declaration public string KeyStoreFilePath { get; set; } Property Value Type Description System.String KeyStorePassword Key store file password. Declaration public string KeyStorePassword { get; set; } Property Value Type Description System.String KeyStoreType Key store type used for context creation. DefaultStoreType by default. Declaration public string KeyStoreType { get; set; } Property Value Type Description System.String Protocol Protocol for secure transport. DefaultSslProtocol by default. Declaration public string Protocol { get; set; } Property Value Type Description System.String TrustStoreFilePath Path to trust store file. Could be null if any SSL Certificate should be accepted/succeed. Declaration public string TrustStoreFilePath { get; set; } Property Value Type Description System.String TrustStorePassword Trust store password. Declaration public string TrustStorePassword { get; set; } Property Value Type Description System.String TrustStoreType Trust store type used for context creation. DefaultStoreType by default. Declaration public string TrustStoreType { get; set; } Property Value Type Description System.String Implements ISslContextFactory"
  },
  "api/Apache.Ignite.Core.Ssl.html": {
    "href": "api/Apache.Ignite.Core.Ssl.html",
    "title": "Namespace Apache.Ignite.Core.Ssl | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Ssl Classes SslContextFactory This SSL context factory that provides ssl context configuration with specified key and trust stores. Interfaces ISslContextFactory Represents an SSL Context Factory. Only predefined implementation is supported for now: SslContextFactory ."
  },
  "api/Apache.Ignite.Core.Transactions.ITransaction.html": {
    "href": "api/Apache.Ignite.Core.Transactions.ITransaction.html",
    "title": "Interface ITransaction | Apache Ignite.NET",
    "keywords": "Interface ITransaction Grid cache transaction. Cache transactions support the following isolation levels: ReadCommitted isolation level means that always a committed value will be provided for read operations. With this isolation level values are always read from cache global memory or persistent store every time a value is accessed. In other words, if the same key is accessed more than once within the same transaction, it may have different value every time since global cache memory may be updated concurrently by other threads. RepeatableRead isolation level means that if a value was read once within transaction, then all consecutive reads will provide the same in-transaction value. With this isolation level accessed values are stored within in-transaction memory, so consecutive access to the same key within the same transaction will always return the value that was previously read or updated within this transaction. If concurrency is Pessimistic , then a lock on the key will be acquired prior to accessing the value. Serializable isolation level means that all transactions occur in a completely isolated fashion, as if all transactions in the system had executed serially, one after the other. Read access with this level happens the same way as with RepeatableRead level. However, in Optimistic mode, if some transactions cannot be serially isolated from each other, then one winner will be picked and the other transactions in conflict will result in TransactionOptimisticException being thrown on Java side. Cache transactions support the following concurrency models: Optimistic - in this mode all cache operations are not distributed to other nodes until Commit() . In this mode one PREPARE message will be sent to participating cache nodes to start acquiring per-transaction locks, and once all nodes reply OK (i.e. Phase 1 completes successfully), a one-way COMMIT message is sent without waiting for reply. If it is necessary to know whenever remote nodes have committed as well, synchronous commit or synchronous rollback should be enabled via CacheConfiguration.setWriteSynchronizationMode . Note that in this mode, optimistic failures are only possible in conjunction with Serializable isolation level. In all other cases, optimistic transactions will never fail optimistically and will always be identically ordered on all participating Ignite nodes. Pessimistic - in this mode a lock is acquired on all cache operations with exception of read operations in ReadCommitted mode. All optional filters passed into cache operations will be evaluated after successful lock acquisition. Whenever Commit() is called, a single one-way COMMIT message is sent to participating cache nodes without waiting for reply. Note that there is no reason for distributed PREPARE step, as all locks have been already acquired. Just like with optimistic mode, it is possible to configure synchronous commit or rollback and wait till transaction commits on all participating remote nodes. In addition to standard CacheAtomicityMode.TRANSACTIONAL behavior, Ignite also supports a lighter CacheAtomicityMode.ATOMIC mode as well. In this mode distributed transactions and distributed locking are not supported. Disabling transactions and locking allows to achieve much higher performance and throughput ratios. It is recommended that CacheAtomicityMode.TRANSACTIONAL mode is used whenever full ACID -compliant transactions are not needed. You can use cache transactions as follows: ICacheTx tx = cache.TxStart(); try { int v1 = cache<string, int>.Get(\"k1\"); // Check if v1 satisfies some condition before doing a put. if (v1 > 0) cache.Put<string, int>(\"k1\", 2); cache.Removex(\"k2); // Commit the transaction. tx.Commit(); } finally { tx.Dispose(); } Inherited Members System.IDisposable.Dispose() Namespace : Apache.Ignite.Core.Transactions Assembly : Apache.Ignite.Core.dll Syntax public interface ITransaction : IDisposable Properties Concurrency Transaction concurrency mode. Declaration TransactionConcurrency Concurrency { get; } Property Value Type Description TransactionConcurrency Isolation Transaction isolation level. Declaration TransactionIsolation Isolation { get; } Property Value Type Description TransactionIsolation IsRollbackOnly Gets a value indicating whether this transaction was marked as rollback-only. Declaration bool IsRollbackOnly { get; } Property Value Type Description System.Boolean Label Label of current transaction. Declaration string Label { get; } Property Value Type Description System.String NodeId ID of the node on which this transaction started. Declaration Guid NodeId { get; } Property Value Type Description System.Guid Originating node ID. StartTime Start time of this transaction on this node. Declaration DateTime StartTime { get; } Property Value Type Description System.DateTime State Current transaction state. Declaration TransactionState State { get; } Property Value Type Description TransactionState ThreadId ID of the thread in which this transaction started. Declaration long ThreadId { get; } Property Value Type Description System.Int64 Timeout Timeout for this transaction. If transaction times out prior to it's completion, an exception will be thrown. System.TimeSpan.Zero for infinite timeout. Declaration TimeSpan Timeout { get; } Property Value Type Description System.TimeSpan Methods AddMeta<TV>(String, TV) Adds a new metadata. Declaration void AddMeta<TV>(string name, TV val) Parameters Type Name Description System.String name Metadata name. TV val Metadata value. Type Parameters Name Description TV Commit() Commits this transaction. Declaration void Commit() CommitAsync() Commits this transaction. Declaration Task CommitAsync() Returns Type Description System.Threading.Tasks.Task Meta<TV>(String) Gets metadata by name. Declaration TV Meta<TV>(string name) Parameters Type Name Description System.String name Metadata name. Returns Type Description TV Metadata value. Type Parameters Name Description TV Exceptions Type Condition System.Collections.Generic.KeyNotFoundException If metadata key was not found. RemoveMeta<TV>(String) Removes metadata by name. Declaration TV RemoveMeta<TV>(string name) Parameters Type Name Description System.String name Metadata name. Returns Type Description TV Value of removed metadata or default value for V type. Type Parameters Name Description TV Rollback() Rolls back this transaction. Declaration void Rollback() RollbackAsync() Rolls back this transaction. Declaration Task RollbackAsync() Returns Type Description System.Threading.Tasks.Task SetRollbackonly() Modify the transaction associated with the current thread such that the only possible outcome of the transaction is to roll back the transaction. Declaration bool SetRollbackonly() Returns Type Description System.Boolean True if rollback-only flag was set as a result of this operation, false if it was already set prior to this call or could not be set because transaction is already finishing up committing or rolling back."
  },
  "api/Apache.Ignite.Core.Transactions.ITransactionCollection.html": {
    "href": "api/Apache.Ignite.Core.Transactions.ITransactionCollection.html",
    "title": "Interface ITransactionCollection | Apache Ignite.NET",
    "keywords": "Interface ITransactionCollection Disposable readonly collection of ITransaction Inherited Members System.Collections.Generic.ICollection<Apache.Ignite.Core.Transactions.ITransaction>.Add(Apache.Ignite.Core.Transactions.ITransaction) System.Collections.Generic.ICollection<Apache.Ignite.Core.Transactions.ITransaction>.Clear() System.Collections.Generic.ICollection<Apache.Ignite.Core.Transactions.ITransaction>.Contains(Apache.Ignite.Core.Transactions.ITransaction) System.Collections.Generic.ICollection<Apache.Ignite.Core.Transactions.ITransaction>.CopyTo(Apache.Ignite.Core.Transactions.ITransaction[], System.Int32) System.Collections.Generic.ICollection<Apache.Ignite.Core.Transactions.ITransaction>.Remove(Apache.Ignite.Core.Transactions.ITransaction) System.Collections.Generic.ICollection<Apache.Ignite.Core.Transactions.ITransaction>.Count System.Collections.Generic.ICollection<Apache.Ignite.Core.Transactions.ITransaction>.IsReadOnly System.Collections.Generic.IEnumerable<Apache.Ignite.Core.Transactions.ITransaction>.GetEnumerator() System.IDisposable.Dispose() Namespace : Apache.Ignite.Core.Transactions Assembly : Apache.Ignite.Core.dll Syntax public interface ITransactionCollection : ICollection<ITransaction>, IEnumerable<ITransaction>, IEnumerable, IDisposable"
  },
  "api/Apache.Ignite.Linq.CacheLinqExtensions.html": {
    "href": "api/Apache.Ignite.Linq.CacheLinqExtensions.html",
    "title": "Class CacheLinqExtensions | Apache Ignite.NET",
    "keywords": "Class CacheLinqExtensions Extensions methods for ICache<TK, TV> . Inheritance System.Object CacheLinqExtensions Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Linq Assembly : Apache.Ignite.Linq.dll Syntax public static class CacheLinqExtensions Methods AsCacheQueryable<TKey, TValue>(ICache<TKey, TValue>) Gets an System.Linq.IQueryable<T> instance over this cache. Resulting query will be translated to cache SQL query and executed over the cache instance via Query(SqlFieldsQuery) . Result of this method (and subsequent query) can be cast to ICacheQueryable for introspection, or converted with ToCacheQueryable<T>(IQueryable<T>) extension method. Declaration public static IQueryable<ICacheEntry<TKey, TValue>> AsCacheQueryable<TKey, TValue>(this ICache<TKey, TValue> cache) Parameters Type Name Description ICache <TKey, TValue> cache The cache. Returns Type Description System.Linq.IQueryable < ICacheEntry <TKey, TValue>> System.Linq.IQueryable<T> instance over this cache. Type Parameters Name Description TKey The type of the key. TValue The type of the value. AsCacheQueryable<TKey, TValue>(ICache<TKey, TValue>, QueryOptions) Gets an System.Linq.IQueryable<T> instance over this cache. Resulting query will be translated to cache SQL query and executed over the cache instance via Query(SqlFieldsQuery) . depending on requested result. Result of this method (and subsequent query) can be cast to ICacheQueryable for introspection. Declaration public static IQueryable<ICacheEntry<TKey, TValue>> AsCacheQueryable<TKey, TValue>(this ICache<TKey, TValue> cache, QueryOptions queryOptions) Parameters Type Name Description ICache <TKey, TValue> cache The cache. QueryOptions queryOptions The query options. Returns Type Description System.Linq.IQueryable < ICacheEntry <TKey, TValue>> System.Linq.IQueryable<T> instance over this cache. Type Parameters Name Description TKey The type of the key. TValue The type of the value. AsCacheQueryable<TKey, TValue>(ICache<TKey, TValue>, Boolean) Gets an System.Linq.IQueryable<T> instance over this cache. Resulting query will be translated to cache SQL query and executed over the cache instance via Query(SqlFieldsQuery) . depending on requested result. Result of this method (and subsequent query) can be cast to ICacheQueryable for introspection. Declaration public static IQueryable<ICacheEntry<TKey, TValue>> AsCacheQueryable<TKey, TValue>(this ICache<TKey, TValue> cache, bool local) Parameters Type Name Description ICache <TKey, TValue> cache The cache. System.Boolean local Local flag. When set query will be executed only on local node, so only local entries will be returned as query result. Returns Type Description System.Linq.IQueryable < ICacheEntry <TKey, TValue>> System.Linq.IQueryable<T> instance over this cache. Type Parameters Name Description TKey The type of the key. TValue The type of the value. AsCacheQueryable<TKey, TValue>(ICache<TKey, TValue>, Boolean, String) Gets an System.Linq.IQueryable<T> instance over this cache. Resulting query will be translated to cache SQL query and executed over the cache instance via Query(SqlFieldsQuery) . depending on requested result. Result of this method (and subsequent query) can be cast to ICacheQueryable for introspection. Declaration public static IQueryable<ICacheEntry<TKey, TValue>> AsCacheQueryable<TKey, TValue>(this ICache<TKey, TValue> cache, bool local, string tableName) Parameters Type Name Description ICache <TKey, TValue> cache The cache. System.Boolean local Local flag. When set query will be executed only on local node, so only local entries will be returned as query result. System.String tableName Name of the table. Table name is equal to short class name of a cache value. When a cache has only one type of values, or only one QueryEntity defined, table name will be inferred and can be omitted. Returns Type Description System.Linq.IQueryable < ICacheEntry <TKey, TValue>> System.Linq.IQueryable<T> instance over this cache. Type Parameters Name Description TKey The type of the key. TValue The type of the value. RemoveAll<TKey, TValue>(IQueryable<ICacheEntry<TKey, TValue>>) Removes all rows that are matched by the specified query. This method results in \"DELETE FROM\" distributed SQL query, performing bulk delete (as opposed to fetching all rows locally). Declaration public static int RemoveAll<TKey, TValue>(this IQueryable<ICacheEntry<TKey, TValue>> query) Parameters Type Name Description System.Linq.IQueryable < ICacheEntry <TKey, TValue>> query The query. Returns Type Description System.Int32 Affected row count. Type Parameters Name Description TKey Key type. TValue Value type. RemoveAll<TKey, TValue>(IQueryable<ICacheEntry<TKey, TValue>>, Expression<Func<ICacheEntry<TKey, TValue>, Boolean>>) Deletes all rows that are matched by the specified query. This method results in \"DELETE FROM\" distributed SQL query, performing bulk delete (as opposed to fetching all rows locally). Declaration public static int RemoveAll<TKey, TValue>(this IQueryable<ICacheEntry<TKey, TValue>> query, Expression<Func<ICacheEntry<TKey, TValue>, bool>> predicate) Parameters Type Name Description System.Linq.IQueryable < ICacheEntry <TKey, TValue>> query The query. System.Linq.Expressions.Expression < System.Func < ICacheEntry <TKey, TValue>, System.Boolean >> predicate The predicate. Returns Type Description System.Int32 Affected row count. Type Parameters Name Description TKey Key type. TValue Value type. ToCacheQueryable<T>(IQueryable<T>) Casts this query to ICacheQueryable . Declaration public static ICacheQueryable ToCacheQueryable<T>(this IQueryable<T> query) Parameters Type Name Description System.Linq.IQueryable <T> query Returns Type Description ICacheQueryable Type Parameters Name Description T UpdateAll<TKey, TValue>(IQueryable<ICacheEntry<TKey, TValue>>, Expression<Func<IUpdateDescriptor<TKey, TValue>, IUpdateDescriptor<TKey, TValue>>>) Updates all rows that are matched by the specified query. This method results in \"UPDATE\" distributed SQL query, performing bulk update (as opposed to fetching all rows locally). Declaration public static int UpdateAll<TKey, TValue>(this IQueryable<ICacheEntry<TKey, TValue>> query, Expression<Func<IUpdateDescriptor<TKey, TValue>, IUpdateDescriptor<TKey, TValue>>> updateDescription) Parameters Type Name Description System.Linq.IQueryable < ICacheEntry <TKey, TValue>> query The query. System.Linq.Expressions.Expression < System.Func < IUpdateDescriptor <TKey, TValue>, IUpdateDescriptor <TKey, TValue>>> updateDescription The update description. Returns Type Description System.Int32 Affected row count. Type Parameters Name Description TKey Key type. TValue Value type."
  },
  "api/Apache.Ignite.Linq.CompiledQuery.html": {
    "href": "api/Apache.Ignite.Linq.CompiledQuery.html",
    "title": "Class CompiledQuery | Apache Ignite.NET",
    "keywords": "Class CompiledQuery Represents a compiled cache query. Inheritance System.Object CompiledQuery Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Linq Assembly : Apache.Ignite.Linq.dll Syntax public static class CompiledQuery Methods Compile<T>(Expression<Func<IQueryable<T>>>) Creates a new delegate that represents the compiled cache query. Declaration public static Func<IQueryCursor<T>> Compile<T>(Expression<Func<IQueryable<T>>> query) Parameters Type Name Description System.Linq.Expressions.Expression < System.Func < System.Linq.IQueryable <T>>> query The query to compile. Returns Type Description System.Func < IQueryCursor <T>> Delegate that represents the compiled cache query. Type Parameters Name Description T Compile<T>(IQueryable<T>) Creates a new delegate that represents the compiled cache query with any number of arguments. This method differs from other Compile methods in that it takes in ICacheQueryable directly, and returns a delegate that takes an array of parameters. It is up to the user to provide query arguments in correct order. This method also imposes no restrictions on where the query comes from (in contrary to other methods). Declaration public static CompiledQueryFunc<T> Compile<T>(IQueryable<T> query) Parameters Type Name Description System.Linq.IQueryable <T> query The query to compile. Returns Type Description CompiledQueryFunc <T> Delegate that represents the compiled cache query. Type Parameters Name Description T Compile<T, T1>(Expression<Func<T1, IQueryable<T>>>) Creates a new delegate that represents the compiled cache query. Declaration public static Func<T1, IQueryCursor<T>> Compile<T, T1>(Expression<Func<T1, IQueryable<T>>> query) Parameters Type Name Description System.Linq.Expressions.Expression < System.Func <T1, System.Linq.IQueryable <T>>> query The query to compile. Returns Type Description System.Func <T1, IQueryCursor <T>> Delegate that represents the compiled cache query. Type Parameters Name Description T T1 Compile<T, T1, T2>(Expression<Func<T1, T2, IQueryable<T>>>) Creates a new delegate that represents the compiled cache query. Declaration public static Func<T1, T2, IQueryCursor<T>> Compile<T, T1, T2>(Expression<Func<T1, T2, IQueryable<T>>> query) Parameters Type Name Description System.Linq.Expressions.Expression < System.Func <T1, T2, System.Linq.IQueryable <T>>> query The query to compile. Returns Type Description System.Func <T1, T2, IQueryCursor <T>> Delegate that represents the compiled cache query. Type Parameters Name Description T T1 T2 Compile<T, T1, T2, T3>(Expression<Func<T1, T2, T3, IQueryable<T>>>) Creates a new delegate that represents the compiled cache query. Declaration public static Func<T1, T2, T3, IQueryCursor<T>> Compile<T, T1, T2, T3>(Expression<Func<T1, T2, T3, IQueryable<T>>> query) Parameters Type Name Description System.Linq.Expressions.Expression < System.Func <T1, T2, T3, System.Linq.IQueryable <T>>> query The query to compile. Returns Type Description System.Func <T1, T2, T3, IQueryCursor <T>> Delegate that represents the compiled cache query. Type Parameters Name Description T T1 T2 T3 Compile<T, T1, T2, T3, T4>(Expression<Func<T1, T2, T3, T4, IQueryable<T>>>) Creates a new delegate that represents the compiled cache query. Declaration public static Func<T1, T2, T3, T4, IQueryCursor<T>> Compile<T, T1, T2, T3, T4>(Expression<Func<T1, T2, T3, T4, IQueryable<T>>> query) Parameters Type Name Description System.Linq.Expressions.Expression < System.Func <T1, T2, T3, T4, System.Linq.IQueryable <T>>> query The query to compile. Returns Type Description System.Func <T1, T2, T3, T4, IQueryCursor <T>> Delegate that represents the compiled cache query. Type Parameters Name Description T T1 T2 T3 T4 Compile<T, T1, T2, T3, T4, T5>(Expression<Func<T1, T2, T3, T4, T5, IQueryable<T>>>) Creates a new delegate that represents the compiled cache query. Declaration public static Func<T1, T2, T3, T4, T5, IQueryCursor<T>> Compile<T, T1, T2, T3, T4, T5>(Expression<Func<T1, T2, T3, T4, T5, IQueryable<T>>> query) Parameters Type Name Description System.Linq.Expressions.Expression < System.Func <T1, T2, T3, T4, T5, System.Linq.IQueryable <T>>> query The query to compile. Returns Type Description System.Func <T1, T2, T3, T4, T5, IQueryCursor <T>> Delegate that represents the compiled cache query. Type Parameters Name Description T T1 T2 T3 T4 T5 Compile<T, T1, T2, T3, T4, T5, T6>(Expression<Func<T1, T2, T3, T4, T5, T6, IQueryable<T>>>) Creates a new delegate that represents the compiled cache query. Declaration public static Func<T1, T2, T3, T4, T5, T6, IQueryCursor<T>> Compile<T, T1, T2, T3, T4, T5, T6>(Expression<Func<T1, T2, T3, T4, T5, T6, IQueryable<T>>> query) Parameters Type Name Description System.Linq.Expressions.Expression < System.Func <T1, T2, T3, T4, T5, T6, System.Linq.IQueryable <T>>> query The query to compile. Returns Type Description System.Func <T1, T2, T3, T4, T5, T6, IQueryCursor <T>> Delegate that represents the compiled cache query. Type Parameters Name Description T T1 T2 T3 T4 T5 T6 Compile<T, T1, T2, T3, T4, T5, T6, T7>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, IQueryable<T>>>) Creates a new delegate that represents the compiled cache query. Declaration public static Func<T1, T2, T3, T4, T5, T6, T7, IQueryCursor<T>> Compile<T, T1, T2, T3, T4, T5, T6, T7>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, IQueryable<T>>> query) Parameters Type Name Description System.Linq.Expressions.Expression < System.Func <T1, T2, T3, T4, T5, T6, T7, System.Linq.IQueryable <T>>> query The query to compile. Returns Type Description System.Func <T1, T2, T3, T4, T5, T6, T7, IQueryCursor <T>> Delegate that represents the compiled cache query. Type Parameters Name Description T T1 T2 T3 T4 T5 T6 T7 Compile<T, T1, T2, T3, T4, T5, T6, T7, T8>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, IQueryable<T>>>) Creates a new delegate that represents the compiled cache query. Declaration public static Func<T1, T2, T3, T4, T5, T6, T7, T8, IQueryCursor<T>> Compile<T, T1, T2, T3, T4, T5, T6, T7, T8>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, IQueryable<T>>> query) Parameters Type Name Description System.Linq.Expressions.Expression < System.Func <T1, T2, T3, T4, T5, T6, T7, T8, System.Linq.IQueryable <T>>> query The query to compile. Returns Type Description System.Func <T1, T2, T3, T4, T5, T6, T7, T8, IQueryCursor <T>> Delegate that represents the compiled cache query. Type Parameters Name Description T T1 T2 T3 T4 T5 T6 T7 T8"
  },
  "api/Apache.Ignite.Linq.CompiledQueryFunc-1.html": {
    "href": "api/Apache.Ignite.Linq.CompiledQueryFunc-1.html",
    "title": "Delegate CompiledQueryFunc<T> | Apache Ignite.NET",
    "keywords": "Delegate CompiledQueryFunc<T> Delegate for compiled query with arbitrary number of arguments. Namespace : Apache.Ignite.Linq Assembly : Apache.Ignite.Linq.dll Syntax public delegate IQueryCursor<T> CompiledQueryFunc<T>(params object[] args); Parameters Type Name Description System.Object [] args The arguments. Returns Type Description IQueryCursor <T> Query cursor. Type Parameters Name Description T Result type."
  },
  "api/Apache.Ignite.Linq.ICacheQueryable.html": {
    "href": "api/Apache.Ignite.Linq.ICacheQueryable.html",
    "title": "Interface ICacheQueryable | Apache Ignite.NET",
    "keywords": "Interface ICacheQueryable Common interface for cache queryables. Namespace : Apache.Ignite.Linq Assembly : Apache.Ignite.Linq.dll Syntax public interface ICacheQueryable Properties CacheName Gets the name of the cache that is associated with this query. Declaration string CacheName { get; } Property Value Type Description System.String The name of the cache. ElementType Gets the type of the element. Declaration Type ElementType { get; } Property Value Type Description System.Type Ignite Gets the Ignite instance associated with this query. Declaration [Obsolete(\"Deprecated, null for thin client.\")] IIgnite Ignite { get; } Property Value Type Description IIgnite Methods GetFieldsQuery() Returns fields query that represents current queryable. Declaration SqlFieldsQuery GetFieldsQuery() Returns Type Description SqlFieldsQuery Fields query that represents current queryable."
  },
  "api/Apache.Ignite.AspNet.html": {
    "href": "api/Apache.Ignite.AspNet.html",
    "title": "Namespace Apache.Ignite.AspNet | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.AspNet Classes IgniteOutputCacheProvider ASP.NET output cache provider that uses Ignite cache as a storage. You can either start Ignite yourself, and provide gridName attribute, or provide igniteConfigurationSectionName attribute to start Ignite automatically from specified configuration section (see IgniteConfigurationSection ) using igniteConfigurationSectionName . cacheName attribute specifies Ignite cache name to use for data storage. This attribute can be omitted if cache name is null. IgniteSessionStateStoreProvider ASP.NET Session-State Store Provider that uses Ignite distributed cache as an underlying storage. You can either start Ignite yourself, and provide gridName attribute, or provide igniteConfigurationSectionName attribute to start Ignite automatically from specified configuration section (see IgniteConfigurationSection ) using igniteConfigurationSectionName . cacheName attribute specifies Ignite cache name to use for data storage. This attribute can be omitted if cache name is null. Optional applicationId attribute allows sharing a single Ignite cache between multiple web applications. IgniteWebUtils Ignite web utilities."
  },
  "api/Apache.Ignite.Core.Binary.BinaryTypeNames.html": {
    "href": "api/Apache.Ignite.Core.Binary.BinaryTypeNames.html",
    "title": "Class BinaryTypeNames | Apache Ignite.NET",
    "keywords": "Class BinaryTypeNames Binary type name constants. Inheritance System.Object BinaryTypeNames Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Binary Assembly : Apache.Ignite.Core.dll Syntax public static class BinaryTypeNames Fields TypeNameArrayBool Type name: boolean array. Declaration public const string TypeNameArrayBool = \"boolean[]\" Field Value Type Description System.String TypeNameArrayByte Type name: byte array. Declaration public const string TypeNameArrayByte = \"byte[]\" Field Value Type Description System.String TypeNameArrayChar Type name: char array. Declaration public const string TypeNameArrayChar = \"char[]\" Field Value Type Description System.String TypeNameArrayDate Type name: timestamp array. Declaration public const string TypeNameArrayDate = \"Date[]\" Field Value Type Description System.String TypeNameArrayDecimal Type name: decimal array. Declaration public const string TypeNameArrayDecimal = \"decimal[]\" Field Value Type Description System.String TypeNameArrayDouble Type name: double array. Declaration public const string TypeNameArrayDouble = \"double[]\" Field Value Type Description System.String TypeNameArrayEnum Type name: Enum array. Declaration public const string TypeNameArrayEnum = \"Enum[]\" Field Value Type Description System.String TypeNameArrayFloat Type name: float array. Declaration public const string TypeNameArrayFloat = \"float[]\" Field Value Type Description System.String TypeNameArrayGuid Type name: UUID array. Declaration public const string TypeNameArrayGuid = \"UUID[]\" Field Value Type Description System.String TypeNameArrayInt Type name: int array. Declaration public const string TypeNameArrayInt = \"int[]\" Field Value Type Description System.String TypeNameArrayLong Type name: long array. Declaration public const string TypeNameArrayLong = \"long[]\" Field Value Type Description System.String TypeNameArrayObject Type name: Object array. Declaration public const string TypeNameArrayObject = \"Object[]\" Field Value Type Description System.String TypeNameArrayShort Type name: short array. Declaration public const string TypeNameArrayShort = \"short[]\" Field Value Type Description System.String TypeNameArrayString Type name: String array. Declaration public const string TypeNameArrayString = \"String[]\" Field Value Type Description System.String TypeNameArrayTimestamp Type name: timestamp array. Declaration public const string TypeNameArrayTimestamp = \"Timestamp[]\" Field Value Type Description System.String TypeNameBool Type name: boolean. Declaration public const string TypeNameBool = \"boolean\" Field Value Type Description System.String TypeNameByte Type name: byte. Declaration public const string TypeNameByte = \"byte\" Field Value Type Description System.String TypeNameChar Type name: char. Declaration public const string TypeNameChar = \"char\" Field Value Type Description System.String TypeNameCollection Type name: Collection. Declaration public const string TypeNameCollection = \"Collection\" Field Value Type Description System.String TypeNameDate Type name: date. Declaration public const string TypeNameDate = \"Date\" Field Value Type Description System.String TypeNameDecimal Type name: decimal. Declaration public const string TypeNameDecimal = \"decimal\" Field Value Type Description System.String TypeNameDouble Type name: double. Declaration public const string TypeNameDouble = \"double\" Field Value Type Description System.String TypeNameEnum Type name: Enum. Declaration public const string TypeNameEnum = \"Enum\" Field Value Type Description System.String TypeNameFloat Type name: float. Declaration public const string TypeNameFloat = \"float\" Field Value Type Description System.String TypeNameGuid Type name: UUID. Declaration public const string TypeNameGuid = \"UUID\" Field Value Type Description System.String TypeNameInt Type name: int. Declaration public const string TypeNameInt = \"int\" Field Value Type Description System.String TypeNameLong Type name: long. Declaration public const string TypeNameLong = \"long\" Field Value Type Description System.String TypeNameMap Type name: Map. Declaration public const string TypeNameMap = \"Map\" Field Value Type Description System.String TypeNameObject Type name: Object. Declaration public const string TypeNameObject = \"Object\" Field Value Type Description System.String TypeNameShort Type name: short. Declaration public const string TypeNameShort = \"short\" Field Value Type Description System.String TypeNameString Type name: String. Declaration public const string TypeNameString = \"String\" Field Value Type Description System.String TypeNameTimestamp Type name: timestamp. Declaration public const string TypeNameTimestamp = \"Timestamp\" Field Value Type Description System.String"
  },
  "api/Apache.Ignite.Core.Binary.IBinaryRawWriter.html": {
    "href": "api/Apache.Ignite.Core.Binary.IBinaryRawWriter.html",
    "title": "Interface IBinaryRawWriter | Apache Ignite.NET",
    "keywords": "Interface IBinaryRawWriter Raw writer for binary objects. Namespace : Apache.Ignite.Core.Binary Assembly : Apache.Ignite.Core.dll Syntax public interface IBinaryRawWriter Methods WriteArray<T>(T[]) Write object array. Declaration void WriteArray<T>(T[] val) Parameters Type Name Description T[] val Object array. Type Parameters Name Description T WriteBoolean(Boolean) Write boolean value. Declaration void WriteBoolean(bool val) Parameters Type Name Description System.Boolean val Boolean value. WriteBooleanArray(Boolean[]) Write boolean array. Declaration void WriteBooleanArray(bool[] val) Parameters Type Name Description System.Boolean [] val Boolean array. WriteByte(Byte) Write byte value. Declaration void WriteByte(byte val) Parameters Type Name Description System.Byte val Byte value. WriteByteArray(Byte[]) Write byte array. Declaration void WriteByteArray(byte[] val) Parameters Type Name Description System.Byte [] val Byte array. WriteChar(Char) Write char value. Declaration void WriteChar(char val) Parameters Type Name Description System.Char val Char value. WriteCharArray(Char[]) Write char array. Declaration void WriteCharArray(char[] val) Parameters Type Name Description System.Char [] val Char array. WriteCollection(ICollection) Writes a collection in interoperable form. Use this method to communicate with other platforms or with nodes that need to read collection elements in binary form. When there is no need for binarization or interoperability, please use WriteObject<T>(T) , which will properly preserve generic collection type. Declaration void WriteCollection(ICollection val) Parameters Type Name Description System.Collections.ICollection val Collection. WriteDecimal(Nullable<Decimal>) Write decimal value. Declaration void WriteDecimal(decimal ? val) Parameters Type Name Description System.Nullable < System.Decimal > val Decimal value. WriteDecimalArray(Nullable<Decimal>[]) Write decimal array. Declaration void WriteDecimalArray(decimal ? [] val) Parameters Type Name Description System.Nullable < System.Decimal >[] val Decimal array. WriteDictionary(IDictionary) Writes a dictionary in interoperable form. Use this method to communicate with other platforms or with nodes that need to read dictionary elements in binary form. When there is no need for binarization or interoperability, please use WriteObject<T>(T) , which will properly preserve generic dictionary type. Declaration void WriteDictionary(IDictionary val) Parameters Type Name Description System.Collections.IDictionary val Dictionary. WriteDouble(Double) Write double value. Declaration void WriteDouble(double val) Parameters Type Name Description System.Double val Double value. WriteDoubleArray(Double[]) Write double array. Declaration void WriteDoubleArray(double[] val) Parameters Type Name Description System.Double [] val Double array. WriteEnum<T>(T) Write enum value. Declaration void WriteEnum<T>(T val) Parameters Type Name Description T val Enum value. Type Parameters Name Description T WriteEnumArray<T>(T[]) Write enum array. Declaration void WriteEnumArray<T>(T[] val) Parameters Type Name Description T[] val Enum array. Type Parameters Name Description T WriteFloat(Single) Write float value. Declaration void WriteFloat(float val) Parameters Type Name Description System.Single val Float value. WriteFloatArray(Single[]) Write float array. Declaration void WriteFloatArray(float[] val) Parameters Type Name Description System.Single [] val Float array. WriteGuid(Nullable<Guid>) Write GUID value. Declaration void WriteGuid(Guid? val) Parameters Type Name Description System.Nullable < System.Guid > val GUID value. WriteGuidArray(Nullable<Guid>[]) Write GUID array. Declaration void WriteGuidArray(Guid? [] val) Parameters Type Name Description System.Nullable < System.Guid >[] val GUID array. WriteInt(Int32) Write int value. Declaration void WriteInt(int val) Parameters Type Name Description System.Int32 val Int value. WriteIntArray(Int32[]) Write int array. Declaration void WriteIntArray(int[] val) Parameters Type Name Description System.Int32 [] val Int array. WriteLong(Int64) Write long value. Declaration void WriteLong(long val) Parameters Type Name Description System.Int64 val Long value. WriteLongArray(Int64[]) Write long array. Declaration void WriteLongArray(long[] val) Parameters Type Name Description System.Int64 [] val Long array. WriteObject<T>(T) Write object value. Declaration void WriteObject<T>(T val) Parameters Type Name Description T val Object value. Type Parameters Name Description T WriteShort(Int16) Write short value. Declaration void WriteShort(short val) Parameters Type Name Description System.Int16 val Short value. WriteShortArray(Int16[]) Write short array. Declaration void WriteShortArray(short[] val) Parameters Type Name Description System.Int16 [] val Short array. WriteString(String) Write string value. Declaration void WriteString(string val) Parameters Type Name Description System.String val String value. WriteStringArray(String[]) Write string array. Declaration void WriteStringArray(string[] val) Parameters Type Name Description System.String [] val String array. WriteTimestamp(Nullable<DateTime>) Write date value. Declaration void WriteTimestamp(DateTime? val) Parameters Type Name Description System.Nullable < System.DateTime > val Date value. WriteTimestampArray(Nullable<DateTime>[]) Write date array. Declaration void WriteTimestampArray(DateTime? [] val) Parameters Type Name Description System.Nullable < System.DateTime >[] val Date array."
  },
  "api/Apache.Ignite.Core.Cache.Affinity.AffinityFunctionBase.html": {
    "href": "api/Apache.Ignite.Core.Cache.Affinity.AffinityFunctionBase.html",
    "title": "Class AffinityFunctionBase | Apache Ignite.NET",
    "keywords": "Class AffinityFunctionBase Base class for predefined affinity functions. Inheritance System.Object AffinityFunctionBase RendezvousAffinityFunction Implements IAffinityFunction Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Affinity Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public abstract class AffinityFunctionBase : IAffinityFunction Fields DefaultPartitions The default value for Partitions property. Declaration public const int DefaultPartitions = 1024 Field Value Type Description System.Int32 Properties ExcludeNeighbors Gets or sets a value indicating whether to exclude same-host-neighbors from being backups of each other. Declaration public virtual bool ExcludeNeighbors { get; set; } Property Value Type Description System.Boolean Partitions Gets or sets the total number of partitions. Declaration public virtual int Partitions { get; set; } Property Value Type Description System.Int32 Methods AssignPartitions(AffinityFunctionContext) Gets affinity nodes for a partition. In case of replicated cache, all returned nodes are updated in the same manner. In case of partitioned cache, the returned list should contain only the primary and back up nodes with primary node being always first. Note that partitioned affinity must obey the following contract: given that node N is primary for some key K , if any other node(s) leave grid and no node joins grid, node N will remain primary for key K . Declaration public virtual IEnumerable<IEnumerable<IClusterNode>> AssignPartitions(AffinityFunctionContext context) Parameters Type Name Description AffinityFunctionContext context The affinity function context. Returns Type Description System.Collections.Generic.IEnumerable < System.Collections.Generic.IEnumerable < IClusterNode >> A collection of partitions, where each partition is a collection of nodes, where first node is a primary node, and other nodes are backup nodes. GetPartition(Object) Gets partition number for a given key starting from 0. Partitioned caches should make sure that keys are about evenly distributed across all partitions from 0 to Partitions for best performance. Note that for fully replicated caches it is possible to segment key sets among different grid node groups. In that case each node group should return a unique partition number. However, unlike partitioned cache, mappings of keys to nodes in replicated caches are constant and a node cannot migrate from one partition to another. Declaration public virtual int GetPartition(object key) Parameters Type Name Description System.Object key Key to get partition for. Returns Type Description System.Int32 Partition number for a given key. RemoveNode(Guid) Removes node from affinity. This method is called when it is safe to remove disconnected node from affinity mapping. Declaration public virtual void RemoveNode(Guid nodeId) Parameters Type Name Description System.Guid nodeId The node identifier. Implements IAffinityFunction"
  },
  "api/Apache.Ignite.Core.Cache.Affinity.Rendezvous.RendezvousAffinityFunction.html": {
    "href": "api/Apache.Ignite.Core.Cache.Affinity.Rendezvous.RendezvousAffinityFunction.html",
    "title": "Class RendezvousAffinityFunction | Apache Ignite.NET",
    "keywords": "Class RendezvousAffinityFunction Affinity function for partitioned cache based on Highest Random Weight algorithm. Inheritance System.Object AffinityFunctionBase RendezvousAffinityFunction Implements IAffinityFunction Inherited Members AffinityFunctionBase.DefaultPartitions AffinityFunctionBase.Partitions AffinityFunctionBase.GetPartition(Object) AffinityFunctionBase.RemoveNode(Guid) AffinityFunctionBase.AssignPartitions(AffinityFunctionContext) AffinityFunctionBase.ExcludeNeighbors System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Affinity.Rendezvous Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class RendezvousAffinityFunction : AffinityFunctionBase, IAffinityFunction Implements IAffinityFunction"
  },
  "api/Apache.Ignite.Core.Cache.CachePeekMode.html": {
    "href": "api/Apache.Ignite.Core.Cache.CachePeekMode.html",
    "title": "Enum CachePeekMode | Apache Ignite.NET",
    "keywords": "Enum CachePeekMode Enumeration of all supported cache peek modes. Namespace : Apache.Ignite.Core.Cache Assembly : Apache.Ignite.Core.dll Syntax [Flags] public enum CachePeekMode Fields Name Description All Peeks into all available cache storages. Backup Peek value from backup copies of partitioned cache only (skip near cache). In case of LOCAL cache, behaves as All mode. Near Peek into near cache only (don't peek into partitioned cache). In case of LOCAL cache, behaves as All mode. Offheap Peeks value from the off-heap storage only, without loading off-heap value into cache. Onheap Peeks value from the on-heap storage only. Platform Peeks value from local native .NET cache (see PlatformCacheConfiguration ). Primary Peek value from primary copy of partitioned cache only (skip near cache). In case of LOCAL cache, behaves as All mode."
  },
  "api/Apache.Ignite.Core.Cache.Configuration.CacheRebalanceMode.html": {
    "href": "api/Apache.Ignite.Core.Cache.Configuration.CacheRebalanceMode.html",
    "title": "Enum CacheRebalanceMode | Apache Ignite.NET",
    "keywords": "Enum CacheRebalanceMode Cache rebalance mode. When rebalancing is enabled (i.e. has value other than None ), distributed caches will attempt to rebalance all necessary values from other grid nodes. Replicated caches will try to load the full set of cache entries from other nodes, while partitioned caches will only load the entries for which current node is primary or backup. Note that rebalance mode only makes sense for Replicated and Partitioned caches. Caches with Local mode are local by definition and therefore cannot rebalance any values from neighboring nodes. Namespace : Apache.Ignite.Core.Cache.Configuration Assembly : Apache.Ignite.Core.dll Syntax public enum CacheRebalanceMode Fields Name Description Async Asynchronous rebalance mode. Distributed caches will start immediately and will load all necessary data from other available grid nodes in the background. None In this mode no rebalancing will take place which means that caches will be either loaded on demand from persistent store whenever data is accessed, or will be populated explicitly. Sync Synchronous rebalance mode. Distributed caches will not start until all necessary data is loaded from other available grid nodes."
  },
  "api/Apache.Ignite.Core.Cache.Configuration.QueryAlias.html": {
    "href": "api/Apache.Ignite.Core.Cache.Configuration.QueryAlias.html",
    "title": "Class QueryAlias | Apache Ignite.NET",
    "keywords": "Class QueryAlias Represents cache query configuration alias. Inheritance System.Object QueryAlias Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Configuration Assembly : Apache.Ignite.Core.dll Syntax public class QueryAlias Constructors QueryAlias() Initializes a new instance of the QueryAlias class. Declaration public QueryAlias() QueryAlias(String, String) Initializes a new instance of the QueryAlias class. Declaration public QueryAlias(string fullName, string alias) Parameters Type Name Description System.String fullName The full name. System.String alias The alias. Properties Alias Gets or sets the alias for the full name. Declaration public string Alias { get; set; } Property Value Type Description System.String FullName Gets or sets the full name of the query field. Declaration public string FullName { get; set; } Property Value Type Description System.String"
  },
  "api/Apache.Ignite.Core.Cache.Configuration.QuerySqlFieldAttribute.html": {
    "href": "api/Apache.Ignite.Core.Cache.Configuration.QuerySqlFieldAttribute.html",
    "title": "Class QuerySqlFieldAttribute | Apache Ignite.NET",
    "keywords": "Class QuerySqlFieldAttribute Marks field or property for SQL queries. Using this attribute is an alternative to Fields in CacheConfiguration . Inheritance System.Object System.Attribute QuerySqlFieldAttribute Implements System.Runtime.InteropServices._Attribute Inherited Members System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Boolean) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Boolean) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Module) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.IsDefined(System.Reflection.Module, System.Type) System.Attribute.IsDefined(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Boolean) System.Attribute.IsDefined(System.Reflection.Assembly, System.Type) System.Attribute.IsDefined(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.Equals(System.Object) System.Attribute.GetHashCode() System.Attribute.Match(System.Object) System.Attribute.IsDefaultAttribute() System.Attribute.System.Runtime.InteropServices._Attribute.GetTypeInfoCount(System.UInt32) System.Attribute.System.Runtime.InteropServices._Attribute.GetTypeInfo(System.UInt32, System.UInt32, System.IntPtr) System.Attribute.System.Runtime.InteropServices._Attribute.GetIDsOfNames(System.Guid, System.IntPtr, System.UInt32, System.UInt32, System.IntPtr) System.Attribute.System.Runtime.InteropServices._Attribute.Invoke(System.UInt32, System.Guid, System.UInt32, System.Int16, System.IntPtr, System.IntPtr, System.IntPtr, System.IntPtr) System.Attribute.TypeId System.Object.ToString() System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Configuration Assembly : Apache.Ignite.Core.dll Syntax [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)] public sealed class QuerySqlFieldAttribute : Attribute, _Attribute Constructors QuerySqlFieldAttribute() Initializes a new instance of the QuerySqlFieldAttribute class. Declaration public QuerySqlFieldAttribute() Properties DefaultValue Gets or sets the default value for the field (has effect when inserting with DML). Declaration public object DefaultValue { get; set; } Property Value Type Description System.Object IndexGroups Gets or sets the collection of index groups this field belongs to. Groups are used for compound indexes, whenever index should be created on more than one field. All fields within the same group will belong to the same index. Declaration public string[] IndexGroups { get; set; } Property Value Type Description System.String [] IndexInlineSize Gets or sets the index inline size, see InlineSize . Declaration public int IndexInlineSize { get; set; } Property Value Type Description System.Int32 IsDescending Gets or sets a value indicating whether index for this field should be descending. Ignored when IsIndexed is false . Declaration public bool IsDescending { get; set; } Property Value Type Description System.Boolean IsIndexed Gets or sets a value indicating whether corresponding field should be indexed. Just like with databases, field indexing may require additional overhead during updates, but makes select operations faster. Declaration public bool IsIndexed { get; set; } Property Value Type Description System.Boolean Name Gets or sets the sql field name. If not provided, property or field name will be used. Declaration public string Name { get; set; } Property Value Type Description System.String NotNull Gets or sets a value indicating whether null values are allowed for this field. Declaration public bool NotNull { get; set; } Property Value Type Description System.Boolean Precision Gets or sets the precision for the field. Declaration public int Precision { get; set; } Property Value Type Description System.Int32 Scale Gets or sets the scale for the field. Declaration public int Scale { get; set; } Property Value Type Description System.Int32 Implements System.Runtime.InteropServices._Attribute"
  },
  "api/Apache.Ignite.Core.Cache.Configuration.QueryTextFieldAttribute.html": {
    "href": "api/Apache.Ignite.Core.Cache.Configuration.QueryTextFieldAttribute.html",
    "title": "Class QueryTextFieldAttribute | Apache Ignite.NET",
    "keywords": "Class QueryTextFieldAttribute Marks field or property for Text queries. Using this attribute is an alternative to Fields in CacheConfiguration . Inheritance System.Object System.Attribute QueryTextFieldAttribute Implements System.Runtime.InteropServices._Attribute Inherited Members System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Boolean) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Boolean) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Module) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.IsDefined(System.Reflection.Module, System.Type) System.Attribute.IsDefined(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Boolean) System.Attribute.IsDefined(System.Reflection.Assembly, System.Type) System.Attribute.IsDefined(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.Equals(System.Object) System.Attribute.GetHashCode() System.Attribute.Match(System.Object) System.Attribute.IsDefaultAttribute() System.Attribute.System.Runtime.InteropServices._Attribute.GetTypeInfoCount(System.UInt32) System.Attribute.System.Runtime.InteropServices._Attribute.GetTypeInfo(System.UInt32, System.UInt32, System.IntPtr) System.Attribute.System.Runtime.InteropServices._Attribute.GetIDsOfNames(System.Guid, System.IntPtr, System.UInt32, System.UInt32, System.IntPtr) System.Attribute.System.Runtime.InteropServices._Attribute.Invoke(System.UInt32, System.Guid, System.UInt32, System.Int16, System.IntPtr, System.IntPtr, System.IntPtr, System.IntPtr) System.Attribute.TypeId System.Object.ToString() System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Configuration Assembly : Apache.Ignite.Core.dll Syntax [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)] public sealed class QueryTextFieldAttribute : Attribute, _Attribute Properties Name Gets or sets the text field name. If not provided, property or field name will be used. Declaration public string Name { get; set; } Property Value Type Description System.String Implements System.Runtime.InteropServices._Attribute"
  },
  "api/Apache.Ignite.Core.Cache.Expiry.ExpiryPolicy.html": {
    "href": "api/Apache.Ignite.Core.Cache.Expiry.ExpiryPolicy.html",
    "title": "Class ExpiryPolicy | Apache Ignite.NET",
    "keywords": "Class ExpiryPolicy Default expiry policy implementation with all durations defined explicitly. Inheritance System.Object ExpiryPolicy Implements IExpiryPolicy Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Expiry Assembly : Apache.Ignite.Core.dll Syntax public class ExpiryPolicy : IExpiryPolicy Constructors ExpiryPolicy(Nullable<TimeSpan>, Nullable<TimeSpan>, Nullable<TimeSpan>) Constructor. Declaration public ExpiryPolicy(TimeSpan? create, TimeSpan? update, TimeSpan? access) Parameters Type Name Description System.Nullable < System.TimeSpan > create Expiry for create. System.Nullable < System.TimeSpan > update Expiry for udpate. System.Nullable < System.TimeSpan > access Expiry for access. Methods GetExpiryForAccess() Gets expiry for access operation. If TimeSpan.ZERO is returned, cache entry is considered immediately expired. If null is returned, no change to previously understood expiry is performed. Declaration public TimeSpan? GetExpiryForAccess() Returns Type Description System.Nullable < System.TimeSpan > Expiry for access operation. GetExpiryForCreate() Gets expiry for create operation. If TimeSpan.ZERO is returned, cache entry is considered immediately expired and will not be added to cache. If null is returned, no change to previously understood expiry is performed. Declaration public TimeSpan? GetExpiryForCreate() Returns Type Description System.Nullable < System.TimeSpan > Expiry for create opeartion. GetExpiryForUpdate() Gets expiry for update operation. If TimeSpan.ZERO is returned, cache entry is considered immediately expired. If null is returned, no change to previously understood expiry is performed. Declaration public TimeSpan? GetExpiryForUpdate() Returns Type Description System.Nullable < System.TimeSpan > Expiry for update operation. Implements IExpiryPolicy"
  },
  "api/Apache.Ignite.Core.Cache.Expiry.IExpiryPolicy.html": {
    "href": "api/Apache.Ignite.Core.Cache.Expiry.IExpiryPolicy.html",
    "title": "Interface IExpiryPolicy | Apache Ignite.NET",
    "keywords": "Interface IExpiryPolicy Defines functions to determine when cache entries will expire based on creation, access and modification operations. Namespace : Apache.Ignite.Core.Cache.Expiry Assembly : Apache.Ignite.Core.dll Syntax public interface IExpiryPolicy Methods GetExpiryForAccess() Gets expiry for access operation. If TimeSpan.ZERO is returned, cache entry is considered immediately expired. If null is returned, no change to previously understood expiry is performed. Declaration TimeSpan? GetExpiryForAccess() Returns Type Description System.Nullable < System.TimeSpan > Expiry for access operation. GetExpiryForCreate() Gets expiry for create operation. If TimeSpan.ZERO is returned, cache entry is considered immediately expired and will not be added to cache. If null is returned, no change to previously understood expiry is performed. Declaration TimeSpan? GetExpiryForCreate() Returns Type Description System.Nullable < System.TimeSpan > Expiry for create opeartion. GetExpiryForUpdate() Gets expiry for update operation. If TimeSpan.ZERO is returned, cache entry is considered immediately expired. If null is returned, no change to previously understood expiry is performed. Declaration TimeSpan? GetExpiryForUpdate() Returns Type Description System.Nullable < System.TimeSpan > Expiry for update operation."
  },
  "api/Apache.Ignite.Core.Cache.Query.Continuous.IContinuousQueryHandleFields.html": {
    "href": "api/Apache.Ignite.Core.Cache.Query.Continuous.IContinuousQueryHandleFields.html",
    "title": "Interface IContinuousQueryHandleFields | Apache Ignite.NET",
    "keywords": "Interface IContinuousQueryHandleFields Represents a continuous query handle for SqlFieldsQuery used as initial query. Inherited Members System.IDisposable.Dispose() Namespace : Apache.Ignite.Core.Cache.Query.Continuous Assembly : Apache.Ignite.Core.dll Syntax public interface IContinuousQueryHandleFields : IContinuousQueryHandle, IDisposable Methods GetInitialQueryCursor() Gets the initial query cursor. Can be called only once, throws exception on consequent calls. Declaration IFieldsQueryCursor GetInitialQueryCursor() Returns Type Description IFieldsQueryCursor Initial query cursor."
  },
  "api/Apache.Ignite.Core.Cache.Query.Continuous.html": {
    "href": "api/Apache.Ignite.Core.Cache.Query.Continuous.html",
    "title": "Namespace Apache.Ignite.Core.Cache.Query.Continuous | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Cache.Query.Continuous Classes ContinuousQuery Continuous query base class, see ContinuousQuery<TK, TV> . ContinuousQuery<TK, TV> API for configuring continuous cache queries. Continuous queries allow to register a remote and a listener for cache update events. If an update event passes the filter, it will be sent to the node that executed the query and listener will be notified on that node. Continuous query can either be executed on the whole topology or only on local node. In case query is distributed and a new node joins, it will get the filter for the query during discovery process before it actually joins topology, so no updates will be missed. To execute the query use method QueryContinuous(ContinuousQuery<TK, TV>) . ContinuousQueryExtensions Extensions for continuous queries. Interfaces IContinuousQueryHandle Represents a continuous query handle. IContinuousQueryHandle<T> Represents a continuous query handle. IContinuousQueryHandleFields Represents a continuous query handle for SqlFieldsQuery used as initial query."
  },
  "api/Apache.Ignite.Core.Cache.html": {
    "href": "api/Apache.Ignite.Core.Cache.html",
    "title": "Namespace Apache.Ignite.Core.Cache | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Cache Classes CacheEntryProcessorException An exception to indicate a problem occurred attempting to execute an ICacheEntryProcessor<TK, TV, TArg, TRes> against an entry. CacheException Indicates an error during Cache operation. CachePartialUpdateException Exception thrown from non-transactional cache in case when update succeeded only partially. Structs CacheResult<T> Represents a cache operation result with a success flag. Interfaces ICache<TK, TV> Main entry point for Ignite cache APIs. You can get a named cache by calling GetCache<TK, TV>(String) method. Cache API supports distributed transactions. All Get(...) , Put(...) , Replace(...) , and Remove(...) operations are transactional and will participate in an ongoing transaction, if any. Other methods like Peek(...) or various Contains(...) methods may be transaction-aware, i.e. check in-transaction entries first, but will not affect the current state of transaction. See ITransaction documentation for more information about transactions. Neither null keys or values are allowed to be stored in cache. If a null value happens to be in cache (e.g. after invalidation or remove), then cache will treat this case as there is no value at all. Note that cache is generic and you can only work with provided key and value types. If cache also contains keys or values of other types, any attempt to retrieve them will result in System.InvalidCastException . Use ICache<TK, TV> in order to work with entries of arbitrary types. All members are thread-safe and may be used concurrently from multiple threads. ICacheAffinity Provides affinity information to detect which node is primary and which nodes are backups for a partitioned cache. You can get an instance of this interface by calling GetAffinity(String) method. Mapping of a key to a node is a three-step operation. First step will get an affinity key for given key using CacheAffinityKeyMapper . If mapper is not specified, the original key will be used. Second step will map affinity key to partition using CacheAffinityFunction.partition(Object) method. Third step will map obtained partition to nodes for current grid topology version. Interface provides various mapKeysToNodes(...) methods which provide node affinity mapping for given keys. All mapKeysToNodes(...) methods are not transactional and will not enlist keys into ongoing transaction. All members are thread-safe and may be used concurrently from multiple threads. ICacheEntry<TK, TV> Cache entry interface. ICacheEntryFilter<TK, TV> Cache entry predicate. ICacheEntryProcessor<TK, TV, TArg, TRes> An invocable function that allows applications to perform compound operations on a cache entry atomically, according the defined consistency of a cache. Any cache entry mutations will not take effect until after the Process(IMutableCacheEntry<TK, TV>, TArg) method has completedS execution. If an exception is thrown by an entry processor, a Caching Implementation must wrap any exception thrown wrapped in an CacheEntryProcessorException If this occurs no mutations will be made to the cache entry. ICacheEntryProcessorResult<TK, T> Represents a result of processing ICacheEntry<TK, TV> by ICacheEntryProcessor<TK, TV, TArg, TRes> . ICacheLock Cache locking interface. All members are thread-safe and may be used concurrently from multiple threads. ICacheMetrics Cache metrics used to obtain statistics on cache itself. IMemoryMetrics Memory usage metrics. Obsolete, use IDataRegionMetrics . IMutableCacheEntry<TK, TV> Mutable representation of ICacheEntry<TK, TV> IQueryMetrics Cache query metrics used to obtain statistics on query. Enums CachePeekMode Enumeration of all supported cache peek modes."
  },
  "api/Apache.Ignite.Core.Client.Cache.CacheClientConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Client.Cache.CacheClientConfiguration.html",
    "title": "Class CacheClientConfiguration | Apache Ignite.NET",
    "keywords": "Class CacheClientConfiguration Ignite client cache configuration. Same thing as CacheConfiguration , but with a subset of properties that can be accessed from Ignite thin client (see IIgniteClient ). Note that caches created from server nodes can be accessed from thin client, and vice versa. The only difference is that thin client can not read or write certain CacheConfiguration properties, so a separate class exists to make it clear which properties can be used. Inheritance System.Object CacheClientConfiguration Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Client.Cache Assembly : Apache.Ignite.Core.dll Syntax public class CacheClientConfiguration Constructors CacheClientConfiguration() Initializes a new instance of the CacheConfiguration class. Declaration public CacheClientConfiguration() CacheClientConfiguration(CacheConfiguration, Boolean) Initializes a new instance of the CacheClientConfiguration class, copying properties from provided server cache configuration. See also ToCacheConfiguration() . Declaration public CacheClientConfiguration(CacheConfiguration cacheConfiguration, bool ignoreUnsupportedProperties) Parameters Type Name Description CacheConfiguration cacheConfiguration Server cache configuration. System.Boolean ignoreUnsupportedProperties If set to true , ignores unsupported properties instead of throwing an exception. CacheClientConfiguration(CacheClientConfiguration) Initializes a new instance of the CacheConfiguration class, performing a deep copy of specified cache configuration. Declaration public CacheClientConfiguration(CacheClientConfiguration other) Parameters Type Name Description CacheClientConfiguration other The other configuration to perfrom deep copy from. CacheClientConfiguration(String) Initializes a new instance of the CacheConfiguration class. Declaration public CacheClientConfiguration(string name) Parameters Type Name Description System.String name Cache name. CacheClientConfiguration(String, QueryEntity[]) Initializes a new instance of the CacheConfiguration class. Declaration public CacheClientConfiguration(string name, params QueryEntity[] queryEntities) Parameters Type Name Description System.String name Cache name. QueryEntity [] queryEntities Query entities. CacheClientConfiguration(String, Type[]) Initializes a new instance of the CacheConfiguration class and populates QueryEntities according to provided query types. Declaration public CacheClientConfiguration(string name, params Type[] queryTypes) Parameters Type Name Description System.String name Cache name. System.Type [] queryTypes Collection of types to be registered as query entities. These types should use QuerySqlFieldAttribute to configure query fields and properties. Properties AtomicityMode Gets or sets cache atomicity mode. Declaration public CacheAtomicityMode AtomicityMode { get; set; } Property Value Type Description CacheAtomicityMode Backups Gets or sets number of nodes used to back up single partition for Partitioned cache. Declaration public int Backups { get; set; } Property Value Type Description System.Int32 CacheMode Gets or sets caching mode to use. Declaration public CacheMode CacheMode { get; set; } Property Value Type Description CacheMode CopyOnRead Gets or sets flag indicating whether copy of the value stored in cache should be created for cache operation implying return value. Declaration public bool CopyOnRead { get; set; } Property Value Type Description System.Boolean DataRegionName Gets or sets the name of the data region, see DataRegionConfiguration . Declaration public string DataRegionName { get; set; } Property Value Type Description System.String EagerTtl Gets or sets flag indicating whether expired cache entries will be eagerly removed from cache. When set to false, expired entries will be removed on next entry access. Declaration public bool EagerTtl { get; set; } Property Value Type Description System.Boolean EnableStatistics Gets or sets a value indicating whether statistics gathering is enabled on a cache. These statistics can be retrieved via GetMetrics() . Declaration public bool EnableStatistics { get; set; } Property Value Type Description System.Boolean ExpiryPolicyFactory Gets or sets the factory for IExpiryPolicy to be used for all cache operations, unless WithExpiryPolicy(IExpiryPolicy) is called. Default is null, which means no expiration. Declaration public IFactory<IExpiryPolicy> ExpiryPolicyFactory { get; set; } Property Value Type Description IFactory < IExpiryPolicy > GroupName Gets or sets the cache group name. Caches with the same group name share single underlying 'physical' cache (partition set), but are logically isolated. Since underlying cache is shared, the following configuration properties should be the same within group: CacheMode , PartitionLossPolicy , DataRegionName . Grouping caches reduces overall overhead, since internal data structures are shared. Declaration public string GroupName { get; set; } Property Value Type Description System.String KeyConfiguration Gets or sets the key configuration. Declaration public ICollection<CacheKeyConfiguration> KeyConfiguration { get; set; } Property Value Type Description System.Collections.Generic.ICollection < CacheKeyConfiguration > LockTimeout Gets or sets default lock acquisition timeout. Declaration public TimeSpan LockTimeout { get; set; } Property Value Type Description System.TimeSpan MaxConcurrentAsyncOperations Gets or sets maximum number of allowed concurrent asynchronous operations, 0 for unlimited. Declaration public int MaxConcurrentAsyncOperations { get; set; } Property Value Type Description System.Int32 MaxQueryIteratorsCount Gets or sets the maximum number of active query iterators. Declaration public int MaxQueryIteratorsCount { get; set; } Property Value Type Description System.Int32 Name Gets or sets the cache name. Declaration public string Name { get; set; } Property Value Type Description System.String OnheapCacheEnabled Gets or sets a value indicating whether on-heap cache is enabled for the off-heap based page memory. Declaration public bool OnheapCacheEnabled { get; set; } Property Value Type Description System.Boolean PartitionLossPolicy Gets or sets the partition loss policy. This policy defines how Ignite will react to a situation when all nodes for some partition leave the cluster. Declaration public PartitionLossPolicy PartitionLossPolicy { get; set; } Property Value Type Description PartitionLossPolicy QueryDetailMetricsSize Gets or sets the size of the query detail metrics to be stored in memory. 0 means disabled metrics. Declaration public int QueryDetailMetricsSize { get; set; } Property Value Type Description System.Int32 QueryEntities Gets or sets the query entity configuration. Declaration public ICollection<QueryEntity> QueryEntities { get; set; } Property Value Type Description System.Collections.Generic.ICollection < QueryEntity > QueryParallelism Gets or sets the desired query parallelism within a single node. Query executor may or may not use this hint, depending on estimated query cost. Default is DefaultQueryParallelism . Declaration public int QueryParallelism { get; set; } Property Value Type Description System.Int32 ReadFromBackup Gets or sets flag indicating whether data can be read from backup. Declaration public bool ReadFromBackup { get; set; } Property Value Type Description System.Boolean RebalanceBatchesPrefetchCount Gets or sets the rebalance batches prefetch count. Source node can provide more than one batch at rebalance start to improve performance. Default is DefaultRebalanceBatchesPrefetchCount , minimum is 2. Declaration public long RebalanceBatchesPrefetchCount { get; set; } Property Value Type Description System.Int64 RebalanceBatchSize Gets or sets 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. Declaration public int RebalanceBatchSize { get; set; } Property Value Type Description System.Int32 RebalanceDelay Gets or sets 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. Declaration public TimeSpan RebalanceDelay { get; set; } Property Value Type Description System.TimeSpan RebalanceMode Gets or sets cache rebalance mode. Declaration public CacheRebalanceMode RebalanceMode { get; set; } Property Value Type Description CacheRebalanceMode RebalanceOrder Gets or sets the cache rebalance order. Caches with bigger RebalanceOrder are rebalanced later than caches with smaller RebalanceOrder. Default is 0, which means unordered rebalance. All caches with RebalanceOrder=0 are rebalanced without any delay concurrently. This parameter is applicable only for caches with RebalanceMode of Sync and Async . Declaration public int RebalanceOrder { get; set; } Property Value Type Description System.Int32 RebalanceThrottle 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. Value of 0 means that throttling is disabled. Declaration public TimeSpan RebalanceThrottle { get; set; } Property Value Type Description System.TimeSpan RebalanceTimeout Gets or sets rebalance timeout. Declaration public TimeSpan RebalanceTimeout { get; set; } Property Value Type Description System.TimeSpan SqlEscapeAll 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. Declaration public bool SqlEscapeAll { get; set; } Property Value Type Description System.Boolean SqlIndexMaxInlineSize Gets or sets maximum inline size in bytes for sql indexes. See also InlineSize . -1 for automatic. Declaration public int SqlIndexMaxInlineSize { get; set; } Property Value Type Description System.Int32 SqlSchema Gets or sets the SQL schema. Non-quoted identifiers are not case sensitive. Quoted identifiers are case sensitive. Quoted Name is used by default. Declaration public string SqlSchema { get; set; } Property Value Type Description System.String WriteSynchronizationMode Gets or sets write synchronization mode. This mode controls whether the main caller should wait for update on other nodes to complete or not. Declaration public CacheWriteSynchronizationMode WriteSynchronizationMode { get; set; } Property Value Type Description CacheWriteSynchronizationMode Methods ToCacheConfiguration() Converts this instance to full CacheConfiguration . Declaration public CacheConfiguration ToCacheConfiguration() Returns Type Description CacheConfiguration"
  },
  "api/Apache.Ignite.Core.Cluster.IBaselineNode.html": {
    "href": "api/Apache.Ignite.Core.Cluster.IBaselineNode.html",
    "title": "Interface IBaselineNode | Apache Ignite.NET",
    "keywords": "Interface IBaselineNode Baseline topology node (see GetBaselineTopology() ). Namespace : Apache.Ignite.Core.Cluster Assembly : Apache.Ignite.Core.dll Syntax public interface IBaselineNode Properties Attributes Gets all node attributes. Attributes are assigned to nodes at startup. Declaration IDictionary<string, object> Attributes { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.Object > ConsistentId Gets the consistent ID from ConsistentId . Declaration object ConsistentId { get; } Property Value Type Description System.Object"
  },
  "api/Apache.Ignite.Core.Cluster.ICluster.html": {
    "href": "api/Apache.Ignite.Core.Cluster.ICluster.html",
    "title": "Interface ICluster | Apache Ignite.NET",
    "keywords": "Interface ICluster Represents whole cluster (group of all nodes in a cluster). All members are thread-safe and may be used concurrently from multiple threads. Inherited Members IClusterGroup.Ignite IClusterGroup.GetCompute() IClusterGroup.ForNodes(IEnumerable<IClusterNode>) IClusterGroup.ForNodes(IClusterNode[]) IClusterGroup.ForNodeIds(IEnumerable<Guid>) IClusterGroup.ForNodeIds(Guid[]) IClusterGroup.ForPredicate(Func<IClusterNode, Boolean>) IClusterGroup.ForAttribute(String, String) IClusterGroup.ForCacheNodes(String) IClusterGroup.ForDataNodes(String) IClusterGroup.ForClientNodes(String) IClusterGroup.ForRemotes() IClusterGroup.ForDaemons() IClusterGroup.ForHost(IClusterNode) IClusterGroup.ForRandom() IClusterGroup.ForOldest() IClusterGroup.ForYoungest() IClusterGroup.ForDotNet() IClusterGroup.ForServers() IClusterGroup.GetNodes() IClusterGroup.GetNode(Guid) IClusterGroup.GetNode() IClusterGroup.GetMetrics() IClusterGroup.GetMessaging() IClusterGroup.GetEvents() IClusterGroup.GetServices() IClusterGroup.EnableStatistics(IEnumerable<String>, Boolean) IClusterGroup.ClearStatistics(IEnumerable<String>) Namespace : Apache.Ignite.Core.Cluster Assembly : Apache.Ignite.Core.dll Syntax public interface ICluster : IClusterGroup Properties ClientReconnectTask Gets the reconnect task, which will transition to Completed state when local client node reconnects to the cluster. Result of the task indicates whether cluster has been restarted. If local node is not in client mode or is not disconnected, returns completed task. Declaration Task<bool> ClientReconnectTask { get; } Property Value Type Description System.Threading.Tasks.Task < System.Boolean > The reconnect task. TopologyVersion Gets current topology version. In case of TCP discovery topology versions are sequential they start from 1 and get incremented every time whenever a node joins or leaves. For other discovery SPIs topology versions may not be (and likely are not) sequential. Declaration long TopologyVersion { get; } Property Value Type Description System.Int64 Current topology version. Methods DisableWal(String) Disables write-ahead logging for specified cache. When WAL is disabled, changes are not logged to disk. This significantly improves cache update speed.The drawback is absence of local crash-recovery guarantees. If node is crashed, local content of WAL-disabled cache will be cleared on restart to avoid data corruption. Internally this method will wait for all current cache operations to finish and prevent new cache operations from being executed.Then checkpoint is initiated to flush all data to disk.Control is returned to the callee when all dirty pages are prepared for checkpoint, but not necessarily flushed to disk. WAL state can be changed only for persistent caches. Declaration void DisableWal(string cacheName) Parameters Type Name Description System.String cacheName Name of the cache. EnableWal(String) Enables write-ahead logging for specified cache. Restoring crash-recovery guarantees of a previous call to DisableWal(String) . Internally this method will wait for all current cache operations to finish and prevent new cache operations from being executed. Then checkpoint is initiated to flush all data to disk. Control is returned to the callee when all data is persisted to disk. WAL state can be changed only for persistent caches. Declaration void EnableWal(string cacheName) Parameters Type Name Description System.String cacheName Name of the cache. ForLocal() Gets monadic projection consisting from the local node. Declaration IClusterGroup ForLocal() Returns Type Description IClusterGroup Monadic projection consisting from the local node. GetBaselineAutoAdjustTimeout() Gets the value of time which we would wait before the actual topology change since last server topology change(node join/left/fail). Declaration long GetBaselineAutoAdjustTimeout() Returns Type Description System.Int64 Timeout value GetBaselineTopology() Gets the baseline topology. Returns null if SetBaselineTopology(Int64) has not been called. Declaration ICollection<IBaselineNode> GetBaselineTopology() Returns Type Description System.Collections.Generic.ICollection < IBaselineNode > GetLocalNode() Gets local Ignite node. Declaration IClusterNode GetLocalNode() Returns Type Description IClusterNode Local Ignite node. GetTopology(Int64) Gets a topology by version. Returns null if topology history storage doesn't contain specified topology version (history currently keeps the last 1000 snapshots). Declaration ICollection<IClusterNode> GetTopology(long ver) Parameters Type Name Description System.Int64 ver Topology version. Returns Type Description System.Collections.Generic.ICollection < IClusterNode > Collection of Ignite nodes which represented by specified topology version, if it is present in history storage, null otherwise. Exceptions Type Condition IgniteException If underlying SPI implementation does not support topology history. Currently only org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi supports topology history. IsActive() Determines whether this grid is in active state. Declaration bool IsActive() Returns Type Description System.Boolean true if the grid is active; otherwise, false . IsBaselineAutoAdjustEnabled() Returns value of manual baseline control or auto adjusting baseline. Declaration bool IsBaselineAutoAdjustEnabled() Returns Type Description System.Boolean true If cluster in auto-adjust. false If cluster in manual. IsWalEnabled(String) Determines whether write-ahead logging is enabled for specified cache. Declaration bool IsWalEnabled(string cacheName) Parameters Type Name Description System.String cacheName Name of the cache. Returns Type Description System.Boolean PingNode(Guid) Pings a remote node. Declaration bool PingNode(Guid nodeId) Parameters Type Name Description System.Guid nodeId ID of a node to ping. Returns Type Description System.Boolean True if node for a given ID is alive, false otherwise. ResetMetrics() Resets local I/O, job, and task execution metrics. Declaration void ResetMetrics() SetActive(Boolean) Changes Ignite grid state to active or inactive. Declaration void SetActive(bool isActive) Parameters Type Name Description System.Boolean isActive SetBaselineAutoAdjustEnabledFlag(Boolean) Sets the value of manual baseline control or auto adjusting baseline. Declaration void SetBaselineAutoAdjustEnabledFlag(bool isBaselineAutoAdjustEnabled) Parameters Type Name Description System.Boolean isBaselineAutoAdjustEnabled true If cluster in auto-adjust. false If cluster in manual. SetBaselineAutoAdjustTimeout(Int64) Sets the value of time which we would wait before the actual topology change since last server topology change(node join/left/fail). Declaration void SetBaselineAutoAdjustTimeout(long baselineAutoAdjustTimeout) Parameters Type Name Description System.Int64 baselineAutoAdjustTimeout Timeout value SetBaselineTopology(IEnumerable<IBaselineNode>) Sets the baseline topology nodes. Declaration void SetBaselineTopology(IEnumerable<IBaselineNode> nodes) Parameters Type Name Description System.Collections.Generic.IEnumerable < IBaselineNode > nodes The nodes. SetBaselineTopology(Int64) Sets the baseline topology from the cluster topology of the given version. This method requires active cluster ( IsActive() ). Declaration void SetBaselineTopology(long topologyVersion) Parameters Type Name Description System.Int64 topologyVersion The topology version. SetTxTimeoutOnPartitionMapExchange(TimeSpan) Set transaction timeout on partition map exchange Declaration void SetTxTimeoutOnPartitionMapExchange(TimeSpan timeout) Parameters Type Name Description System.TimeSpan timeout"
  },
  "api/Apache.Ignite.Core.Communication.ICommunicationSpi.html": {
    "href": "api/Apache.Ignite.Core.Communication.ICommunicationSpi.html",
    "title": "Interface ICommunicationSpi | Apache Ignite.NET",
    "keywords": "Interface ICommunicationSpi Communication SPI is responsible for data exchange between nodes. Communication SPI is one of the most important SPIs in Ignite. It is used heavily throughout the system and provides means for all data exchanges between nodes, such as internal implementation details and user driven messages. Only predefined implementation is supported now: TcpCommunicationSpi . Namespace : Apache.Ignite.Core.Communication Assembly : Apache.Ignite.Core.dll Syntax public interface ICommunicationSpi"
  },
  "api/Apache.Ignite.Core.Communication.Tcp.TcpCommunicationSpi.html": {
    "href": "api/Apache.Ignite.Core.Communication.Tcp.TcpCommunicationSpi.html",
    "title": "Class TcpCommunicationSpi | Apache Ignite.NET",
    "keywords": "Class TcpCommunicationSpi TcpCommunicationSpi is default communication SPI which uses TCP/IP protocol and Java NIO to communicate with other nodes. At startup, this SPI tries to start listening to local port specified by LocalPort property. If local port is occupied, then SPI will automatically increment the port number until it can successfully bind for listening. LocalPortRange configuration parameter controls maximum number of ports that SPI will try before it fails. Port range comes very handy when starting multiple grid nodes on the same machine or even in the same VM. In this case all nodes can be brought up without a single change in configuration. Inheritance System.Object TcpCommunicationSpi Implements ICommunicationSpi Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Communication.Tcp Assembly : Apache.Ignite.Core.dll Syntax public class TcpCommunicationSpi : ICommunicationSpi Constructors TcpCommunicationSpi() Initializes a new instance of the TcpCommunicationSpi class. Declaration public TcpCommunicationSpi() Fields DefaultAckSendThreshold Default value of AckSendThreshold property. Declaration public const int DefaultAckSendThreshold = 16 Field Value Type Description System.Int32 DefaultConnectionsPerNode Default value of ConnectionsPerNode property. Declaration public const int DefaultConnectionsPerNode = 1 Field Value Type Description System.Int32 DefaultConnectTimeout Default value of ConnectTimeout property. Declaration public static readonly TimeSpan DefaultConnectTimeout Field Value Type Description System.TimeSpan DefaultDirectBuffer Default value of DirectBuffer property. Declaration public const bool DefaultDirectBuffer = true Field Value Type Description System.Boolean DefaultDirectSendBuffer Default value of DirectSendBuffer property. Declaration public const bool DefaultDirectSendBuffer = false Field Value Type Description System.Boolean DefaultFilterReachableAddresses Default value of FilterReachableAddresses property. Declaration public const bool DefaultFilterReachableAddresses = false Field Value Type Description System.Boolean DefaultIdleConnectionTimeout Default value of IdleConnectionTimeout property. Declaration public static readonly TimeSpan DefaultIdleConnectionTimeout Field Value Type Description System.TimeSpan DefaultLocalPort Default value of LocalPort property. Declaration public const int DefaultLocalPort = 47100 Field Value Type Description System.Int32 DefaultLocalPortRange Default value of LocalPortRange property. Declaration public const int DefaultLocalPortRange = 100 Field Value Type Description System.Int32 DefaultMaxConnectTimeout Default value of MaxConnectTimeout property. Declaration public static readonly TimeSpan DefaultMaxConnectTimeout Field Value Type Description System.TimeSpan DefaultMessageQueueLimit Default value of MessageQueueLimit property. Declaration public const int DefaultMessageQueueLimit = 1024 Field Value Type Description System.Int32 DefaultReconnectCount Default value of ReconnectCount property. Declaration public const int DefaultReconnectCount = 10 Field Value Type Description System.Int32 DefaultSelectorsCount Default value of SelectorsCount property. Declaration public static readonly int DefaultSelectorsCount Field Value Type Description System.Int32 DefaultSelectorSpins Default value of SelectorSpins property. Declaration public const long DefaultSelectorSpins = 0L Field Value Type Description System.Int64 DefaultSharedMemoryPort Default value of SharedMemoryPort property. Declaration public const int DefaultSharedMemoryPort = -1 Field Value Type Description System.Int32 DefaultSocketBufferSize Default socket buffer size. Declaration public const int DefaultSocketBufferSize = 32768 Field Value Type Description System.Int32 DefaultSocketWriteTimeout Default value of SocketWriteTimeout property. Declaration public const long DefaultSocketWriteTimeout = 2000L Field Value Type Description System.Int64 DefaultTcpNoDelay Default value of TcpNoDelay property. Declaration public const bool DefaultTcpNoDelay = true Field Value Type Description System.Boolean DefaultUsePairedConnections Default value of UsePairedConnections property. Declaration public const bool DefaultUsePairedConnections = false Field Value Type Description System.Boolean Properties AckSendThreshold Gets or sets the number of received messages per connection to node after which acknowledgment message is sent. Declaration public int AckSendThreshold { get; set; } Property Value Type Description System.Int32 ConnectionsPerNode Gets or sets the number of connections per node. Declaration public int ConnectionsPerNode { get; set; } Property Value Type Description System.Int32 ConnectTimeout Gets or sets the connect timeout used when establishing connection with remote nodes. Declaration public TimeSpan ConnectTimeout { get; set; } Property Value Type Description System.TimeSpan DirectBuffer Gets or sets a value indicating whether to allocate direct (ByteBuffer.allocateDirect) or heap (ByteBuffer.allocate) buffer. Declaration public bool DirectBuffer { get; set; } Property Value Type Description System.Boolean DirectSendBuffer Gets or sets a value indicating whether to allocate direct (ByteBuffer.allocateDirect) or heap (ByteBuffer.allocate) send buffer. Declaration public bool DirectSendBuffer { get; set; } Property Value Type Description System.Boolean FilterReachableAddresses Gets or sets a value indicating whether filter for reachable addresses should be enabled on creating tcp client. Declaration public bool FilterReachableAddresses { get; set; } Property Value Type Description System.Boolean IdleConnectionTimeout Sets maximum idle connection timeout upon which a connection to client will be closed. Declaration public TimeSpan IdleConnectionTimeout { get; set; } Property Value Type Description System.TimeSpan LocalAddress Gets or sets the local host address for socket binding. Note that one node could have additional addresses beside the loopback one. This configuration parameter is optional. Declaration public string LocalAddress { get; set; } Property Value Type Description System.String LocalPort Gets or sets the local port for socket binding. Declaration public int LocalPort { get; set; } Property Value Type Description System.Int32 LocalPortRange Gets or sets 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. If port range value is 0 , then implementation will try bind only to the port provided by LocalPort method and fail if binding to this port did not succeed. Declaration public int LocalPortRange { get; set; } Property Value Type Description System.Int32 MaxConnectTimeout Gets or sets 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. 0 is interpreted as infinite timeout. Declaration public TimeSpan MaxConnectTimeout { get; set; } Property Value Type Description System.TimeSpan MessageQueueLimit Gets or sets the message queue limit for incoming and outgoing messages. When set to positive number send queue is limited to the configured value. 0 disables the limitation. Declaration public int MessageQueueLimit { get; set; } Property Value Type Description System.Int32 ReconnectCount Gets or sets the maximum number of reconnect attempts used when establishing connection with remote nodes. Declaration public int ReconnectCount { get; set; } Property Value Type Description System.Int32 SelectorsCount Gets or sets the count of selectors te be used in TCP server. Default value is DefaultSelectorsCount , which is calculated as Math.Min(4, Environment.ProcessorCount) Declaration public int SelectorsCount { get; set; } Property Value Type Description System.Int32 SelectorSpins Gets or sets a values that defines how many non-blocking selectors should be made. Can be set to System.Int64.MaxValue so selector threads will never block. Default value is DefaultSelectorSpins . Declaration public long SelectorSpins { get; set; } Property Value Type Description System.Int64 SharedMemoryPort Gets or sets a local port to accept shared memory connections. Declaration public int SharedMemoryPort { get; set; } Property Value Type Description System.Int32 SlowClientQueueLimit Gets or sets slow client queue limit. When set to a positive number, communication SPI will monitor clients outbound message queue sizes and will drop those clients whose queue exceeded this limit. Usually this value should be set to the same value as MessageQueueLimit which controls message back-pressure for server nodes. The default value for this parameter is 0 which means unlimited. Declaration public int SlowClientQueueLimit { get; set; } Property Value Type Description System.Int32 SocketReceiveBufferSize Gets or sets the size of the socket receive buffer. Declaration public int SocketReceiveBufferSize { get; set; } Property Value Type Description System.Int32 SocketSendBufferSize Gets or sets the size of the socket send buffer. Declaration public int SocketSendBufferSize { get; set; } Property Value Type Description System.Int32 SocketWriteTimeout Gets or sets socket write timeout for TCP connection. If message can not be written to socket within this time then connection is closed and reconnect is attempted. Default value is DefaultSocketWriteTimeout . Declaration public long SocketWriteTimeout { get; set; } Property Value Type Description System.Int64 TcpNoDelay Gets or sets the value for TCP_NODELAY socket option. Each socket will be opened using provided value. Setting this option to true disables Nagle's algorithm for socket decreasing latency and delivery time for small messages. For systems that work under heavy network load it is advisable to set this value to false . Declaration public bool TcpNoDelay { get; set; } Property Value Type Description System.Boolean UnacknowledgedMessagesBufferSize Gets or sets the maximum number of stored unacknowledged messages per connection to node. If number of unacknowledged messages exceeds this number then connection to node is closed and reconnect is attempted. Declaration public int UnacknowledgedMessagesBufferSize { get; set; } Property Value Type Description System.Int32 UsePairedConnections Gets or sets a value indicating whether separate connections should be used for incoming and outgoing data. Set this to true if ConnectionsPerNode should maintain connection for outgoing and incoming messages separately. In this case total number of connections between local and each remote node is equals to ConnectionsPerNode * 2. Declaration public bool UsePairedConnections { get; set; } Property Value Type Description System.Boolean Implements ICommunicationSpi"
  },
  "api/Apache.Ignite.Core.Compute.IComputeJob-1.html": {
    "href": "api/Apache.Ignite.Core.Compute.IComputeJob-1.html",
    "title": "Interface IComputeJob<TRes> | Apache Ignite.NET",
    "keywords": "Interface IComputeJob<TRes> Defines executable unit for IComputeTask<TArg, TJobRes, TRes> . Ignite task gets split into jobs when Map(IList<IClusterNode>, TArg) method is called. This method returns all jobs for the task mapped to their corresponding Ignite nodes for execution. Grid will then serialize this jobs and send them to requested nodes for execution. Once job execution is complete, the return value will be sent back to parent task and will be passed into OnResult(IComputeJobResult<TJobRes>, IList<IComputeJobResult<TJobRes>>) method via IComputeJobResult<TRes> instance. Ignite job implementation can be injected with IIgnite using InstanceResourceAttribute attribute. Namespace : Apache.Ignite.Core.Compute Assembly : Apache.Ignite.Core.dll Syntax public interface IComputeJob<out TRes> Type Parameters Name Description TRes Methods Cancel() This method is called when system detects that completion of this job can no longer alter the overall outcome (for example, when parent task has already reduced the results). Note that job cancellation is only a hint, and it is really up to the actual job instance to gracefully finish execution and exit. Declaration void Cancel() Execute() Executes this job. Declaration TRes Execute() Returns Type Description TRes Job execution result (possibly null ). This result will be returned in IComputeJobResult<TRes> object passed into OnResult(IComputeJobResult<TJobRes>, IList<IComputeJobResult<TJobRes>>) on caller node."
  },
  "api/Apache.Ignite.Core.Compute.IComputeJobResult-1.html": {
    "href": "api/Apache.Ignite.Core.Compute.IComputeJobResult-1.html",
    "title": "Interface IComputeJobResult<TRes> | Apache Ignite.NET",
    "keywords": "Interface IComputeJobResult<TRes> Job execution result which gets passed to OnResult(IComputeJobResult<TJobRes>, IList<IComputeJobResult<TJobRes>>) method. Namespace : Apache.Ignite.Core.Compute Assembly : Apache.Ignite.Core.dll Syntax public interface IComputeJobResult<out TRes> Type Parameters Name Description TRes Properties Cancelled Whether the job was cancelled. Declaration bool Cancelled { get; } Property Value Type Description System.Boolean Data Gets data returned by remote job if it didn't fail. This data is the object returned from Execute() method. Note that if task is annotated with ComputeTaskNoResultCacheAttribute attribute, then job results will not be cached and will be available only in OnResult(IComputeJobResult<TJobRes>, IList<IComputeJobResult<TJobRes>>) method for every individual job, but not in Reduce(IList<IComputeJobResult<TJobRes>>) method. Declaration TRes Data { get; } Property Value Type Description TRes Data returned by job. Exception Gets exception produced by execution of remote job, or null if no exception was produced. Declaration Exception Exception { get; } Property Value Type Description System.Exception Exception or null in case of success. Job Gets local instance of remote job produced this result. Declaration IComputeJob<TRes> Job { get; } Property Value Type Description IComputeJob <TRes> NodeId ID of the node where actual job execution occurred. Declaration Guid NodeId { get; } Property Value Type Description System.Guid"
  },
  "api/Apache.Ignite.Core.Datastream.DataStreamerDefaults.html": {
    "href": "api/Apache.Ignite.Core.Datastream.DataStreamerDefaults.html",
    "title": "Class DataStreamerDefaults | Apache Ignite.NET",
    "keywords": "Class DataStreamerDefaults Data streamer configuration defaults. Inheritance System.Object DataStreamerDefaults Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Datastream Assembly : Apache.Ignite.Core.dll Syntax public static class DataStreamerDefaults Fields DefaultParallelOperationsMultiplier Default multiplier for parallel operations per node: PerNodeParallelOperations = DataStreamerThreadPoolSize * DefaultParallelOperationsMultiplier . Declaration public const int DefaultParallelOperationsMultiplier = 8 Field Value Type Description System.Int32 DefaultPerNodeBufferSize The default per node buffer size, see PerNodeBufferSize . Declaration public const int DefaultPerNodeBufferSize = 512 Field Value Type Description System.Int32 DefaultPerThreadBufferSize The default per thread buffer size, see PerThreadBufferSize . Declaration public const int DefaultPerThreadBufferSize = 4096 Field Value Type Description System.Int32 DefaultTimeout The default timeout (see Timeout ). Negative value means no timeout. Declaration public static readonly TimeSpan DefaultTimeout Field Value Type Description System.TimeSpan"
  },
  "api/Apache.Ignite.Core.Datastream.IDataStreamer-2.html": {
    "href": "api/Apache.Ignite.Core.Datastream.IDataStreamer-2.html",
    "title": "Interface IDataStreamer<TK, TV> | Apache Ignite.NET",
    "keywords": "Interface IDataStreamer<TK, TV> Data streamer is responsible for loading external data into cache. It achieves it by properly buffering updates and properly mapping keys to nodes responsible for the data to make sure that there is the least amount of data movement possible and optimal network and memory utilization. Note that streamer will load data concurrently by multiple internal threads, so the data may get to remote nodes in different order from which it was added to the streamer. Also note that IDataStreamer is not the only way to load data into cache. Alternatively you can use LoadCache(Action<TK, TV>, Object[]) method to load data from underlying data store. You can also use standard cache put and putAll operations as well, but they most likely will not perform as well as this class for loading data. And finally, data can be loaded from underlying data store on demand, whenever it is accessed - for this no explicit data loading step is needed. IDataStreamer supports the following configuration properties: PerNodeBufferSizeWhen entries are added to data streamer they are not sent to Ignite right away and are buffered internally for better performance and network utilization. This setting controls the size of internal per-node buffer before buffered data is sent to remote node. Default value is 1024. PerThreadBufferSizeWhen entries are added to data streamer they are not sent to Ignite right away and are buffered internally on per thread basis for better performance and network utilization. This setting controls the size of internal per-thread buffer before buffered data is sent to remote node. Default value is 4096. PerNodeParallelOperationsSometimes data may be added to the data streamer faster than it can be put in cache. In this case, new buffered load messages are sent to remote nodes before responses from previous ones are received. This could cause unlimited heap memory utilization growth on local and remote nodes. To control memory utilization, this setting limits maximum allowed number of parallel buffered load messages that are being processed on remote nodes. If this number is exceeded, then data streamer add/remove methods will block to control memory utilization. Default value is 16. AutoFlushFrequencyAutomatic flush frequency in milliseconds. Essentially, this is the time after which the streamer will make an attempt to submit all data added so far to remote nodes. Note that there is no guarantee that data will be delivered after this concrete attempt (e.g., it can fail when topology is changing), but it won't be lost anyway. Disabled by default (default value is 0 ). IsolatedDefines if data streamer will assume that there are no other concurrent updates and allow data streamer choose most optimal concurrent implementation. Default value is false . All members are thread-safe and may be used concurrently from multiple threads. Inherited Members System.IDisposable.Dispose() Namespace : Apache.Ignite.Core.Datastream Assembly : Apache.Ignite.Core.dll Syntax public interface IDataStreamer<TK, TV> : IDisposable Type Parameters Name Description TK TV Properties AllowOverwrite Gets or sets a value indicating whether existing values can be overwritten by the data streamer. Performance is better when this flag is false. NOTE: When false, cache updates won't be propagated to cache store (even if SkipStore is false). Default is false . Declaration bool AllowOverwrite { get; set; } Property Value Type Description System.Boolean AutoFlushFrequency Automatic flush frequency in milliseconds. Essentially, this is the time after which the streamer will make an attempt to submit all data added so far to remote nodes. Note that there is no guarantee that data will be delivered after this concrete attempt (e.g., it can fail when topology is changing), but it won't be lost anyway. If set to 0 , automatic flush is disabled. Default is 0 (disabled). Declaration long AutoFlushFrequency { get; set; } Property Value Type Description System.Int64 CacheName Name of the cache to load data to. Declaration string CacheName { get; } Property Value Type Description System.String PerNodeBufferSize Size of per node key-value pairs buffer. Setter must be called before any add/remove operation. Default is DefaultPerNodeBufferSize . Declaration int PerNodeBufferSize { get; set; } Property Value Type Description System.Int32 PerNodeParallelOperations Maximum number of parallel load operations for a single node. Setter must be called before any add/remove operation. Default is 0, which means Ignite calculates this automatically as DataStreamerThreadPoolSize * DefaultParallelOperationsMultiplier . Declaration int PerNodeParallelOperations { get; set; } Property Value Type Description System.Int32 PerThreadBufferSize Size of per thread key-value pairs buffer. Setter must be called before any add/remove operation. Default is DefaultPerThreadBufferSize . Declaration int PerThreadBufferSize { get; set; } Property Value Type Description System.Int32 Receiver Gets or sets custom stream receiver. Declaration IStreamReceiver<TK, TV> Receiver { get; set; } Property Value Type Description IStreamReceiver <TK, TV> SkipStore Flag indicating that write-through behavior should be disabled for data loading. AllowOverwrite must be true for write-through to work. Default is false . Declaration bool SkipStore { get; set; } Property Value Type Description System.Boolean Task Gets the task for this loading process. This task completes whenever method Close(Boolean) completes. Declaration Task Task { get; } Property Value Type Description System.Threading.Tasks.Task Timeout Gets or sets the timeout. Negative values mean no timeout. Default is DefaultTimeout . Timeout is used in the following cases: Any data addition method can be blocked when all per node parallel operations are exhausted. The timeout defines the max time you will be blocked waiting for a permit to add a chunk of data into the streamer; Total timeout time for Flush() operation; Total timeout time for Close(Boolean) operation. Declaration TimeSpan Timeout { get; set; } Property Value Type Description System.TimeSpan Methods AddData(TK, TV) Adds single key-value pair for loading. Passing null as value will be interpreted as removal. Declaration Task AddData(TK key, TV val) Parameters Type Name Description TK key Key. TV val Value. Returns Type Description System.Threading.Tasks.Task Task for this operation. AddData(ICollection<KeyValuePair<TK, TV>>) Adds collection of key-value pairs for loading. Declaration Task AddData(ICollection<KeyValuePair<TK, TV>> entries) Parameters Type Name Description System.Collections.Generic.ICollection < System.Collections.Generic.KeyValuePair <TK, TV>> entries Entries. Returns Type Description System.Threading.Tasks.Task Task for this operation. AddData(KeyValuePair<TK, TV>) Adds single key-value pair for loading. Passing null as pair's value will be interpreted as removal. Declaration Task AddData(KeyValuePair<TK, TV> pair) Parameters Type Name Description System.Collections.Generic.KeyValuePair <TK, TV> pair Key-value pair. Returns Type Description System.Threading.Tasks.Task Task for this operation. Close(Boolean) Closes this streamer optionally loading any remaining data. Declaration void Close(bool cancel) Parameters Type Name Description System.Boolean cancel Whether to cancel ongoing loading operations. When set to true there is not guarantees what data will be actually loaded to cache. Flush() Loads any remaining data, but doesn't close the streamer. Data can be still added after flush is finished. This method blocks and doesn't allow to add any data until all data is loaded. Declaration void Flush() RemoveData(TK) Adds key for removal. Declaration Task RemoveData(TK key) Parameters Type Name Description TK key Key. Returns Type Description System.Threading.Tasks.Task Task for this operation. TryFlush() Makes an attempt to load remaining data. This method is mostly similar to Flush() with the difference that it won't wait and will exit immediately. Declaration void TryFlush() WithKeepBinary<TK1, TV1>() Gets streamer instance with binary mode enabled, changing key and/or value types if necessary. In binary mode stream receiver gets data in binary format. You can only change key/value types when transitioning from non-binary to binary streamer; Changing type of binary streamer is not allowed and will throw an System.InvalidOperationException Declaration IDataStreamer<TK1, TV1> WithKeepBinary<TK1, TV1>() Returns Type Description IDataStreamer <TK1, TV1> Streamer instance with binary mode enabled. Type Parameters Name Description TK1 Key type in binary mode. TV1 Value type in binary mode."
  },
  "api/Apache.Ignite.Core.Discovery.Tcp.html": {
    "href": "api/Apache.Ignite.Core.Discovery.Tcp.html",
    "title": "Namespace Apache.Ignite.Core.Discovery.Tcp | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Discovery.Tcp Classes TcpDiscoveryIpFinderBase Base IpFinder class. TcpDiscoverySpi TCP discover service provider. Interfaces ITcpDiscoveryIpFinder Represents an IP finder for TcpDiscoverySpi . Only predefined implementations are supported now: TcpDiscoveryStaticIpFinder , TcpDiscoveryMulticastIpFinder ."
  },
  "api/Apache.Ignite.Core.Discovery.html": {
    "href": "api/Apache.Ignite.Core.Discovery.html",
    "title": "Namespace Apache.Ignite.Core.Discovery | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Discovery Interfaces IDiscoverySpi Represents a discovery service provider interface. Only predefined implementation is supported now: TcpDiscoverySpi ."
  },
  "api/Apache.Ignite.Core.Encryption.IEncryptionSpi.html": {
    "href": "api/Apache.Ignite.Core.Encryption.IEncryptionSpi.html",
    "title": "Interface IEncryptionSpi | Apache Ignite.NET",
    "keywords": "Interface IEncryptionSpi Encryption SPI. Only predefined implementations are supported: KeystoreEncryptionSpi Namespace : Apache.Ignite.Core.Encryption Assembly : Apache.Ignite.Core.dll Syntax public interface IEncryptionSpi"
  },
  "api/Apache.Ignite.Core.Encryption.Keystore.KeystoreEncryptionSpi.html": {
    "href": "api/Apache.Ignite.Core.Encryption.Keystore.KeystoreEncryptionSpi.html",
    "title": "Class KeystoreEncryptionSpi | Apache Ignite.NET",
    "keywords": "Class KeystoreEncryptionSpi IEncryptionSPI implementation base on JDK provided cipher algorithm implementations. Inheritance System.Object KeystoreEncryptionSpi Implements IEncryptionSpi Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Encryption.Keystore Assembly : Apache.Ignite.Core.dll Syntax public class KeystoreEncryptionSpi : IEncryptionSpi Constructors KeystoreEncryptionSpi() Empty constructor. Declaration public KeystoreEncryptionSpi() KeystoreEncryptionSpi(IBinaryRawReader) Initializes a new instance of the KeystoreEncryptionSpi class. Declaration public KeystoreEncryptionSpi(IBinaryRawReader reader) Parameters Type Name Description IBinaryRawReader reader The reader. Fields DefaultKeySize Default encryption key size. Declaration public const int DefaultKeySize = 256 Field Value Type Description System.Int32 DefaultMasterKeyName Default master key name. Declaration public const string DefaultMasterKeyName = \"ignite.master.key\" Field Value Type Description System.String Properties KeySize Size of encryption key. Declaration public int KeySize { get; set; } Property Value Type Description System.Int32 KeyStorePassword Key store password. Declaration public string KeyStorePassword { get; set; } Property Value Type Description System.String KeyStorePath Path to key store. Declaration public string KeyStorePath { get; set; } Property Value Type Description System.String MasterKeyName Name of master key in key store. Declaration public string MasterKeyName { get; set; } Property Value Type Description System.String Implements IEncryptionSpi"
  },
  "api/Apache.Ignite.Core.Cache.Eviction.IEvictionPolicy.html": {
    "href": "api/Apache.Ignite.Core.Cache.Eviction.IEvictionPolicy.html",
    "title": "Interface IEvictionPolicy | Apache Ignite.NET",
    "keywords": "Interface IEvictionPolicy Represents a cache eviction policy. Only predefined implementations are supported now: LruEvictionPolicy , FifoEvictionPolicy . Namespace : Apache.Ignite.Core.Cache.Eviction Assembly : Apache.Ignite.Core.dll Syntax public interface IEvictionPolicy"
  },
  "api/Apache.Ignite.Core.Cache.ICacheEntryFilter-2.html": {
    "href": "api/Apache.Ignite.Core.Cache.ICacheEntryFilter-2.html",
    "title": "Interface ICacheEntryFilter<TK, TV> | Apache Ignite.NET",
    "keywords": "Interface ICacheEntryFilter<TK, TV> Cache entry predicate. Namespace : Apache.Ignite.Core.Cache Assembly : Apache.Ignite.Core.dll Syntax public interface ICacheEntryFilter<in TK, in TV> Type Parameters Name Description TK Key type. TV Value type. Methods Invoke(ICacheEntry<TK, TV>) Returns a value indicating whether provided cache entry satisfies this predicate. Declaration bool Invoke(ICacheEntry<TK, TV> entry) Parameters Type Name Description ICacheEntry <TK, TV> entry Cache entry. Returns Type Description System.Boolean Value indicating whether provided cache entry satisfies this predicate."
  },
  "api/Apache.Ignite.Core.Cache.Query.Continuous.ContinuousQuery.html": {
    "href": "api/Apache.Ignite.Core.Cache.Query.Continuous.ContinuousQuery.html",
    "title": "Class ContinuousQuery | Apache Ignite.NET",
    "keywords": "Class ContinuousQuery Continuous query base class, see ContinuousQuery<TK, TV> . Inheritance System.Object ContinuousQuery ContinuousQuery <TK, TV> Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Query.Continuous Assembly : Apache.Ignite.Core.dll Syntax public abstract class ContinuousQuery Constructors ContinuousQuery() Initializes a new instance of the ContinuousQuery class. Declaration protected ContinuousQuery() Fields DefaultAutoUnsubscribe Default auto-unsubscribe flag value. Declaration public const bool DefaultAutoUnsubscribe = true Field Value Type Description System.Boolean DefaultBufferSize Default buffer size. Declaration public const int DefaultBufferSize = 1 Field Value Type Description System.Int32 DefaultTimeInterval Default time interval. Declaration public static readonly TimeSpan DefaultTimeInterval Field Value Type Description System.TimeSpan"
  },
  "api/Apache.Ignite.Core.Cache.Query.Continuous.ContinuousQueryExtensions.html": {
    "href": "api/Apache.Ignite.Core.Cache.Query.Continuous.ContinuousQueryExtensions.html",
    "title": "Class ContinuousQueryExtensions | Apache Ignite.NET",
    "keywords": "Class ContinuousQueryExtensions Extensions for continuous queries. Inheritance System.Object ContinuousQueryExtensions Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Query.Continuous Assembly : Apache.Ignite.Core.dll Syntax public static class ContinuousQueryExtensions Methods ToCacheEntryEventFilter<TK, TV>(JavaObject) Creates the cache event filter that delegates to the corresponding Java object. Declaration public static ICacheEntryEventFilter<TK, TV> ToCacheEntryEventFilter<TK, TV>(this JavaObject javaObject) Parameters Type Name Description JavaObject javaObject Returns Type Description ICacheEntryEventFilter <TK, TV> Type Parameters Name Description TK Key type. TV Value type."
  },
  "api/Apache.Ignite.Core.Cache.Store.CacheStoreAdapter-2.html": {
    "href": "api/Apache.Ignite.Core.Cache.Store.CacheStoreAdapter-2.html",
    "title": "Class CacheStoreAdapter<TK, TV> | Apache Ignite.NET",
    "keywords": "Class CacheStoreAdapter<TK, TV> Cache storage convenience adapter. It provides default implementation for bulk operations, such as LoadAll , PutAll and RemoveAll by sequentially calling corresponding Load , Put and Remove operations. Use this adapter whenever such behaviour is acceptable. However in many cases it maybe more preferable to take advantage of database batch update functionality, and therefore default adapter implementation may not be the best option. Note that LoadCache method has empty implementation because it is essentially up to the user to invoke it with specific arguments. Inheritance System.Object CacheStoreAdapter<TK, TV> Implements ICacheStore <TK, TV> ICacheStore Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Store Assembly : Apache.Ignite.Core.dll Syntax public abstract class CacheStoreAdapter<TK, TV> : ICacheStore<TK, TV>, ICacheStore Type Parameters Name Description TK Key type. TV Value type. Methods Delete(TK) Delete the cache entry from the external resource. Expiry of a cache entry is not a delete hence will not cause this method to be invoked. This method is invoked even if no mapping for the key exists. Declaration public abstract void Delete(TK key) Parameters Type Name Description TK key The key that is used for the delete operation. DeleteAll(IEnumerable<TK>) Remove data and keys from the external resource for the given collection of keys, if present. The order that individual deletes occur is undefined. If this operation fails (by throwing an exception) after a partial success, the writer must remove any successfully written entries from the entries collection so that the caching implementation knows what succeeded and can mutate the cache. Expiry of a cache entry is not a delete hence will not cause this method to be invoked. This method may include keys even if there is no mapping for that key, in which case the data represented by that key should be removed from the underlying resource. Declaration public virtual void DeleteAll(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys a mutable collection of keys for entries to delete. Upon invocation, it contains the keys to delete for write-through. Upon return the collection must only contain the keys that were not successfully deleted. Load(TK) Loads an object. Application developers should implement this method to customize the loading of a value for a cache entry. This method is called by a cache when a requested entry is not in the cache. If the object can't be loaded null should be returned. Declaration public abstract TV Load(TK key) Parameters Type Name Description TK key The key identifying the object being loaded. Returns Type Description TV The value for the entry that is to be stored in the cache or null if the object can't be loaded LoadAll(IEnumerable<TK>) Loads multiple objects. Application developers should implement this method to customize the loading of cache entries. This method is called when the requested object is not in the cache. If an object can't be loaded, it is not returned in the resulting map. Declaration public virtual IEnumerable<KeyValuePair<TK, TV>> LoadAll(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys identifying the values to be loaded. Returns Type Description System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair <TK, TV>> A map of key, values to be stored in the cache. LoadCache(Action<TK, TV>, Object[]) Loads all values from underlying persistent storage. Note that keys are not passed, so it is up to implementation to figure out what to load. This method is called whenever LocalLoadCache(ICacheEntryFilter<TK, TV>, Object[]) method is invoked which is usually to preload the cache from persistent storage. This method is optional, and cache implementation does not depend on this method to do anything. For every loaded value method provided action should be called. The action will then make sure that the loaded value is stored in cache. Declaration public virtual void LoadCache(Action<TK, TV> act, params object[] args) Parameters Type Name Description System.Action <TK, TV> act Action for loaded values. System.Object [] args Optional arguments passed to LocalLoadCache(ICacheEntryFilter<TK, TV>, Object[]) method. SessionEnd(Boolean) Tells store to commit or rollback a transaction depending on the value of the commit parameter. Declaration public virtual void SessionEnd(bool commit) Parameters Type Name Description System.Boolean commit True if transaction should commit, false for rollback. Write(TK, TV) Write the specified value under the specified key to the external resource. This method is intended to support both key/value creation and value update. Declaration public abstract void Write(TK key, TV val) Parameters Type Name Description TK key Key to write. TV val Value to write. WriteAll(IEnumerable<KeyValuePair<TK, TV>>) Writes all. Declaration public virtual void WriteAll(IEnumerable<KeyValuePair<TK, TV>> entries) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair <TK, TV>> entries The map. Implements ICacheStore<TK, TV> ICacheStore"
  },
  "api/Apache.Ignite.Core.Cache.Store.CacheStoreException.html": {
    "href": "api/Apache.Ignite.Core.Cache.Store.CacheStoreException.html",
    "title": "Class CacheStoreException | Apache Ignite.NET",
    "keywords": "Class CacheStoreException Indicates an error during CacheStore operation. Inheritance System.Object System.Exception IgniteException CacheException CacheStoreException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Store Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class CacheStoreException : CacheException, ISerializable, _Exception Constructors CacheStoreException() Initializes a new instance of the CacheStoreException class. Declaration public CacheStoreException() CacheStoreException(SerializationInfo, StreamingContext) Initializes a new instance of the CacheStoreException class. Declaration protected CacheStoreException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. CacheStoreException(String) Initializes a new instance of the CacheStoreException class. Declaration public CacheStoreException(string message) Parameters Type Name Description System.String message The message that describes the error. CacheStoreException(String, Exception) Initializes a new instance of the CacheStoreException class. Declaration public CacheStoreException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Client.Cache.ICacheClient-2.html": {
    "href": "api/Apache.Ignite.Core.Client.Cache.ICacheClient-2.html",
    "title": "Interface ICacheClient<TK, TV> | Apache Ignite.NET",
    "keywords": "Interface ICacheClient<TK, TV> Client cache API. See GetCache<TK, TV>(String) . Namespace : Apache.Ignite.Core.Client.Cache Assembly : Apache.Ignite.Core.dll Syntax public interface ICacheClient<TK, TV> Type Parameters Name Description TK TV Properties Item[TK] Gets or sets a cache value with the specified key. Shortcut to Get(TK) and Put(TK, TV) Declaration TV this[TK key] { get; set; } Parameters Type Name Description TK key Key. Property Value Type Description TV Cache value with the specified key. Exceptions Type Condition System.Collections.Generic.KeyNotFoundException If the key is not present in the cache. Name Name of this cache ( null for default cache). Declaration string Name { get; } Property Value Type Description System.String Methods Clear() Clears the contents of the cache, without notifying listeners or CacheWriters. Declaration void Clear() Clear(TK) Clear entry from the cache, without notifying listeners or CacheWriters. Declaration void Clear(TK key) Parameters Type Name Description TK key Key to clear. ClearAll(IEnumerable<TK>) Clear entries from the cache, without notifying listeners or CacheWriters. Declaration void ClearAll(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys to clear. ClearAllAsync(IEnumerable<TK>) Clear entries from the cache, without notifying listeners or CacheWriters. Declaration Task ClearAllAsync(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys to clear. Returns Type Description System.Threading.Tasks.Task ClearAsync() Clears the contents of the cache, without notifying listeners or CacheWriters. Declaration Task ClearAsync() Returns Type Description System.Threading.Tasks.Task ClearAsync(TK) Clear entry from the cache, without notifying listeners or CacheWriters. Declaration Task ClearAsync(TK key) Parameters Type Name Description TK key Key to clear. Returns Type Description System.Threading.Tasks.Task ContainsKey(TK) Check if cache contains mapping for this key. Declaration bool ContainsKey(TK key) Parameters Type Name Description TK key Key. Returns Type Description System.Boolean True if cache contains mapping for this key. ContainsKeyAsync(TK) Check if cache contains mapping for this key. Declaration Task<bool> ContainsKeyAsync(TK key) Parameters Type Name Description TK key Key. Returns Type Description System.Threading.Tasks.Task < System.Boolean > True if cache contains mapping for this key. ContainsKeys(IEnumerable<TK>) Check if cache contains mapping for these keys. Declaration bool ContainsKeys(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys. Returns Type Description System.Boolean True if cache contains mapping for all these keys. ContainsKeysAsync(IEnumerable<TK>) Check if cache contains mapping for these keys. Declaration Task<bool> ContainsKeysAsync(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys. Returns Type Description System.Threading.Tasks.Task < System.Boolean > True if cache contains mapping for all these keys. Get(TK) Retrieves value mapped to the specified key from cache. Declaration TV Get(TK key) Parameters Type Name Description TK key Key. Returns Type Description TV Value. Exceptions Type Condition System.Collections.Generic.KeyNotFoundException If the key is not present in the cache. GetAll(IEnumerable<TK>) Retrieves values mapped to the specified keys from cache. Declaration ICollection<ICacheEntry<TK, TV>> GetAll(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys. Returns Type Description System.Collections.Generic.ICollection < ICacheEntry <TK, TV>> Map of key-value pairs. GetAllAsync(IEnumerable<TK>) Retrieves values mapped to the specified keys from cache. Declaration Task<ICollection<ICacheEntry<TK, TV>>> GetAllAsync(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys. Returns Type Description System.Threading.Tasks.Task < System.Collections.Generic.ICollection < ICacheEntry <TK, TV>>> Map of key-value pairs. GetAndPut(TK, TV) Associates the specified value with the specified key in this cache, returning an existing value if one existed. Declaration CacheResult<TV> GetAndPut(TK key, TV val) Parameters Type Name Description TK key Key with which the specified value is to be associated. TV val Value to be associated with the specified key. Returns Type Description CacheResult <TV> The value associated with the key at the start of the operation. GetAndPutAsync(TK, TV) Associates the specified value with the specified key in this cache, returning an existing value if one existed. Declaration Task<CacheResult<TV>> GetAndPutAsync(TK key, TV val) Parameters Type Name Description TK key Key with which the specified value is to be associated. TV val Value to be associated with the specified key. Returns Type Description System.Threading.Tasks.Task < CacheResult <TV>> The value associated with the key at the start of the operation. GetAndPutIfAbsent(TK, TV) Stores given key-value pair in cache only if cache had no previous mapping for it. Declaration CacheResult<TV> GetAndPutIfAbsent(TK key, TV val) Parameters Type Name Description TK key Key to store in cache. TV val Value to be associated with the given key. Returns Type Description CacheResult <TV> Previously contained value regardless of whether put happened or not. GetAndPutIfAbsentAsync(TK, TV) Stores given key-value pair in cache only if cache had no previous mapping for it. Declaration Task<CacheResult<TV>> GetAndPutIfAbsentAsync(TK key, TV val) Parameters Type Name Description TK key Key to store in cache. TV val Value to be associated with the given key. Returns Type Description System.Threading.Tasks.Task < CacheResult <TV>> Previously contained value regardless of whether put happened or not. GetAndRemove(TK) Atomically removes the entry for a key only if currently mapped to some value. Declaration CacheResult<TV> GetAndRemove(TK key) Parameters Type Name Description TK key Key with which the specified value is associated. Returns Type Description CacheResult <TV> The value if one existed. GetAndRemoveAsync(TK) Atomically removes the entry for a key only if currently mapped to some value. Declaration Task<CacheResult<TV>> GetAndRemoveAsync(TK key) Parameters Type Name Description TK key Key with which the specified value is associated. Returns Type Description System.Threading.Tasks.Task < CacheResult <TV>> The value if one existed. GetAndReplace(TK, TV) Atomically replaces the value for a given key if and only if there is a value currently mapped by the key. Declaration CacheResult<TV> GetAndReplace(TK key, TV val) Parameters Type Name Description TK key Key with which the specified value is to be associated. TV val Value to be associated with the specified key. Returns Type Description CacheResult <TV> The previous value associated with the specified key. GetAndReplaceAsync(TK, TV) Atomically replaces the value for a given key if and only if there is a value currently mapped by the key. Declaration Task<CacheResult<TV>> GetAndReplaceAsync(TK key, TV val) Parameters Type Name Description TK key Key with which the specified value is to be associated. TV val Value to be associated with the specified key. Returns Type Description System.Threading.Tasks.Task < CacheResult <TV>> The previous value associated with the specified key. GetAsync(TK) Retrieves value mapped to the specified key from cache. Declaration Task<TV> GetAsync(TK key) Parameters Type Name Description TK key Key. Returns Type Description System.Threading.Tasks.Task <TV> Value. Exceptions Type Condition System.Collections.Generic.KeyNotFoundException If the key is not present in the cache. GetConfiguration() Gets the cache configuration. Declaration CacheClientConfiguration GetConfiguration() Returns Type Description CacheClientConfiguration GetSize(CachePeekMode[]) Gets the number of all entries cached across all nodes. NOTE: this operation is distributed and will query all participating nodes for their cache sizes. Declaration long GetSize(params CachePeekMode[] modes) Parameters Type Name Description CachePeekMode [] modes Optional peek modes. If not provided, then total cache size is returned. Returns Type Description System.Int64 Cache size across all nodes. GetSizeAsync(CachePeekMode[]) Gets the number of all entries cached across all nodes. NOTE: this operation is distributed and will query all participating nodes for their cache sizes. Declaration Task<long> GetSizeAsync(params CachePeekMode[] modes) Parameters Type Name Description CachePeekMode [] modes Optional peek modes. If not provided, then total cache size is returned. Returns Type Description System.Threading.Tasks.Task < System.Int64 > Cache size across all nodes. Put(TK, TV) Associates the specified value with the specified key in the cache. If the cache previously contained a mapping for the key, the old value is replaced by the specified value. Declaration void Put(TK key, TV val) Parameters Type Name Description TK key Key with which the specified value is to be associated. TV val Value to be associated with the specified key. PutAll(IEnumerable<KeyValuePair<TK, TV>>) Stores given key-value pairs in cache. Declaration void PutAll(IEnumerable<KeyValuePair<TK, TV>> vals) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair <TK, TV>> vals Key-value pairs to store in cache. PutAllAsync(IEnumerable<KeyValuePair<TK, TV>>) Stores given key-value pairs in cache. Declaration Task PutAllAsync(IEnumerable<KeyValuePair<TK, TV>> vals) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair <TK, TV>> vals Key-value pairs to store in cache. Returns Type Description System.Threading.Tasks.Task PutAsync(TK, TV) Associates the specified value with the specified key in the cache. If the cache previously contained a mapping for the key, the old value is replaced by the specified value. Declaration Task PutAsync(TK key, TV val) Parameters Type Name Description TK key Key with which the specified value is to be associated. TV val Value to be associated with the specified key. Returns Type Description System.Threading.Tasks.Task PutIfAbsent(TK, TV) Atomically associates the specified key with the given value if it is not already associated with a value. Declaration bool PutIfAbsent(TK key, TV val) Parameters Type Name Description TK key Key with which the specified value is to be associated. TV val Value to be associated with the specified key. Returns Type Description System.Boolean True if a value was set. PutIfAbsentAsync(TK, TV) Atomically associates the specified key with the given value if it is not already associated with a value. Declaration Task<bool> PutIfAbsentAsync(TK key, TV val) Parameters Type Name Description TK key Key with which the specified value is to be associated. TV val Value to be associated with the specified key. Returns Type Description System.Threading.Tasks.Task < System.Boolean > True if a value was set. Query(ScanQuery<TK, TV>) Executes a Scan query. Declaration IQueryCursor<ICacheEntry<TK, TV>> Query(ScanQuery<TK, TV> scanQuery) Parameters Type Name Description ScanQuery <TK, TV> scanQuery Scan query. Returns Type Description IQueryCursor < ICacheEntry <TK, TV>> Query cursor. Query(SqlFieldsQuery) Executes an SQL Fields query. Declaration IFieldsQueryCursor Query(SqlFieldsQuery sqlFieldsQuery) Parameters Type Name Description SqlFieldsQuery sqlFieldsQuery SQL query. Returns Type Description IFieldsQueryCursor Query cursor. Query(SqlQuery) Executes an SQL query. Declaration [Obsolete(\"Use SqlFieldsQuery instead. For strongly-typed queries use Apache.Ignite.Linq. SqlQuery is a limited subset of SqlFieldsQuery.\")] IQueryCursor<ICacheEntry<TK, TV>> Query(SqlQuery sqlQuery) Parameters Type Name Description SqlQuery sqlQuery SQL query. Returns Type Description IQueryCursor < ICacheEntry <TK, TV>> Query cursor. Remove(TK) Removes given key mapping from cache, notifying listeners and cache writers. Declaration bool Remove(TK key) Parameters Type Name Description TK key Key to remove. Returns Type Description System.Boolean True if entry was removed, false otherwise. Remove(TK, TV) Removes given key mapping from cache if one exists and value is equal to the passed in value. Declaration bool Remove(TK key, TV val) Parameters Type Name Description TK key Key whose mapping is to be removed from cache. TV val Value to match against currently cached value. Returns Type Description System.Boolean True if entry was removed, false otherwise. RemoveAll() Removes all mappings from cache, notifying listeners and cache writers. Declaration void RemoveAll() RemoveAll(IEnumerable<TK>) Removes given key mappings from cache, notifying listeners and cache writers. Declaration void RemoveAll(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys to be removed from cache. RemoveAllAsync() Removes all mappings from cache, notifying listeners and cache writers. Declaration Task RemoveAllAsync() Returns Type Description System.Threading.Tasks.Task RemoveAllAsync(IEnumerable<TK>) Removes given key mappings from cache, notifying listeners and cache writers. Declaration Task RemoveAllAsync(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys to be removed from cache. Returns Type Description System.Threading.Tasks.Task RemoveAsync(TK) Removes given key mapping from cache, notifying listeners and cache writers. Declaration Task<bool> RemoveAsync(TK key) Parameters Type Name Description TK key Key to remove. Returns Type Description System.Threading.Tasks.Task < System.Boolean > True if entry was removed, false otherwise. RemoveAsync(TK, TV) Removes given key mapping from cache if one exists and value is equal to the passed in value. Declaration Task<bool> RemoveAsync(TK key, TV val) Parameters Type Name Description TK key Key whose mapping is to be removed from cache. TV val Value to match against currently cached value. Returns Type Description System.Threading.Tasks.Task < System.Boolean > True if entry was removed, false otherwise. Replace(TK, TV) Stores given key-value pair in cache only if there is a previous mapping for it. Declaration bool Replace(TK key, TV val) Parameters Type Name Description TK key Key to store in cache. TV val Value to be associated with the given key. Returns Type Description System.Boolean True if the value was replaced. Replace(TK, TV, TV) Stores given key-value pair in cache only if only if the previous value is equal to the old value passed as argument. Declaration bool Replace(TK key, TV oldVal, TV newVal) Parameters Type Name Description TK key Key to store in cache. TV oldVal Old value to match. TV newVal Value to be associated with the given key. Returns Type Description System.Boolean True if replace happened, false otherwise. ReplaceAsync(TK, TV) Stores given key-value pair in cache only if there is a previous mapping for it. Declaration Task<bool> ReplaceAsync(TK key, TV val) Parameters Type Name Description TK key Key to store in cache. TV val Value to be associated with the given key. Returns Type Description System.Threading.Tasks.Task < System.Boolean > True if the value was replaced. ReplaceAsync(TK, TV, TV) Stores given key-value pair in cache only if only if the previous value is equal to the old value passed as argument. Declaration Task<bool> ReplaceAsync(TK key, TV oldVal, TV newVal) Parameters Type Name Description TK key Key to store in cache. TV oldVal Old value to match. TV newVal Value to be associated with the given key. Returns Type Description System.Threading.Tasks.Task < System.Boolean > True if replace happened, false otherwise. TryGet(TK, out TV) Retrieves value mapped to the specified key from cache. Declaration bool TryGet(TK key, out TV value) Parameters Type Name Description TK key Key. TV value When this method returns, the value associated with the specified key, if the key is found; otherwise, the default value for the type of the value parameter. This parameter is passed uninitialized. Returns Type Description System.Boolean true if the cache contains an element with the specified key; otherwise, false. TryGetAsync(TK) Retrieves value mapped to the specified key from cache. Declaration Task<CacheResult<TV>> TryGetAsync(TK key) Parameters Type Name Description TK key Key. Returns Type Description System.Threading.Tasks.Task < CacheResult <TV>> CacheResult<T> containing a bool success flag and a value. WithExpiryPolicy(IExpiryPolicy) Returns cache with the specified expired policy set. This policy will be used for each operation invoked on the returned cache. Unlike the WithExpiryPolicy(IExpiryPolicy) method, expiry durations are retrieved from specified IExpiryPolicy on every key-value API operation. Declaration ICacheClient<TK, TV> WithExpiryPolicy(IExpiryPolicy plc) Parameters Type Name Description IExpiryPolicy plc Expiry policy to use. Returns Type Description ICacheClient <TK, TV> Cache instance with the specified expiry policy set. WithKeepBinary<TK1, TV1>() Gets cache with KeepBinary mode enabled, changing key and/or value types if necessary. You can only change key/value types when transitioning from non-binary to binary cache; Changing type of binary cache is not allowed and will throw an System.InvalidOperationException . Declaration ICacheClient<TK1, TV1> WithKeepBinary<TK1, TV1>() Returns Type Description ICacheClient <TK1, TV1> Cache instance with binary mode enabled. Type Parameters Name Description TK1 Key type in binary mode. TV1 Value type in binary mode. Extension Methods CacheClientLinqExtensions.AsCacheQueryable<TKey, TValue>(ICacheClient<TKey, TValue>) CacheClientLinqExtensions.AsCacheQueryable<TKey, TValue>(ICacheClient<TKey, TValue>, Boolean) CacheClientLinqExtensions.AsCacheQueryable<TKey, TValue>(ICacheClient<TKey, TValue>, Boolean, String) CacheClientLinqExtensions.AsCacheQueryable<TKey, TValue>(ICacheClient<TKey, TValue>, QueryOptions)"
  },
  "api/Apache.Ignite.Core.Client.Cache.html": {
    "href": "api/Apache.Ignite.Core.Client.Cache.html",
    "title": "Namespace Apache.Ignite.Core.Client.Cache | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Client.Cache Classes CacheClientConfiguration Ignite client cache configuration. Same thing as CacheConfiguration , but with a subset of properties that can be accessed from Ignite thin client (see IIgniteClient ). Note that caches created from server nodes can be accessed from thin client, and vice versa. The only difference is that thin client can not read or write certain CacheConfiguration properties, so a separate class exists to make it clear which properties can be used. Interfaces ICacheClient<TK, TV> Client cache API. See GetCache<TK, TV>(String) ."
  },
  "api/Apache.Ignite.Core.Client.SslStreamFactory.html": {
    "href": "api/Apache.Ignite.Core.Client.SslStreamFactory.html",
    "title": "Class SslStreamFactory | Apache Ignite.NET",
    "keywords": "Class SslStreamFactory Predefined SSL stream factory, loads certificate from specified file. Inheritance System.Object SslStreamFactory Implements ISslStreamFactory Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Client Assembly : Apache.Ignite.Core.dll Syntax public class SslStreamFactory : ISslStreamFactory Constructors SslStreamFactory() Initializes a new instance of the SslStreamFactory class. Declaration public SslStreamFactory() Fields DefaultSslProtocols Default SSL protocols. Declaration public const SslProtocols DefaultSslProtocols = SslProtocols.Tls Field Value Type Description System.Security.Authentication.SslProtocols Properties CertificatePassword Gets or sets the certificate file password. Declaration public string CertificatePassword { get; set; } Property Value Type Description System.String CertificatePath Gets or sets the certificate file (pfx) path. Java certificates can be converted with keytool : keytool -importkeystore -srckeystore thekeystore.jks -srcstoretype JKS -destkeystore thekeystore.pfx -deststoretype PKCS12 Declaration public string CertificatePath { get; set; } Property Value Type Description System.String CheckCertificateRevocation Gets or sets a value indicating whether the certificate revocation list is checked during authentication. Declaration public bool CheckCertificateRevocation { get; set; } Property Value Type Description System.Boolean SkipServerCertificateValidation Gets or sets a value indicating whether to ignore invalid remote (server) certificates. This may be useful for testing with self-signed certificates. Declaration public bool SkipServerCertificateValidation { get; set; } Property Value Type Description System.Boolean SslProtocols Gets or sets the SSL protocols. Declaration public SslProtocols SslProtocols { get; set; } Property Value Type Description System.Security.Authentication.SslProtocols Methods Create(Stream, String) Declaration public SslStream Create(Stream stream, string targetHost) Parameters Type Name Description System.IO.Stream stream System.String targetHost Returns Type Description System.Net.Security.SslStream Implements ISslStreamFactory"
  },
  "api/Apache.Ignite.Core.Client.html": {
    "href": "api/Apache.Ignite.Core.Client.html",
    "title": "Namespace Apache.Ignite.Core.Client | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Client Classes IgniteClientConfiguration Ignite thin client configuration. Ignite thin client connects to a specific Ignite node with a socket and does not start JVM in process. This configuration should correspond to ClientConnectorConfiguration on a target node. IgniteClientConfigurationSection Ignite configuration section for app.config and web.config files. IgniteClientException Ignite thin client exception. SslStreamFactory Predefined SSL stream factory, loads certificate from specified file. Interfaces IClientCluster Represents whole cluster (group of all nodes in a cluster). IClientClusterGroup Defines grid projection which represents a common functionality over a group of nodes. Grid projection allows to group Ignite nodes into various subgroups to perform distributed operations on them. All ForXXX(...)' methods will create a child grid projection from existing projection. If you create a new projection from current one, then the resulting projection will include a subset of nodes from current projection. The following code snippet shows how to create grid projections: var g = Ignition.StartClient().GetCluster(); // Projection over .NET nodes. var remoteNodes = g.ForDotNet(); // Projection over server nodes. var randomNode = g.ForServers(); // Projection over all nodes that have user attribute \"group\" set to value \"worker\". var workerNodes = g.ForAttribute(\"group\", \"worker\"); IClientClusterNode Interface representing a single cluster node obtained through a thin client. You can get a list of all nodes in grid by calling GetNodes() . You can use Ignite node attributes to provide static information about a node. This information is initialized once within grid, during node startup, and remains the same throughout the lifetime of a node. All members are thread-safe and may be used concurrently from multiple threads. IClientConnection Represents Ignite client connection. IIgniteClient Main entry point for Ignite Thin Client APIs. You can obtain an instance of IIgniteClient through one of the StartClient() overloads. Instances of this class and all nested APIs are thread safe. ISslStreamFactory SSL Stream Factory defines how SSL connection is established. Enums ClientStatusCode Client status codes (see StatusCode )."
  },
  "api/Apache.Ignite.Core.Common.IgniteException.html": {
    "href": "api/Apache.Ignite.Core.Common.IgniteException.html",
    "title": "Class IgniteException | Apache Ignite.NET",
    "keywords": "Class IgniteException General Ignite exception. Indicates any error condition within Ignite. Inheritance System.Object System.Exception IgniteException BinaryObjectException CacheEntryProcessorException CacheException IgniteClientException ClusterGroupEmptyException ClusterTopologyException ClientDisconnectedException IgniteFutureCancelledException IgniteIllegalStateException JavaException ComputeExecutionRejectedException ComputeJobFailoverException ComputeTaskCancelledException ComputeTaskTimeoutException ComputeUserUndeclaredException ServiceDeploymentException ServiceInvocationException TransactionDeadlockException TransactionHeuristicException TransactionOptimisticException TransactionRollbackException TransactionTimeoutException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Common Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class IgniteException : Exception, ISerializable, _Exception Constructors IgniteException() Initializes a new instance of the IgniteException class. Declaration public IgniteException() IgniteException(SerializationInfo, StreamingContext) Initializes a new instance of the IgniteException class. Declaration protected IgniteException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. IgniteException(String) Initializes a new instance of the IgniteException class. Declaration public IgniteException(string message) Parameters Type Name Description System.String message The message that describes the error. IgniteException(String, Exception) Initializes a new instance of the IgniteException class. Declaration public IgniteException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Common.IgniteExperimentalAttribute.html": {
    "href": "api/Apache.Ignite.Core.Common.IgniteExperimentalAttribute.html",
    "title": "Class IgniteExperimentalAttribute | Apache Ignite.NET",
    "keywords": "Class IgniteExperimentalAttribute This attribute marks API elements (such as interfaces and methods) as experimental meaning that the API is not finalized yet and may be changed or replaced in future Ignite releases. Such APIs are exposed so that users can make use of a feature before the API has been stabilized. The expectation is that an API element should be \"eventually\" stabilized. Incompatible changes are allowed for such APIs: API may be removed, changed or stabilized in future Ignite releases (both minor and maintenance). Inheritance System.Object System.Attribute IgniteExperimentalAttribute Implements System.Runtime.InteropServices._Attribute Inherited Members System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Boolean) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Boolean) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Module) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.IsDefined(System.Reflection.Module, System.Type) System.Attribute.IsDefined(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Boolean) System.Attribute.IsDefined(System.Reflection.Assembly, System.Type) System.Attribute.IsDefined(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.Equals(System.Object) System.Attribute.GetHashCode() System.Attribute.Match(System.Object) System.Attribute.IsDefaultAttribute() System.Attribute.System.Runtime.InteropServices._Attribute.GetTypeInfoCount(System.UInt32) System.Attribute.System.Runtime.InteropServices._Attribute.GetTypeInfo(System.UInt32, System.UInt32, System.IntPtr) System.Attribute.System.Runtime.InteropServices._Attribute.GetIDsOfNames(System.Guid, System.IntPtr, System.UInt32, System.UInt32, System.IntPtr) System.Attribute.System.Runtime.InteropServices._Attribute.Invoke(System.UInt32, System.Guid, System.UInt32, System.Int16, System.IntPtr, System.IntPtr, System.IntPtr, System.IntPtr) System.Attribute.TypeId System.Object.ToString() System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Common Assembly : Apache.Ignite.Core.dll Syntax [AttributeUsage(AttributeTargets.Class | AttributeTargets.Enum | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Field)] public sealed class IgniteExperimentalAttribute : Attribute, _Attribute Implements System.Runtime.InteropServices._Attribute"
  },
  "api/Apache.Ignite.Core.Compute.ComputeExecutionRejectedException.html": {
    "href": "api/Apache.Ignite.Core.Compute.ComputeExecutionRejectedException.html",
    "title": "Class ComputeExecutionRejectedException | Apache Ignite.NET",
    "keywords": "Class ComputeExecutionRejectedException Indicates a situation when execution service provided by the user in configuration rejects execution. Inheritance System.Object System.Exception IgniteException ComputeExecutionRejectedException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Compute Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class ComputeExecutionRejectedException : IgniteException, ISerializable, _Exception Constructors ComputeExecutionRejectedException() Initializes a new instance of the ComputeExecutionRejectedException class. Declaration public ComputeExecutionRejectedException() ComputeExecutionRejectedException(SerializationInfo, StreamingContext) Initializes a new instance of the ComputeExecutionRejectedException class. Declaration protected ComputeExecutionRejectedException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. ComputeExecutionRejectedException(String) Initializes a new instance of the ComputeExecutionRejectedException class. Declaration public ComputeExecutionRejectedException(string message) Parameters Type Name Description System.String message The message that describes the error. ComputeExecutionRejectedException(String, Exception) Initializes a new instance of the ComputeExecutionRejectedException class. Declaration public ComputeExecutionRejectedException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Compute.ComputeJobAdapter-1.html": {
    "href": "api/Apache.Ignite.Core.Compute.ComputeJobAdapter-1.html",
    "title": "Class ComputeJobAdapter<T> | Apache Ignite.NET",
    "keywords": "Class ComputeJobAdapter<T> Convenience adapter for IComputeJob<TRes> implementations. It provides the following functionality: Default implementation of Cancel() method and ability to check whether cancellation occurred with IsCancelled() method. Ability to set and get job arguments via SetArguments(Object[]) and GetArgument<TArg>(Int32) methods. Inheritance System.Object ComputeJobAdapter<T> Implements IComputeJob <T> Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Compute Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public abstract class ComputeJobAdapter<T> : IComputeJob<T> Type Parameters Name Description T Constructors ComputeJobAdapter() No-arg constructor. Declaration protected ComputeJobAdapter() ComputeJobAdapter(Object[]) Creates job with specified arguments. Declaration protected ComputeJobAdapter(params object[] args) Parameters Type Name Description System.Object [] args Optional job arguments. Methods Cancel() This method is called when system detects that completion of this job can no longer alter the overall outcome (for example, when parent task has already reduced the results). Note that job cancellation is only a hint, and it is really up to the actual job instance to gracefully finish execution and exit. Declaration public void Cancel() Execute() Executes this job. Declaration public abstract T Execute() Returns Type Description T Job execution result (possibly null ). This result will be returned in IComputeJobResult<TRes> object passed into OnResult(IComputeJobResult<TJobRes>, IList<IComputeJobResult<TJobRes>>) on caller node. GetArgument<TArg>(Int32) Sets given arguments. Declaration public TArg GetArgument<TArg>(int idx) Parameters Type Name Description System.Int32 idx Index of the argument. Returns Type Description TArg Type Parameters Name Description TArg IsCancelled() This method tests whether or not this job was cancelled. This method is thread-safe and can be called without extra synchronization. This method can be periodically called in Execute() method implementation to check whether or not this job cancelled. Note that system calls Cancel() method only as a hint and this is a responsibility of the implementation of the job to properly cancel its execution. Declaration protected bool IsCancelled() Returns Type Description System.Boolean True if this job was cancelled, false otherwise. SetArguments(Object[]) Sets given arguments. Declaration public void SetArguments(params object[] args) Parameters Type Name Description System.Object [] args Optional job arguments to set. Implements IComputeJob<TRes>"
  },
  "api/Apache.Ignite.Core.Compute.IComputeFunc-1.html": {
    "href": "api/Apache.Ignite.Core.Compute.IComputeFunc-1.html",
    "title": "Interface IComputeFunc<TRes> | Apache Ignite.NET",
    "keywords": "Interface IComputeFunc<TRes> Defines function having no arguments. Namespace : Apache.Ignite.Core.Compute Assembly : Apache.Ignite.Core.dll Syntax public interface IComputeFunc<out TRes> Type Parameters Name Description TRes Methods Invoke() Invoke function. Declaration TRes Invoke() Returns Type Description TRes Result."
  },
  "api/Apache.Ignite.Core.Compute.IComputeFunc-2.html": {
    "href": "api/Apache.Ignite.Core.Compute.IComputeFunc-2.html",
    "title": "Interface IComputeFunc<TArg, TRes> | Apache Ignite.NET",
    "keywords": "Interface IComputeFunc<TArg, TRes> Defines function having a single argument. Namespace : Apache.Ignite.Core.Compute Assembly : Apache.Ignite.Core.dll Syntax public interface IComputeFunc<in TArg, out TRes> Type Parameters Name Description TArg TRes Methods Invoke(TArg) Invoke function. Declaration TRes Invoke(TArg arg) Parameters Type Name Description TArg arg Argument. Returns Type Description TRes Result."
  },
  "api/Apache.Ignite.Core.Configuration.WalMode.html": {
    "href": "api/Apache.Ignite.Core.Configuration.WalMode.html",
    "title": "Enum WalMode | Apache Ignite.NET",
    "keywords": "Enum WalMode Write Ahead Log mode. Namespace : Apache.Ignite.Core.Configuration Assembly : Apache.Ignite.Core.dll Syntax public enum WalMode Fields Name Description Background Background mode. Does not force application buffer flush. Data may be lost in case of process crash. Default Default mode: full-sync disk writes. These writes survive power loss scenarios. Fsync FSYNC mode: full-sync disk writes. These writes survive power loss scenarios. LogOnly Log only mode: flushes application buffers. These writes survive process crash. None WAL disabled."
  },
  "api/Apache.Ignite.Core.Configuration.html": {
    "href": "api/Apache.Ignite.Core.Configuration.html",
    "title": "Namespace Apache.Ignite.Core.Configuration | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Configuration Classes ClientConnectorConfiguration Client connector configuration (ODBC, JDBC, Thin Client). DataRegionConfiguration Defines custom data region configuration for Apache Ignite page memory (see DataStorageConfiguration ). For each configured data region Apache Ignite instantiates respective memory regions with different parameters like maximum size, eviction policy, swapping options, etc. An Apache Ignite cache can be mapped to a particular region using DataRegionName method. DataStorageConfiguration Data storage configuration for Ignite page memory. The page memory is a manageable off-heap based memory architecture that divides all expandable data regions into pages of fixed size. An individual page can store one or many cache key-value entries that allows reusing the memory in the most efficient way and avoid memory fragmentation issues. By default, the page memory allocates a single expandable data region. All the caches that will be configured in an application will be mapped to this data region by default, thus, all the cache data will reside in that data region. ExecutorConfiguration Custom thread pool configuration for compute tasks. See WithExecutor(String) . LockConfiguration IIgniteLock configuration. SqlConnectorConfiguration SQL connector configuration (for ODBC and JDBC). ThinClientConfiguration Server-side thin client specific configuration. Enums CheckpointWriteOrder Defines checkpoint pages order on disk. DataPageEvictionMode Memory page eviction mode. Only data pages, that store key-value entries, are eligible for eviction. The other types of pages, like index or system pages, are not evictable. DiskPageCompression Disk page compression options. WalMode Write Ahead Log mode."
  },
  "api/Apache.Ignite.Core.DataStructures.IAtomicSequence.html": {
    "href": "api/Apache.Ignite.Core.DataStructures.IAtomicSequence.html",
    "title": "Interface IAtomicSequence | Apache Ignite.NET",
    "keywords": "Interface IAtomicSequence Represents a distributed atomic sequence of numbers. Namespace : Apache.Ignite.Core.DataStructures Assembly : Apache.Ignite.Core.dll Syntax public interface IAtomicSequence Properties BatchSize Gets local batch size for this atomic sequence. Declaration int BatchSize { get; set; } Property Value Type Description System.Int32 Sequence batch size. IsClosed Determines whether this instance was removed from cache. Declaration bool IsClosed { get; } Property Value Type Description System.Boolean True if this atomic was removed from cache; otherwise, false. Name Gets the name of this atomic sequence. Declaration string Name { get; } Property Value Type Description System.String Name of this atomic sequence. Methods Add(Int64) Adds specified value to the current value and returns result. Declaration long Add(long value) Parameters Type Name Description System.Int64 value The value to add. Returns Type Description System.Int64 The new value of the atomic sequence. Close() Closes this instance. Declaration void Close() Increment() Increments current value and returns result. Declaration long Increment() Returns Type Description System.Int64 The new value of the atomic sequence. Read() Returns current value. Declaration long Read() Returns Type Description System.Int64 Current value of the atomic sequence."
  },
  "api/Apache.Ignite.Core.DataStructures.html": {
    "href": "api/Apache.Ignite.Core.DataStructures.html",
    "title": "Namespace Apache.Ignite.Core.DataStructures | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.DataStructures Interfaces IAtomicLong Represents a distributed atomic long value. IAtomicReference<T> Represents a named value in the distributed cache. IAtomicSequence Represents a distributed atomic sequence of numbers."
  },
  "api/Apache.Ignite.Core.Deployment.PeerAssemblyLoadingMode.html": {
    "href": "api/Apache.Ignite.Core.Deployment.PeerAssemblyLoadingMode.html",
    "title": "Enum PeerAssemblyLoadingMode | Apache Ignite.NET",
    "keywords": "Enum PeerAssemblyLoadingMode Peer assembly loading mode. See PeerAssemblyLoadingMode . Namespace : Apache.Ignite.Core.Deployment Assembly : Apache.Ignite.Core.dll Syntax public enum PeerAssemblyLoadingMode Fields Name Description CurrentAppDomain Automatically load assemblies from remote nodes into the current System.AppDomain . .NET does not allow assembly unloading, which means that all peer-loaded assemblies will live as long as the current AppDomain lives. This may cause increased memory usage. Assemblies are distinguished using their fully qualified name. Multiple versions of the same assembly can be loaded and the correct version will be used (according to Type.AssemblyQualifiedName). So in case when a new version of some type needs to be executed on remote nodes, corresponding assembly version should be bumped up. If assembly is recompiled without version increment, it is considered the same as before and won't be updated. Assemblies are requested from remote nodes on demand. For example, IComputeFunc<TRes> is sent to all nodes via Broadcast<TRes>(IComputeFunc<TRes>) . Each node then deserializes the instance and, if containing assembly is not present, requests it from originating node (which did the Broadcast<TRes>(IComputeFunc<TRes>) call), if it is alive, or from any other node in cluster. Therefore it is possible that eventually all nodes in cluster will have this assebly loaded. Disabled Disabled peer assembly loading. Default mode."
  },
  "api/Apache.Ignite.Core.Deployment.html": {
    "href": "api/Apache.Ignite.Core.Deployment.html",
    "title": "Namespace Apache.Ignite.Core.Deployment | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Deployment Enums PeerAssemblyLoadingMode Peer assembly loading mode. See PeerAssemblyLoadingMode ."
  },
  "api/Apache.Ignite.Core.Events.IEventStorageSpi.html": {
    "href": "api/Apache.Ignite.Core.Events.IEventStorageSpi.html",
    "title": "Interface IEventStorageSpi | Apache Ignite.NET",
    "keywords": "Interface IEventStorageSpi Manages local event storage. Only predefined implementations are supported: NoopEventStorageSpi , MemoryEventStorageSpi . Namespace : Apache.Ignite.Core.Events Assembly : Apache.Ignite.Core.dll Syntax public interface IEventStorageSpi"
  },
  "api/Apache.Ignite.Core.Events.JobEvent.html": {
    "href": "api/Apache.Ignite.Core.Events.JobEvent.html",
    "title": "Class JobEvent | Apache Ignite.NET",
    "keywords": "Class JobEvent Ignite job event. Inheritance System.Object EventBase JobEvent Implements IEvent System.IEquatable < EventBase > Inherited Members EventBase.Id EventBase.LocalOrder EventBase.Node EventBase.Message EventBase.Type EventBase.Name EventBase.Timestamp EventBase.Equals(EventBase) EventBase.Equals(Object) EventBase.GetHashCode() EventBase.ToString() EventBase.ReadNode(IBinaryRawReader) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Events Assembly : Apache.Ignite.Core.dll Syntax public sealed class JobEvent : EventBase, IEvent, IEquatable<EventBase> Properties JobId Gets job ID. Declaration public IgniteGuid? JobId { get; } Property Value Type Description System.Nullable < IgniteGuid > TaskClassName Gets name of task class that triggered this event. Declaration public string TaskClassName { get; } Property Value Type Description System.String TaskName Gets name of the task that triggered the event. Declaration public string TaskName { get; } Property Value Type Description System.String TaskNode Get node where parent task of the job has originated. Declaration public IClusterNode TaskNode { get; } Property Value Type Description IClusterNode TaskSessionId Gets task session ID of the task that triggered this event. Declaration public IgniteGuid? TaskSessionId { get; } Property Value Type Description System.Nullable < IgniteGuid > TaskSubjectId Gets task subject ID. Declaration public Guid? TaskSubjectId { get; } Property Value Type Description System.Nullable < System.Guid > Methods ToShortString() Gets shortened version of ToString result. Declaration public override string ToShortString() Returns Type Description System.String Overrides EventBase.ToShortString() Implements IEvent System.IEquatable<T>"
  },
  "api/Apache.Ignite.Core.Events.LocalEventListener-1.html": {
    "href": "api/Apache.Ignite.Core.Events.LocalEventListener-1.html",
    "title": "Class LocalEventListener<T> | Apache Ignite.NET",
    "keywords": "Class LocalEventListener<T> Generic local event listener holder, see LocalEventListeners . Inheritance System.Object LocalEventListener LocalEventListener<T> Inherited Members LocalEventListener.EventTypes System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Events Assembly : Apache.Ignite.Core.dll Syntax public class LocalEventListener<T> : LocalEventListener where T : IEvent Type Parameters Name Description T Properties Listener Gets or sets the listener. Declaration public IEventListener<T> Listener { get; set; } Property Value Type Description IEventListener <T>"
  },
  "api/Apache.Ignite.Core.Events.LocalEventListener.html": {
    "href": "api/Apache.Ignite.Core.Events.LocalEventListener.html",
    "title": "Class LocalEventListener | Apache Ignite.NET",
    "keywords": "Class LocalEventListener Abstract local event listener holder for LocalEventListeners . Use LocalEventListener<T> derived class. Inheritance System.Object LocalEventListener LocalEventListener <T> Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Events Assembly : Apache.Ignite.Core.dll Syntax public abstract class LocalEventListener Constructors LocalEventListener() Initializes a new instance of the LocalEventListener class. Declaration protected LocalEventListener() Properties EventTypes Gets or sets the event types. Declaration public ICollection<int> EventTypes { get; set; } Property Value Type Description System.Collections.Generic.ICollection < System.Int32 >"
  },
  "api/Apache.Ignite.Core.IgniteConfigurationSection.html": {
    "href": "api/Apache.Ignite.Core.IgniteConfigurationSection.html",
    "title": "Class IgniteConfigurationSection | Apache Ignite.NET",
    "keywords": "Class IgniteConfigurationSection Ignite configuration section for app.config and web.config files. Inheritance System.Object System.Configuration.ConfigurationElement System.Configuration.ConfigurationSection IgniteConfigurationSection Inherited Members System.Configuration.ConfigurationSection.GetRuntimeObject() System.Configuration.ConfigurationSection.IsModified() System.Configuration.ConfigurationSection.ResetModified() System.Configuration.ConfigurationSection.ShouldSerializePropertyInTargetVersion(System.Configuration.ConfigurationProperty, System.String, System.Runtime.Versioning.FrameworkName, System.Configuration.ConfigurationElement) System.Configuration.ConfigurationSection.ShouldSerializeElementInTargetVersion(System.Configuration.ConfigurationElement, System.String, System.Runtime.Versioning.FrameworkName) System.Configuration.ConfigurationSection.ShouldSerializeSectionInTargetVersion(System.Runtime.Versioning.FrameworkName) System.Configuration.ConfigurationSection.SectionInformation System.Configuration.ConfigurationElement.Init() System.Configuration.ConfigurationElement.IsReadOnly() System.Configuration.ConfigurationElement.SetReadOnly() System.Configuration.ConfigurationElement.ListErrors(System.Collections.IList) System.Configuration.ConfigurationElement.InitializeDefault() System.Configuration.ConfigurationElement.Reset(System.Configuration.ConfigurationElement) System.Configuration.ConfigurationElement.Equals(System.Object) System.Configuration.ConfigurationElement.GetHashCode() System.Configuration.ConfigurationElement.SetPropertyValue(System.Configuration.ConfigurationProperty, System.Object, System.Boolean) System.Configuration.ConfigurationElement.Unmerge(System.Configuration.ConfigurationElement, System.Configuration.ConfigurationElement, System.Configuration.ConfigurationSaveMode) System.Configuration.ConfigurationElement.SerializeToXmlElement(System.Xml.XmlWriter, System.String) System.Configuration.ConfigurationElement.SerializeElement(System.Xml.XmlWriter, System.Boolean) System.Configuration.ConfigurationElement.DeserializeElement(System.Xml.XmlReader, System.Boolean) System.Configuration.ConfigurationElement.OnRequiredPropertyNotFound(System.String) System.Configuration.ConfigurationElement.PostDeserialize() System.Configuration.ConfigurationElement.PreSerialize(System.Xml.XmlWriter) System.Configuration.ConfigurationElement.OnDeserializeUnrecognizedAttribute(System.String, System.String) System.Configuration.ConfigurationElement.OnDeserializeUnrecognizedElement(System.String, System.Xml.XmlReader) System.Configuration.ConfigurationElement.GetTransformedTypeString(System.String) System.Configuration.ConfigurationElement.GetTransformedAssemblyString(System.String) System.Configuration.ConfigurationElement.LockAttributes System.Configuration.ConfigurationElement.LockAllAttributesExcept System.Configuration.ConfigurationElement.LockElements System.Configuration.ConfigurationElement.LockAllElementsExcept System.Configuration.ConfigurationElement.LockItem System.Configuration.ConfigurationElement.Item[System.Configuration.ConfigurationProperty] System.Configuration.ConfigurationElement.Item[System.String] System.Configuration.ConfigurationElement.Properties System.Configuration.ConfigurationElement.ElementInformation System.Configuration.ConfigurationElement.EvaluationContext System.Configuration.ConfigurationElement.ElementProperty System.Configuration.ConfigurationElement.CurrentConfiguration System.Object.ToString() System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core Assembly : Apache.Ignite.Core.dll Syntax public class IgniteConfigurationSection : ConfigurationSection Properties IgniteConfiguration Gets or sets the ignite configuration. Declaration public IgniteConfiguration IgniteConfiguration { get; } Property Value Type Description IgniteConfiguration The ignite configuration. Methods DeserializeSection(XmlReader) Reads XML from the configuration file. Declaration protected override void DeserializeSection(XmlReader reader) Parameters Type Name Description System.Xml.XmlReader reader The reader object, which reads from the configuration file. Overrides System.Configuration.ConfigurationSection.DeserializeSection(System.Xml.XmlReader) SerializeSection(ConfigurationElement, String, ConfigurationSaveMode) Creates an XML string containing an unmerged view of the System.Configuration.ConfigurationSection object as a single section to write to a file. Declaration protected override string SerializeSection(ConfigurationElement parentElement, string name, ConfigurationSaveMode saveMode) Parameters Type Name Description System.Configuration.ConfigurationElement parentElement The System.Configuration.ConfigurationElement instance to use as the parent when performing the un-merge. System.String name The name of the section to create. System.Configuration.ConfigurationSaveMode saveMode The System.Configuration.ConfigurationSaveMode instance to use when writing to a string. Returns Type Description System.String An XML string containing an unmerged view of the System.Configuration.ConfigurationSection object. Overrides System.Configuration.ConfigurationSection.SerializeSection(System.Configuration.ConfigurationElement, System.String, System.Configuration.ConfigurationSaveMode)"
  },
  "api/Apache.Ignite.Core.Ignition.html": {
    "href": "api/Apache.Ignite.Core.Ignition.html",
    "title": "Class Ignition | Apache Ignite.NET",
    "keywords": "Class Ignition This class defines a factory for the main Ignite API. Use Start() method to start Ignite with default configuration. All members are thread-safe and may be used concurrently from multiple threads. Inheritance System.Object Ignition Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core Assembly : Apache.Ignite.Core.dll Syntax public static class Ignition Fields ClientConfigurationSectionName Default configuration section name. Declaration public const string ClientConfigurationSectionName = \"igniteClientConfiguration\" Field Value Type Description System.String ConfigurationSectionName Default configuration section name. Declaration public const string ConfigurationSectionName = \"igniteConfiguration\" Field Value Type Description System.String Properties ClientMode Gets or sets a value indicating whether Ignite should be started in client mode. Client nodes cannot hold data in caches. Declaration public static bool ClientMode { get; set; } Property Value Type Description System.Boolean Methods GetAll() Gets all started Ignite instances. Declaration public static ICollection<IIgnite> GetAll() Returns Type Description System.Collections.Generic.ICollection < IIgnite > All Ignite instances. GetIgnite() Gets the default Ignite instance with null name, or an instance with any name when there is only one. Note that caller of this method should not assume that it will return the same instance every time. Declaration public static IIgnite GetIgnite() Returns Type Description IIgnite Default Ignite instance. Exceptions Type Condition IgniteException When there is no matching Ignite instance. GetIgnite(String) Gets a named Ignite instance. If Ignite name is null or empty string, then default no-name Ignite will be returned. Note that caller of this method should not assume that it will return the same instance every time. Note that single process can run multiple Ignite instances and every Ignite instance (and its node) can belong to a different grid. Ignite name defines what grid a particular Ignite instance (and correspondingly its node) belongs to. Declaration public static IIgnite GetIgnite(string name) Parameters Type Name Description System.String name Ignite name to which requested Ignite instance belongs. If null , then Ignite instance belonging to a default no-name Ignite will be returned. Returns Type Description IIgnite An instance of named grid. Exceptions Type Condition IgniteException When there is no Ignite instance with specified name. Start() Starts Ignite with default configuration. By default this method will use Ignite configuration defined in {IGNITE_HOME}/config/default-config.xml configuration file. If such file is not found, then all system defaults will be used. Declaration public static IIgnite Start() Returns Type Description IIgnite Started Ignite. Start(IgniteConfiguration) Starts Ignite with given configuration. Declaration public static IIgnite Start(IgniteConfiguration cfg) Parameters Type Name Description IgniteConfiguration cfg Returns Type Description IIgnite Started Ignite. Start(String) Starts all grids specified within given Spring XML configuration file. If Ignite with given name is already started, then exception is thrown. In this case all instances that may have been started so far will be stopped too. Declaration public static IIgnite Start(string springCfgPath) Parameters Type Name Description System.String springCfgPath Spring XML configuration file path or URL. Note, that the path can be absolute or relative to IGNITE_HOME. Returns Type Description IIgnite Started Ignite. If Spring configuration contains multiple Ignite instances, then the 1st found instance is returned. StartClient() Reads IgniteClientConfiguration from application configuration IgniteClientConfigurationSection with ClientConfigurationSectionName name and connects Ignite lightweight (thin) client to an Ignite node. Thin client connects to an existing Ignite node with a socket and does not start JVM in process. Declaration public static IIgniteClient StartClient() Returns Type Description IIgniteClient Ignite client instance. StartClient(IgniteClientConfiguration) Connects Ignite lightweight (thin) client to an Ignite node. Thin client connects to an existing Ignite node with a socket and does not start JVM in process. Declaration public static IIgniteClient StartClient(IgniteClientConfiguration clientConfiguration) Parameters Type Name Description IgniteClientConfiguration clientConfiguration The client configuration. Returns Type Description IIgniteClient Ignite client instance. StartClient(String) Reads IgniteClientConfiguration from application configuration IgniteClientConfigurationSection with specified name and connects Ignite lightweight (thin) client to an Ignite node. Thin client connects to an existing Ignite node with a socket and does not start JVM in process. Declaration public static IIgniteClient StartClient(string sectionName) Parameters Type Name Description System.String sectionName Name of the configuration section. Returns Type Description IIgniteClient Ignite client instance. StartClient(String, String) Reads IgniteConfiguration from application configuration IgniteConfigurationSection with specified name and starts Ignite. Declaration public static IIgniteClient StartClient(string sectionName, string configPath) Parameters Type Name Description System.String sectionName Name of the section. System.String configPath Path to the configuration file. Returns Type Description IIgniteClient Started Ignite. StartFromApplicationConfiguration() Reads IgniteConfiguration from application configuration IgniteConfigurationSection with ConfigurationSectionName name and starts Ignite. Declaration public static IIgnite StartFromApplicationConfiguration() Returns Type Description IIgnite Started Ignite. StartFromApplicationConfiguration(String) Reads IgniteConfiguration from application configuration IgniteConfigurationSection with specified name and starts Ignite. Declaration public static IIgnite StartFromApplicationConfiguration(string sectionName) Parameters Type Name Description System.String sectionName Name of the section. Returns Type Description IIgnite Started Ignite. StartFromApplicationConfiguration(String, String) Reads IgniteConfiguration from application configuration IgniteConfigurationSection with specified name and starts Ignite. Declaration public static IIgnite StartFromApplicationConfiguration(string sectionName, string configPath) Parameters Type Name Description System.String sectionName Name of the section. System.String configPath Path to the configuration file. Returns Type Description IIgnite Started Ignite. Stop(String, Boolean) Stops named grid. If cancel flag is set to true then all jobs currently executing on local node will be interrupted. If grid name is null , then default no-name Ignite will be stopped. Declaration public static bool Stop(string name, bool cancel) Parameters Type Name Description System.String name Grid name. If null , then default no-name Ignite will be stopped. System.Boolean cancel If true then all jobs currently executing will be cancelled by calling ComputeJob.cancel method. Returns Type Description System.Boolean true if named Ignite instance was indeed found and stopped, false othwerwise (the instance with given name was not found). StopAll(Boolean) Stops all started grids. If cancel flag is set to true then all jobs currently executing on local node will be interrupted. Declaration public static void StopAll(bool cancel) Parameters Type Name Description System.Boolean cancel If true then all jobs currently executing will be cancelled by calling ComputeJob.Cancel() method. TryGetIgnite() Gets the default Ignite instance with null name, or an instance with any name when there is only one. Returns null when there are no Ignite instances started, or when there are more than one, and none of them has null name. Declaration public static IIgnite TryGetIgnite() Returns Type Description IIgnite An instance of default no-name grid, or null. TryGetIgnite(String) Gets a named Ignite instance, or null if none found. If Ignite name is null or empty string, then default no-name Ignite will be returned. Note that caller of this method should not assume that it will return the same instance every time. Note that single process can run multiple Ignite instances and every Ignite instance (and its node) can belong to a different grid. Ignite name defines what grid a particular Ignite instance (and correspondingly its node) belongs to. Declaration public static IIgnite TryGetIgnite(string name) Parameters Type Name Description System.String name Ignite name to which requested Ignite instance belongs. If null , then Ignite instance belonging to a default no-name Ignite will be returned. Returns Type Description IIgnite An instance of named grid, or null."
  },
  "api/Apache.Ignite.Core.IIgnite.html": {
    "href": "api/Apache.Ignite.Core.IIgnite.html",
    "title": "Interface IIgnite | Apache Ignite.NET",
    "keywords": "Interface IIgnite Main entry point for all Ignite APIs. You can obtain an instance of IIgnite through GetIgnite() , or for named grids you can use GetIgnite(String) . Note that you can have multiple instances of IIgnite running in the same process by giving each instance a different name. All members are thread-safe and may be used concurrently from multiple threads. Inherited Members System.IDisposable.Dispose() Namespace : Apache.Ignite.Core Assembly : Apache.Ignite.Core.dll Syntax public interface IIgnite : IDisposable Properties Logger Gets the logger. See Logger for customization. Declaration ILogger Logger { get; } Property Value Type Description ILogger Name Gets the name of the grid this Ignite instance (and correspondingly its local node) belongs to. Note that single process can have multiple Ignite instances all belonging to different grids. Grid name allows to indicate to what grid this particular Ignite instance (i.e. Ignite runtime and its local node) belongs to. If default Ignite instance is used, then null is returned. Refer to Ignition documentation for information on how to start named grids. Declaration string Name { get; } Property Value Type Description System.String Name of the grid, or null for default grid. Methods AddCacheConfiguration(CacheConfiguration) Adds cache configuration template. Name should contain *. Template settings are applied to a cache created with CreateCache<TK, TV>(String) if specified name matches the template name. Declaration void AddCacheConfiguration(CacheConfiguration configuration) Parameters Type Name Description CacheConfiguration configuration Configuration. CreateCache<TK, TV>(CacheConfiguration) Dynamically starts new cache using provided configuration. Declaration ICache<TK, TV> CreateCache<TK, TV>(CacheConfiguration configuration) Parameters Type Name Description CacheConfiguration configuration Cache configuration. Returns Type Description ICache <TK, TV> Existing or newly created cache. Type Parameters Name Description TK Cache key type. TV Cache value type. CreateCache<TK, TV>(CacheConfiguration, NearCacheConfiguration) Dynamically starts new cache using provided configuration. Declaration ICache<TK, TV> CreateCache<TK, TV>(CacheConfiguration configuration, NearCacheConfiguration nearConfiguration) Parameters Type Name Description CacheConfiguration configuration Cache configuration. NearCacheConfiguration nearConfiguration Near cache configuration for client. Returns Type Description ICache <TK, TV> Existing or newly created cache. Type Parameters Name Description TK Cache key type. TV Cache value type. CreateCache<TK, TV>(CacheConfiguration, NearCacheConfiguration, PlatformCacheConfiguration) Dynamically starts new cache using provided configuration. Declaration ICache<TK, TV> CreateCache<TK, TV>(CacheConfiguration configuration, NearCacheConfiguration nearConfiguration, PlatformCacheConfiguration platformCacheConfiguration) Parameters Type Name Description CacheConfiguration configuration Cache configuration. NearCacheConfiguration nearConfiguration Near cache configuration for client. PlatformCacheConfiguration platformCacheConfiguration Platform cache configuration. Can be null. When not null, native .NET cache is created additionally. Returns Type Description ICache <TK, TV> Existing or newly created cache. Type Parameters Name Description TK Cache key type. TV Cache value type. CreateCache<TK, TV>(String) Dynamically starts new cache using template configuration. Declaration ICache<TK, TV> CreateCache<TK, TV>(string name) Parameters Type Name Description System.String name Cache name. Returns Type Description ICache <TK, TV> Existing or newly created cache. Type Parameters Name Description TK Cache key type. TV Cache value type. CreateNearCache<TK, TV>(String, NearCacheConfiguration) Starts a near cache on local client node if cache with specified was previously started. This method does not work on server nodes. Declaration ICache<TK, TV> CreateNearCache<TK, TV>(string name, NearCacheConfiguration configuration) Parameters Type Name Description System.String name The name. NearCacheConfiguration configuration The configuration. Returns Type Description ICache <TK, TV> Near cache instance. Type Parameters Name Description TK Cache key type. TV Cache value type. CreateNearCache<TK, TV>(String, NearCacheConfiguration, PlatformCacheConfiguration) Starts a near cache on local client node if cache with specified was previously started. This method does not work on server nodes. Declaration ICache<TK, TV> CreateNearCache<TK, TV>(string name, NearCacheConfiguration configuration, PlatformCacheConfiguration platformConfiguration) Parameters Type Name Description System.String name The name. NearCacheConfiguration configuration The configuration. PlatformCacheConfiguration platformConfiguration Platform cache configuration. Can be null. When not null, native .NET cache is created additionally. Returns Type Description ICache <TK, TV> Near cache instance. Type Parameters Name Description TK Cache key type. TV Cache value type. DestroyCache(String) Destroys dynamically created (with CreateCache<TK, TV>(String) or GetOrCreateCache<TK, TV>(String) ) cache. Declaration void DestroyCache(string name) Parameters Type Name Description System.String name The name of the cache to stop. GetAffinity(String) Gets affinity service to provide information about data partitioning and distribution. Declaration ICacheAffinity GetAffinity(string name) Parameters Type Name Description System.String name Cache name. Returns Type Description ICacheAffinity Cache data affinity service. GetAtomicLong(String, Int64, Boolean) Gets an atomic long with specified name from cache. Creates new atomic long in cache if it does not exist and create is true. Declaration IAtomicLong GetAtomicLong(string name, long initialValue, bool create) Parameters Type Name Description System.String name Name of the atomic long. System.Int64 initialValue Initial value for the atomic long. Ignored if create is false. System.Boolean create Flag indicating whether atomic long should be created if it does not exist. Returns Type Description IAtomicLong Atomic long instance with specified name, or null if it does not exist and create flag is not set. Exceptions Type Condition IgniteException If atomic long could not be fetched or created. GetAtomicReference<T>(String, T, Boolean) Gets an atomic reference with specified name from cache. Creates new atomic reference in cache if it does not exist and create is true. Declaration IAtomicReference<T> GetAtomicReference<T>(string name, T initialValue, bool create) Parameters Type Name Description System.String name Name of the atomic reference. T initialValue Initial value for the atomic reference. Ignored if create is false. System.Boolean create Flag indicating whether atomic reference should be created if it does not exist. Returns Type Description IAtomicReference <T> Atomic reference instance with specified name, or null if it does not exist and create flag is not set. Type Parameters Name Description T Exceptions Type Condition IgniteException If atomic reference could not be fetched or created. GetAtomicSequence(String, Int64, Boolean) Gets an atomic sequence with specified name from cache. Creates new atomic sequence in cache if it does not exist and create is true. Declaration IAtomicSequence GetAtomicSequence(string name, long initialValue, bool create) Parameters Type Name Description System.String name Name of the atomic sequence. System.Int64 initialValue Initial value for the atomic sequence. Ignored if create is false. System.Boolean create Flag indicating whether atomic sequence should be created if it does not exist. Returns Type Description IAtomicSequence Atomic sequence instance with specified name, or null if it does not exist and create flag is not set. Exceptions Type Condition IgniteException If atomic sequence could not be fetched or created. GetBinary() Gets an instance of IBinary interface. Declaration IBinary GetBinary() Returns Type Description IBinary Instance of IBinary interface GetCache<TK, TV>(String) Gets the cache instance for the given name to work with keys and values of specified types. You can get instances of ICache of the same name, but with different key/value types. These will use the same named cache, but only allow working with entries of specified types. Attempt to retrieve an entry of incompatible type will result in System.InvalidCastException . Use GetCache<TK, TV>(String) in order to work with entries of arbitrary types. Declaration ICache<TK, TV> GetCache<TK, TV>(string name) Parameters Type Name Description System.String name Cache name. Returns Type Description ICache <TK, TV> Cache instance for given name. Type Parameters Name Description TK Cache key type. TV Cache value type. GetCacheNames() Gets the collection of names of currently available caches, or empty collection if there are no caches. Declaration ICollection<string> GetCacheNames() Returns Type Description System.Collections.Generic.ICollection < System.String > Collection of names of currently available caches. GetCluster() Gets an instance of ICluster interface. Declaration ICluster GetCluster() Returns Type Description ICluster GetCompute() Gets compute functionality over this grid projection. All operations on the returned ICompute instance will only include nodes from this projection. Declaration ICompute GetCompute() Returns Type Description ICompute Compute instance over this grid projection. GetConfiguration() Gets the configuration of this Ignite instance. Declaration IgniteConfiguration GetConfiguration() Returns Type Description IgniteConfiguration GetDataRegionMetrics() Gets a collection of memory metrics, one for each DataRegionConfigurations . Metrics should be enabled with MetricsEnabled . Declaration ICollection<IDataRegionMetrics> GetDataRegionMetrics() Returns Type Description System.Collections.Generic.ICollection < IDataRegionMetrics > GetDataRegionMetrics(String) Gets the memory metrics for the specified data region. To get metrics for the default memory region, use DefaultDataRegionName . Declaration IDataRegionMetrics GetDataRegionMetrics(string dataRegionName) Parameters Type Name Description System.String dataRegionName Name of the data region. Returns Type Description IDataRegionMetrics GetDataStorageMetrics() Gets the persistent store metrics. To enable metrics set MetricsEnabled property in DataStorageConfiguration . Declaration IDataStorageMetrics GetDataStorageMetrics() Returns Type Description IDataStorageMetrics GetDataStreamer<TK, TV>(String) Gets a new instance of data streamer associated with given cache name. Data streamer is responsible for loading external data into Ignite. For more information refer to IDataStreamer<TK, TV> documentation. Declaration IDataStreamer<TK, TV> GetDataStreamer<TK, TV>(string cacheName) Parameters Type Name Description System.String cacheName Cache name ( null for default cache). Returns Type Description IDataStreamer <TK, TV> Data streamer. Type Parameters Name Description TK TV GetEvents() Gets events facade over all cluster nodes. Declaration IEvents GetEvents() Returns Type Description IEvents Events facade over all cluster nodes. GetMemoryMetrics() Gets a collection of memory metrics, one for each MemoryPolicies . Memory metrics should be enabled with MetricsEnabled . Obsolete, use GetDataRegionMetrics() . Declaration [Obsolete(\"Use GetDataRegionMetrics.\")] ICollection<IMemoryMetrics> GetMemoryMetrics() Returns Type Description System.Collections.Generic.ICollection < IMemoryMetrics > GetMemoryMetrics(String) Gets the memory metrics for the specified memory policy. To get metrics for the default memory region, use DefaultMemoryPolicyName . Obsolete, use GetDataRegionMetrics(String) . Declaration [Obsolete(\"Use GetDataRegionMetrics.\")] IMemoryMetrics GetMemoryMetrics(string memoryPolicyName) Parameters Type Name Description System.String memoryPolicyName Name of the memory policy. Returns Type Description IMemoryMetrics GetMessaging() Gets messaging facade over all cluster nodes. Declaration IMessaging GetMessaging() Returns Type Description IMessaging Messaging instance over all cluster nodes. GetOrCreateCache<TK, TV>(CacheConfiguration) Gets existing cache with the given name or creates new one using provided configuration. Declaration ICache<TK, TV> GetOrCreateCache<TK, TV>(CacheConfiguration configuration) Parameters Type Name Description CacheConfiguration configuration Cache configuration. Returns Type Description ICache <TK, TV> Existing or newly created cache. Type Parameters Name Description TK Cache key type. TV Cache value type. GetOrCreateCache<TK, TV>(CacheConfiguration, NearCacheConfiguration) Gets existing cache with the given name or creates new one using provided configuration. Declaration ICache<TK, TV> GetOrCreateCache<TK, TV>(CacheConfiguration configuration, NearCacheConfiguration nearConfiguration) Parameters Type Name Description CacheConfiguration configuration Cache configuration. NearCacheConfiguration nearConfiguration Near cache configuration for client. Returns Type Description ICache <TK, TV> Existing or newly created cache. Type Parameters Name Description TK Cache key type. TV Cache value type. GetOrCreateCache<TK, TV>(CacheConfiguration, NearCacheConfiguration, PlatformCacheConfiguration) Gets existing cache with the given name or creates new one using provided configuration. Declaration ICache<TK, TV> GetOrCreateCache<TK, TV>(CacheConfiguration configuration, NearCacheConfiguration nearConfiguration, PlatformCacheConfiguration platformCacheConfiguration) Parameters Type Name Description CacheConfiguration configuration Cache configuration. NearCacheConfiguration nearConfiguration Near cache configuration for client. PlatformCacheConfiguration platformCacheConfiguration Platform cache configuration. Can be null. When not null, native .NET cache is created additionally. Returns Type Description ICache <TK, TV> Existing or newly created cache. Type Parameters Name Description TK Cache key type. TV Cache value type. GetOrCreateCache<TK, TV>(String) Gets existing cache with the given name or creates new one using template configuration. Declaration ICache<TK, TV> GetOrCreateCache<TK, TV>(string name) Parameters Type Name Description System.String name Cache name. Returns Type Description ICache <TK, TV> Existing or newly created cache. Type Parameters Name Description TK Cache key type. TV Cache value type. GetOrCreateLock(LockConfiguration, Boolean) Gets or creates a distributed reentrant lock (monitor). Declaration IIgniteLock GetOrCreateLock(LockConfiguration configuration, bool create) Parameters Type Name Description LockConfiguration configuration Lock configuration. System.Boolean create Whether the lock should be created if it does not exist. Returns Type Description IIgniteLock IIgniteLock GetOrCreateLock(String) Gets or creates a distributed reentrant lock (monitor) with default configuration. Declaration IIgniteLock GetOrCreateLock(string name) Parameters Type Name Description System.String name Lock name. Returns Type Description IIgniteLock IIgniteLock GetOrCreateNearCache<TK, TV>(String, NearCacheConfiguration) Gets existing near cache with the given name or creates a new one. Declaration ICache<TK, TV> GetOrCreateNearCache<TK, TV>(string name, NearCacheConfiguration configuration) Parameters Type Name Description System.String name The name. NearCacheConfiguration configuration The configuration. Returns Type Description ICache <TK, TV> Near cache instance. Type Parameters Name Description TK Cache key type. TV Cache value type. GetOrCreateNearCache<TK, TV>(String, NearCacheConfiguration, PlatformCacheConfiguration) Gets existing near cache with the given name or creates a new one. Declaration ICache<TK, TV> GetOrCreateNearCache<TK, TV>(string name, NearCacheConfiguration configuration, PlatformCacheConfiguration platformConfiguration) Parameters Type Name Description System.String name The name. NearCacheConfiguration configuration The configuration. PlatformCacheConfiguration platformConfiguration Platform cache configuration. Can be null. When not null, native .NET cache is created additionally. Returns Type Description ICache <TK, TV> Near cache instance. Type Parameters Name Description TK Cache key type. TV Cache value type. GetPersistentStoreMetrics() Gets the persistent store metrics. To enable metrics set MetricsEnabled property in PersistentStoreConfiguration . Declaration [Obsolete(\"Use GetDataStorageMetrics.\")] IPersistentStoreMetrics GetPersistentStoreMetrics() Returns Type Description IPersistentStoreMetrics GetPlugin<T>(String) Gets the plugin by name. Declaration T GetPlugin<T>(string name)where T : class Parameters Type Name Description System.String name Plugin name. Returns Type Description T Plugin instance. Type Parameters Name Description T Plugin type Exceptions Type Condition PluginNotFoundException When plugin with specified name has not been found. GetServices() Gets services facade over all cluster nodes. Declaration IServices GetServices() Returns Type Description IServices Services facade over all cluster nodes. GetTransactions() Gets Ignite transactions facade. Declaration ITransactions GetTransactions() Returns Type Description ITransactions GetVersion() Gets Ignite version. Declaration IgniteProductVersion GetVersion() Returns Type Description IgniteProductVersion Ignite node version. IsActive() Determines whether this grid is in active state. Declaration [Obsolete(\"Use GetCluster().IsActive instead.\")] bool IsActive() Returns Type Description System.Boolean true if the grid is active; otherwise, false . ResetLostPartitions(IEnumerable<String>) Clears partitions' lost state and moves caches to a normal mode. Declaration void ResetLostPartitions(IEnumerable<string> cacheNames) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.String > cacheNames Names of caches to reset partitions for. ResetLostPartitions(String[]) Clears partitions' lost state and moves caches to a normal mode. Declaration void ResetLostPartitions(params string[] cacheNames) Parameters Type Name Description System.String [] cacheNames Names of caches to reset partitions for. SetActive(Boolean) Changes Ignite grid state to active or inactive. Declaration [Obsolete(\"Use GetCluster().SetActive instead.\")] void SetActive(bool isActive) Parameters Type Name Description System.Boolean isActive Events ClientDisconnected Occurs when client node disconnects from the cluster. This event can only occur when this instance runs in client mode ( ClientMode ). Declaration event EventHandler ClientDisconnected Event Type Type Description System.EventHandler ClientReconnected Occurs when client node reconnects to the cluster. This event can only occur when this instance runs in client mode ( ClientMode ). Declaration event EventHandler<ClientReconnectEventArgs> ClientReconnected Event Type Type Description System.EventHandler < ClientReconnectEventArgs > Stopped Occurs when node has stopped. Node can't be used at this point. See also: AfterNodeStop . Declaration event EventHandler Stopped Event Type Type Description System.EventHandler Stopping Occurs when node begins to stop. Node is fully functional at this point. See also: BeforeNodeStop . Declaration event EventHandler Stopping Event Type Type Description System.EventHandler"
  },
  "api/Apache.Ignite.Core.IIgniteLock.html": {
    "href": "api/Apache.Ignite.Core.IIgniteLock.html",
    "title": "Interface IIgniteLock | Apache Ignite.NET",
    "keywords": "Interface IIgniteLock Distributed reentrant monitor (lock). The functionality is similar to the standard System.Threading.Monitor class, but works across all cluster nodes. This API corresponds to IgniteLock in Java. Namespace : Apache.Ignite.Core Assembly : Apache.Ignite.Core.dll Syntax public interface IIgniteLock Properties Configuration Gets the lock configuration. Declaration LockConfiguration Configuration { get; } Property Value Type Description LockConfiguration Methods Enter() Acquires the distributed reentrant lock. Declaration void Enter() Exit() Releases the lock. Declaration void Exit() IsBroken() Returns a value indicating whether any node that owned the lock failed before releasing the lock. Declaration bool IsBroken() Returns Type Description System.Boolean IsEntered() Determines whether the current thread holds the lock. Declaration bool IsEntered() Returns Type Description System.Boolean IsRemoved() Gets a value indicating whether the lock has been removed from the cluster. Declaration bool IsRemoved() Returns Type Description System.Boolean Remove() Removes the lock from the cluster. Declaration void Remove() TryEnter() Acquires the lock only if it is free at the time of invocation. Declaration bool TryEnter() Returns Type Description System.Boolean True if the lock was acquired; false otherwise. TryEnter(TimeSpan) Acquires the lock if it is not held by another thread within the given waiting time. Declaration bool TryEnter(TimeSpan timeout) Parameters Type Name Description System.TimeSpan timeout Time to wait for the lock. Returns Type Description System.Boolean True if the lock was acquired; false otherwise."
  },
  "api/Apache.Ignite.Linq.QueryOptions.html": {
    "href": "api/Apache.Ignite.Linq.QueryOptions.html",
    "title": "Class QueryOptions | Apache Ignite.NET",
    "keywords": "Class QueryOptions Cache query options. Inheritance System.Object QueryOptions Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Linq Assembly : Apache.Ignite.Linq.dll Syntax public class QueryOptions Constructors QueryOptions() Initializes a new instance of the QueryOptions class. Declaration public QueryOptions() Fields DefaultPageSize Default page size. Declaration public const int DefaultPageSize = 1024 Field Value Type Description System.Int32 Properties Colocated Gets or sets a value indicating whether this query operates on colocated data. Whenever Ignite executes a distributed query, it sends sub-queries to individual cluster members. If you know in advance that the elements of your query selection are colocated together on the same node and you group by colocated key (primary or affinity key), then Ignite can make significant performance and network optimizations by grouping data on remote nodes. Declaration public bool Colocated { get; set; } Property Value Type Description System.Boolean EnableDistributedJoins Gets or sets a value indicating whether distributed joins should be enabled for this query. When disabled, join results will only contain colocated data (joins work locally). When enabled, joins work as expected, no matter how the data is distributed. Declaration public bool EnableDistributedJoins { get; set; } Property Value Type Description System.Boolean true if enable distributed joins should be enabled; otherwise, false . EnforceJoinOrder Gets or sets a value indicating whether join order of tables should be enforced. When true, query optimizer will not reorder tables in join. It is not recommended to enable this property until you are sure that your indexes and the query itself are correct and tuned as much as possible but query optimizer still produces wrong join order. Declaration public bool EnforceJoinOrder { get; set; } Property Value Type Description System.Boolean true if join order should be enforced; otherwise, false . Lazy Gets or sets a value indicating whether this query is lazy. By default Ignite attempts to fetch the whole query result set to memory and send it to the client. For small and medium result sets this provides optimal performance and minimize duration of internal database locks, thus increasing concurrency. If result set is too big to fit in available memory this could lead to excessive GC pauses and even OutOfMemoryError. Use this flag as a hint for Ignite to fetch result set lazily, thus minimizing memory consumption at the cost of moderate performance hit. Declaration public bool Lazy { get; set; } Property Value Type Description System.Boolean Local Local flag. When set query will be executed only on local node, so only local entries will be returned as query result. Defaults to false . Declaration public bool Local { get; set; } Property Value Type Description System.Boolean PageSize Page size, defaults to DefaultPageSize . Declaration public int PageSize { get; set; } Property Value Type Description System.Int32 ReplicatedOnly Gets or sets a value indicating whether this query contains only replicated tables. This is a hint for potentially more effective execution. Declaration [Obsolete(\"No longer used as of Apache Ignite 2.8.\")] public bool ReplicatedOnly { get; set; } Property Value Type Description System.Boolean TableName Gets or sets the name of the table. Table name is equal to short class name of a cache value. When a cache has only one type of values, or only one QueryEntity defined, table name will be inferred and can be omitted (null). Declaration public string TableName { get; set; } Property Value Type Description System.String The name of the table. Timeout Gets or sets the query timeout. Query will be automatically cancelled if the execution timeout is exceeded. Default is System.TimeSpan.Zero , which means no timeout. Declaration public TimeSpan Timeout { get; set; } Property Value Type Description System.TimeSpan"
  },
  "api/Apache.Ignite.Linq.html": {
    "href": "api/Apache.Ignite.Linq.html",
    "title": "Namespace Apache.Ignite.Linq | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Linq Classes CacheClientLinqExtensions Extensions methods for ICacheClient<TK, TV> . CacheLinqExtensions Extensions methods for ICache<TK, TV> . CompiledQuery Represents a compiled cache query. QueryOptions Cache query options. Interfaces ICacheQueryable Common interface for cache queryables. IUpdateDescriptor<TKey, TValue> Dummy interface to provide update description for UpdateAll<TKey, TValue>(IQueryable<ICacheEntry<TKey, TValue>>, Expression<Func<IUpdateDescriptor<TKey, TValue>, IUpdateDescriptor<TKey, TValue>>>) Delegates CompiledQueryFunc<T> Delegate for compiled query with arbitrary number of arguments."
  },
  "api/Apache.Ignite.Log4Net.IgniteLog4NetLogger.html": {
    "href": "api/Apache.Ignite.Log4Net.IgniteLog4NetLogger.html",
    "title": "Class IgniteLog4NetLogger | Apache Ignite.NET",
    "keywords": "Class IgniteLog4NetLogger Ignite log4net integration. Inheritance System.Object IgniteLog4NetLogger Implements ILogger Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Log4Net Assembly : Apache.Ignite.Log4Net.dll Syntax public class IgniteLog4NetLogger : ILogger Constructors IgniteLog4NetLogger() Initializes a new instance of the IgniteLog4NetLogger class. Declaration public IgniteLog4NetLogger() IgniteLog4NetLogger(ILog) Initializes a new instance of the IgniteLog4NetLogger class. Declaration public IgniteLog4NetLogger(ILog log) Parameters Type Name Description log4net.ILog log The log. Methods ConvertLogLevel(LogLevel) Converts the Ignite LogLevel to the log4net log level. Declaration public static Level ConvertLogLevel(LogLevel level) Parameters Type Name Description LogLevel level The Ignite log level. Returns Type Description log4net.Core.Level Corresponding log4net log level. IsEnabled(LogLevel) Determines whether the specified log level is enabled. Declaration public bool IsEnabled(LogLevel level) Parameters Type Name Description LogLevel level The level. Returns Type Description System.Boolean Value indicating whether the specified log level is enabled Log(LogLevel, String, Object[], IFormatProvider, String, String, Exception) Logs the specified message. Declaration public void Log(LogLevel level, string message, object[] args, IFormatProvider formatProvider, string category, string nativeErrorInfo, Exception ex) Parameters Type Name Description LogLevel level The level. System.String message The message. System.Object [] args The arguments to format message . Can be null (formatting will not occur). System.IFormatProvider formatProvider The format provider. Can be null if args is null. System.String category The logging category name. System.String nativeErrorInfo The native error information. System.Exception ex The exception. Can be null. Implements ILogger"
  },
  "api/Apache.Ignite.Core.Lifecycle.ILifecycleHandler.html": {
    "href": "api/Apache.Ignite.Core.Lifecycle.ILifecycleHandler.html",
    "title": "Interface ILifecycleHandler | Apache Ignite.NET",
    "keywords": "Interface ILifecycleHandler Handles lifecycle events defined in LifecycleEventType . Use this interface whenever you need to plug some custom logic before or after Ignite startup and stopping routines. There are four events you can react to: BeforeNodeStartInvoked before Ignite startup routine is initiated. Note that Ignite is not available during this event, therefore if you injected an Ignite instance via InstanceResourceAttribute attribute, you cannot use it yet. AfterNodeStartInvoked right after Ignite has started. At this point, if you injected an Ignite instance via InstanceResourceAttribute attribute, you can start using it. BeforeNodeStopInvoked right before Ignite stop routine is initiated. Ignite is still available at this stage, so if you injected an Ignite instance via InstanceResourceAttribute attribute, you can use it. AfterNodeStopInvoked right after Ignite has stopped. Note that Ignite is not available during this event. Namespace : Apache.Ignite.Core.Lifecycle Assembly : Apache.Ignite.Core.dll Syntax public interface ILifecycleHandler Methods OnLifecycleEvent(LifecycleEventType) This method is called when lifecycle event occurs. Declaration void OnLifecycleEvent(LifecycleEventType evt) Parameters Type Name Description LifecycleEventType evt Lifecycle event."
  },
  "api/Apache.Ignite.Core.Lifecycle.LifecycleEventType.html": {
    "href": "api/Apache.Ignite.Core.Lifecycle.LifecycleEventType.html",
    "title": "Enum LifecycleEventType | Apache Ignite.NET",
    "keywords": "Enum LifecycleEventType Ignite lifecycle event types. These events are used to notify lifecycle beans about changes in Ignite lifecycle state. For more information and detailed examples refer to ILifecycleHandler documentation. Namespace : Apache.Ignite.Core.Lifecycle Assembly : Apache.Ignite.Core.dll Syntax public enum LifecycleEventType Fields Name Description AfterNodeStart Invoked after node startup is complete. Node is fully initialized and fully functional. AfterNodeStop Invoked after node had stopped. Node is stopped and cannot be used. BeforeNodeStart Invoked before node startup routine. Node is not initialized and cannot be used. BeforeNodeStop Invoked before node stopping routine. Node is fully functional at this point."
  },
  "api/Apache.Ignite.Core.Lifecycle.html": {
    "href": "api/Apache.Ignite.Core.Lifecycle.html",
    "title": "Namespace Apache.Ignite.Core.Lifecycle | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Lifecycle Classes ClientReconnectEventArgs Contains client reconnect event data. Interfaces ILifecycleHandler Handles lifecycle events defined in LifecycleEventType . Use this interface whenever you need to plug some custom logic before or after Ignite startup and stopping routines. There are four events you can react to: BeforeNodeStartInvoked before Ignite startup routine is initiated. Note that Ignite is not available during this event, therefore if you injected an Ignite instance via InstanceResourceAttribute attribute, you cannot use it yet. AfterNodeStartInvoked right after Ignite has started. At this point, if you injected an Ignite instance via InstanceResourceAttribute attribute, you can start using it. BeforeNodeStopInvoked right before Ignite stop routine is initiated. Ignite is still available at this stage, so if you injected an Ignite instance via InstanceResourceAttribute attribute, you can use it. AfterNodeStopInvoked right after Ignite has stopped. Note that Ignite is not available during this event. Enums LifecycleEventType Ignite lifecycle event types. These events are used to notify lifecycle beans about changes in Ignite lifecycle state. For more information and detailed examples refer to ILifecycleHandler documentation."
  },
  "api/Apache.Ignite.Core.Log.CategoryLogger.html": {
    "href": "api/Apache.Ignite.Core.Log.CategoryLogger.html",
    "title": "Class CategoryLogger | Apache Ignite.NET",
    "keywords": "Class CategoryLogger Wrapping logger with a predefined category. When Log(LogLevel, String, Object[], IFormatProvider, String, String, Exception) method is called, and category parameter is null, predefined category will be used. Inheritance System.Object CategoryLogger Implements ILogger Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Log Assembly : Apache.Ignite.Core.dll Syntax public class CategoryLogger : ILogger Constructors CategoryLogger(ILogger, String) Initializes a new instance of the CategoryLogger class. Declaration public CategoryLogger(ILogger logger, string category) Parameters Type Name Description ILogger logger The logger to wrap. System.String category The category. Methods IsEnabled(LogLevel) Determines whether the specified log level is enabled. Declaration public bool IsEnabled(LogLevel level) Parameters Type Name Description LogLevel level The level. Returns Type Description System.Boolean Value indicating whether the specified log level is enabled Log(LogLevel, String, Object[], IFormatProvider, String, String, Exception) Logs the specified message. Declaration public void Log(LogLevel level, string message, object[] args, IFormatProvider formatProvider, string category, string nativeErrorInfo, Exception ex) Parameters Type Name Description LogLevel level The level. System.String message The message. System.Object [] args The arguments to format message . Can be null (formatting will not occur). System.IFormatProvider formatProvider The format provider. Can be null if args is null. System.String category The logging category name. System.String nativeErrorInfo The native error information. System.Exception ex The exception. Can be null. Implements ILogger Extension Methods LoggerExtensions.Trace(ILogger, String) LoggerExtensions.Trace(ILogger, String, Object[]) LoggerExtensions.Trace(ILogger, Exception, String) LoggerExtensions.Trace(ILogger, Exception, String, Object[]) LoggerExtensions.Debug(ILogger, String) LoggerExtensions.Debug(ILogger, String, Object[]) LoggerExtensions.Debug(ILogger, Exception, String) LoggerExtensions.Debug(ILogger, Exception, String, Object[]) LoggerExtensions.Info(ILogger, String) LoggerExtensions.Info(ILogger, String, Object[]) LoggerExtensions.Info(ILogger, Exception, String) LoggerExtensions.Info(ILogger, Exception, String, Object[]) LoggerExtensions.Warn(ILogger, String) LoggerExtensions.Warn(ILogger, String, Object[]) LoggerExtensions.Warn(ILogger, Exception, String) LoggerExtensions.Warn(ILogger, Exception, String, Object[]) LoggerExtensions.Error(ILogger, String) LoggerExtensions.Error(ILogger, String, Object[]) LoggerExtensions.Error(ILogger, Exception, String) LoggerExtensions.Error(ILogger, Exception, String, Object[]) LoggerExtensions.Log(ILogger, LogLevel, String) LoggerExtensions.Log(ILogger, LogLevel, String, Object[]) LoggerExtensions.Log(ILogger, LogLevel, Exception, String) LoggerExtensions.Log(ILogger, LogLevel, Exception, String, Object[]) LoggerExtensions.GetLogger(ILogger, String) LoggerExtensions.GetLogger(ILogger, Type)"
  },
  "api/Apache.Ignite.Core.Services.IServiceContext.html": {
    "href": "api/Apache.Ignite.Core.Services.IServiceContext.html",
    "title": "Interface IServiceContext | Apache Ignite.NET",
    "keywords": "Interface IServiceContext Represents service execution context. Namespace : Apache.Ignite.Core.Services Assembly : Apache.Ignite.Core.dll Syntax public interface IServiceContext Properties AffinityKey Gets affinity key used for key-to-node affinity calculation. This parameter is optional and is set only when key-affinity service was deployed. Declaration object AffinityKey { get; } Property Value Type Description System.Object Affinity key, possibly null. CacheName Gets cache name used for key-to-node affinity calculation. This parameter is optional and is set only when key-affinity service was deployed. Declaration string CacheName { get; } Property Value Type Description System.String Cache name, possibly null. ExecutionId Gets service execution ID. Execution ID is guaranteed to be unique across all service deployments. Declaration Guid ExecutionId { get; } Property Value Type Description System.Guid Service execution ID. IsCancelled Get flag indicating whether service has been cancelled or not. Declaration bool IsCancelled { get; } Property Value Type Description System.Boolean Flag indicating whether service has been cancelled or not. Name Gets service name. Declaration string Name { get; } Property Value Type Description System.String Service name."
  },
  "api/Apache.Ignite.Core.Services.IServiceDescriptor.html": {
    "href": "api/Apache.Ignite.Core.Services.IServiceDescriptor.html",
    "title": "Interface IServiceDescriptor | Apache Ignite.NET",
    "keywords": "Interface IServiceDescriptor Service deployment descriptor. Namespace : Apache.Ignite.Core.Services Assembly : Apache.Ignite.Core.dll Syntax public interface IServiceDescriptor Properties AffinityKey Gets affinity key used for key-to-node affinity calculation. This parameter is optional and is set only when key-affinity service was deployed. Declaration object AffinityKey { get; } Property Value Type Description System.Object Affinity key, possibly null. CacheName Gets cache name used for key-to-node affinity calculation. This parameter is optional and is set only when key-affinity service was deployed. Declaration string CacheName { get; } Property Value Type Description System.String Cache name, possibly null. MaxPerNodeCount Gets maximum allowed number of deployed services on each node, 0 for unlimited. Declaration int MaxPerNodeCount { get; } Property Value Type Description System.Int32 Maximum allowed total number of deployed services on each node, 0 for unlimited. Name Gets service name. Declaration string Name { get; } Property Value Type Description System.String Service name. OriginNodeId Gets affinity key used for key-to-node affinity calculation. This parameter is optional and is set only when key-affinity service was deployed. Declaration Guid OriginNodeId { get; } Property Value Type Description System.Guid Affinity key, possibly null. TopologySnapshot Gets service deployment topology snapshot. Service topology snapshot is represented by number of service instances deployed on a node mapped to node ID. Declaration IDictionary<Guid, int> TopologySnapshot { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.Guid , System.Int32 > Map of number of service instances per node ID. TotalCount Gets maximum allowed total number of deployed services in the grid, 0 for unlimited. Declaration int TotalCount { get; } Property Value Type Description System.Int32 Maximum allowed total number of deployed services in the grid, 0 for unlimited. Type Gets the service type. Declaration Type Type { get; } Property Value Type Description System.Type Service type."
  },
  "api/Apache.Ignite.Core.Services.IServices.html": {
    "href": "api/Apache.Ignite.Core.Services.IServices.html",
    "title": "Interface IServices | Apache Ignite.NET",
    "keywords": "Interface IServices Defines functionality to deploy distributed services in the Ignite. Namespace : Apache.Ignite.Core.Services Assembly : Apache.Ignite.Core.dll Syntax public interface IServices Properties ClusterGroup Gets the cluster group to which this instance belongs. Declaration IClusterGroup ClusterGroup { get; } Property Value Type Description IClusterGroup The cluster group to which this instance belongs. Methods Cancel(String) Cancels service deployment. If a service with specified name was deployed on the grid, then Cancel(IServiceContext) method will be called on it. Note that Ignite cannot guarantee that the service exits from Execute(IServiceContext) method whenever Cancel(IServiceContext) is called. It is up to the user to make sure that the service code properly reacts to cancellations. Declaration void Cancel(string name) Parameters Type Name Description System.String name Name of the service to cancel. CancelAll() Cancels all deployed services. Note that depending on user logic, it may still take extra time for a service to finish execution, even after it was cancelled. Declaration void CancelAll() CancelAllAsync() Cancels all deployed services. Note that depending on user logic, it may still take extra time for a service to finish execution, even after it was cancelled. Declaration Task CancelAllAsync() Returns Type Description System.Threading.Tasks.Task CancelAsync(String) Cancels service deployment. If a service with specified name was deployed on the grid, then Cancel(IServiceContext) method will be called on it. Note that Ignite cannot guarantee that the service exits from Execute(IServiceContext) method whenever Cancel(IServiceContext) is called. It is up to the user to make sure that the service code properly reacts to cancellations. Declaration Task CancelAsync(string name) Parameters Type Name Description System.String name Name of the service to cancel. Returns Type Description System.Threading.Tasks.Task Deploy(ServiceConfiguration) Deploys instances of the service in the Ignite according to provided configuration. Declaration void Deploy(ServiceConfiguration configuration) Parameters Type Name Description ServiceConfiguration configuration Service configuration. DeployAll(IEnumerable<ServiceConfiguration>) Deploys multiple services described by provided configurations. Depending on specified parameters, multiple instances of the same service may be deployed. Whenever topology changes, Ignite will automatically rebalance the deployed services within cluster to make sure that each node will end up with about equal number of deployed instances whenever possible. If deployment of some of the provided services fails, then ServiceDeploymentException containing a list of failed service configurations ( FailedConfigurations ) will be thrown. It is guaranteed that all services that were provided to this method and are not present in the list of failed services are successfully deployed by the moment of the exception being thrown. Note that if exception is thrown, then partial deployment may have occurred. Declaration void DeployAll(IEnumerable<ServiceConfiguration> configurations) Parameters Type Name Description System.Collections.Generic.IEnumerable < ServiceConfiguration > configurations Collection of service configurations to be deployed. DeployAllAsync(IEnumerable<ServiceConfiguration>) Asynchronously deploys multiple services described by provided configurations. Depending on specified parameters, multiple instances of the same service may be deployed ( ServiceConfiguration ). Whenever topology changes, Ignite will automatically rebalance the deployed services within cluster to make sure that each node will end up with about equal number of deployed instances whenever possible. If deployment of some of the provided services fails, then ServiceDeploymentException containing a list of failed service configurations ( FailedConfigurations ) will be thrown. It is guaranteed that all services, that were provided to this method and are not present in the list of failed services, are successfully deployed by the moment of the exception being thrown. Note that if exception is thrown, then partial deployment may have occurred. Declaration Task DeployAllAsync(IEnumerable<ServiceConfiguration> configurations) Parameters Type Name Description System.Collections.Generic.IEnumerable < ServiceConfiguration > configurations Collection of service configurations to be deployed. Returns Type Description System.Threading.Tasks.Task DeployAsync(ServiceConfiguration) Deploys instances of the service in the Ignite according to provided configuration. Declaration Task DeployAsync(ServiceConfiguration configuration) Parameters Type Name Description ServiceConfiguration configuration Service configuration. Returns Type Description System.Threading.Tasks.Task DeployClusterSingleton(String, IService) Deploys a cluster-wide singleton service. Ignite guarantees that there is always one instance of the service in the cluster. In case if Ignite node on which the service was deployed crashes or stops, Ignite will automatically redeploy it on another node. However, if the node on which the service is deployed remains in topology, then the service will always be deployed on that node only, regardless of topology changes. Note that in case of topology changes, due to network delays, there may be a temporary situation when a singleton service instance will be active on more than one node (e.g. crash detection delay). Declaration void DeployClusterSingleton(string name, IService service) Parameters Type Name Description System.String name Service name. IService service Service instance. DeployClusterSingletonAsync(String, IService) Deploys a cluster-wide singleton service. Ignite guarantees that there is always one instance of the service in the cluster. In case if Ignite node on which the service was deployed crashes or stops, Ignite will automatically redeploy it on another node. However, if the node on which the service is deployed remains in topology, then the service will always be deployed on that node only, regardless of topology changes. Note that in case of topology changes, due to network delays, there may be a temporary situation when a singleton service instance will be active on more than one node (e.g. crash detection delay). Declaration Task DeployClusterSingletonAsync(string name, IService service) Parameters Type Name Description System.String name Service name. IService service Service instance. Returns Type Description System.Threading.Tasks.Task DeployKeyAffinitySingleton<TK>(String, IService, String, TK) Deploys one instance of this service on the primary node for a given affinity key. Whenever topology changes and primary node assignment changes, Ignite will always make sure that the service is undeployed on the previous primary node and deployed on the new primary node. Note that in case of topology changes, due to network delays, there may be a temporary situation when a service instance will be active on more than one node (e.g. crash detection delay). Declaration void DeployKeyAffinitySingleton<TK>(string name, IService service, string cacheName, TK affinityKey) Parameters Type Name Description System.String name Service name. IService service Service instance. System.String cacheName Name of the cache on which affinity for key should be calculated, null for default cache. TK affinityKey Affinity cache key. Type Parameters Name Description TK DeployKeyAffinitySingletonAsync<TK>(String, IService, String, TK) Deploys one instance of this service on the primary node for a given affinity key. Whenever topology changes and primary node assignment changes, Ignite will always make sure that the service is undeployed on the previous primary node and deployed on the new primary node. Note that in case of topology changes, due to network delays, there may be a temporary situation when a service instance will be active on more than one node (e.g. crash detection delay). Declaration Task DeployKeyAffinitySingletonAsync<TK>(string name, IService service, string cacheName, TK affinityKey) Parameters Type Name Description System.String name Service name. IService service Service instance. System.String cacheName Name of the cache on which affinity for key should be calculated, null for default cache. TK affinityKey Affinity cache key. Returns Type Description System.Threading.Tasks.Task Type Parameters Name Description TK DeployMultiple(String, IService, Int32, Int32) Deploys multiple instances of the service on the grid. Ignite will deploy a maximum amount of services equal to totalCount parameter making sure that there are no more than maxPerNodeCount service instances running on each node. Whenever topology changes, Ignite will automatically rebalance the deployed services within cluster to make sure that each node will end up with about equal number of deployed instances whenever possible. Declaration void DeployMultiple(string name, IService service, int totalCount, int maxPerNodeCount) Parameters Type Name Description System.String name Service name. IService service Service instance. System.Int32 totalCount Maximum number of deployed services in the grid, 0 for unlimited. System.Int32 maxPerNodeCount Maximum number of deployed services on each node, 0 for unlimited. DeployMultipleAsync(String, IService, Int32, Int32) Deploys multiple instances of the service on the grid. Ignite will deploy a maximum amount of services equal to totalCount parameter making sure that there are no more than maxPerNodeCount service instances running on each node. Whenever topology changes, Ignite will automatically rebalance the deployed services within cluster to make sure that each node will end up with about equal number of deployed instances whenever possible. Declaration Task DeployMultipleAsync(string name, IService service, int totalCount, int maxPerNodeCount) Parameters Type Name Description System.String name Service name. IService service Service instance. System.Int32 totalCount Maximum number of deployed services in the grid, 0 for unlimited. System.Int32 maxPerNodeCount Maximum number of deployed services on each node, 0 for unlimited. Returns Type Description System.Threading.Tasks.Task DeployNodeSingleton(String, IService) Deploys a per-node singleton service. Ignite guarantees that there is always one instance of the service running on each node. Whenever new nodes are started within the underlying cluster group, Ignite will automatically deploy one instance of the service on every new node. Declaration void DeployNodeSingleton(string name, IService service) Parameters Type Name Description System.String name Service name. IService service Service instance. DeployNodeSingletonAsync(String, IService) Deploys a per-node singleton service. Ignite guarantees that there is always one instance of the service running on each node. Whenever new nodes are started within the underlying cluster group, Ignite will automatically deploy one instance of the service on every new node. Declaration Task DeployNodeSingletonAsync(string name, IService service) Parameters Type Name Description System.String name Service name. IService service Service instance. Returns Type Description System.Threading.Tasks.Task GetDynamicServiceProxy(String) Gets a remote handle on the service as a dynamic object. If service is available locally, then local instance is returned, otherwise, a remote proxy is dynamically created and provided for the specified service. This method utilizes dynamic feature of the language and does not require any service interfaces or classes. Java services can be accessed as well as .NET services. Declaration dynamic GetDynamicServiceProxy(string name) Parameters Type Name Description System.String name Service name. Returns Type Description System.Object Either proxy over remote service or local service if it is deployed locally. GetDynamicServiceProxy(String, Boolean) Gets a remote handle on the service as a dynamic object. If service is available locally, then local instance is returned, otherwise, a remote proxy is dynamically created and provided for the specified service. This method utilizes dynamic feature of the language and does not require any service interfaces or classes. Java services can be accessed as well as .NET services. Declaration dynamic GetDynamicServiceProxy(string name, bool sticky) Parameters Type Name Description System.String name Service name. System.Boolean sticky Whether or not Ignite should always contact the same remote service or try to load-balance between services. Returns Type Description System.Object Either proxy over remote service or local service if it is deployed locally. GetService<T>(String) Gets deployed service with specified name. Declaration T GetService<T>(string name) Parameters Type Name Description System.String name Service name. Returns Type Description T Deployed service with specified name. Type Parameters Name Description T Service type. GetServiceDescriptors() Gets metadata about all deployed services. Declaration ICollection<IServiceDescriptor> GetServiceDescriptors() Returns Type Description System.Collections.Generic.ICollection < IServiceDescriptor > Metadata about all deployed services. GetServiceProxy<T>(String) Gets a remote handle on the service. If service is available locally, then local instance is returned, otherwise, a remote proxy is dynamically created and provided for the specified service. Declaration T GetServiceProxy<T>(string name)where T : class Parameters Type Name Description System.String name Service name. Returns Type Description T Either proxy over remote service or local service if it is deployed locally. Type Parameters Name Description T Service type. GetServiceProxy<T>(String, Boolean) Gets a remote handle on the service. If service is available locally, then local instance is returned, otherwise, a remote proxy is dynamically created and provided for the specified service. Declaration T GetServiceProxy<T>(string name, bool sticky)where T : class Parameters Type Name Description System.String name Service name. System.Boolean sticky Whether or not Ignite should always contact the same remote service or try to load-balance between services. Returns Type Description T Either proxy over remote service or local service if it is deployed locally. Type Parameters Name Description T Service type. GetServices<T>(String) Gets all deployed services with specified name. Declaration ICollection<T> GetServices<T>(string name) Parameters Type Name Description System.String name Service name. Returns Type Description System.Collections.Generic.ICollection <T> All deployed services with specified name. Type Parameters Name Description T Service type. WithKeepBinary() Returns an instance with binary mode enabled. Service method results will be kept in binary form. Declaration IServices WithKeepBinary() Returns Type Description IServices Instance with binary mode enabled. WithServerKeepBinary() Returns an instance with server-side binary mode enabled. Service method arguments will be kept in binary form. Declaration IServices WithServerKeepBinary() Returns Type Description IServices Instance with server-side binary mode enabled."
  },
  "api/Apache.Ignite.Core.Services.ServiceConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Services.ServiceConfiguration.html",
    "title": "Class ServiceConfiguration | Apache Ignite.NET",
    "keywords": "Class ServiceConfiguration Service configuration. Inheritance System.Object ServiceConfiguration Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Services Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class ServiceConfiguration Constructors ServiceConfiguration() Default constructor Declaration public ServiceConfiguration() Properties AffinityKey Gets or sets affinity key used for key-to-node affinity calculation. Declaration public object AffinityKey { get; set; } Property Value Type Description System.Object CacheName Gets or sets cache name used for key-to-node affinity calculation. Declaration public string CacheName { get; set; } Property Value Type Description System.String MaxPerNodeCount Gets or sets maximum number of deployed service instances on each node, 0 for unlimited. Declaration public int MaxPerNodeCount { get; set; } Property Value Type Description System.Int32 Name Gets or sets the service name. Declaration public string Name { get; set; } Property Value Type Description System.String NodeFilter Gets or sets node filter used to filter nodes on which the service will be deployed. Declaration public IClusterNodeFilter NodeFilter { get; set; } Property Value Type Description IClusterNodeFilter Service Gets or sets the service instance. Declaration public IService Service { get; set; } Property Value Type Description IService TotalCount Gets or sets the total number of deployed service instances in the cluster, 0 for unlimited. Declaration public int TotalCount { get; set; } Property Value Type Description System.Int32"
  },
  "api/Apache.Ignite.Log4Net.html": {
    "href": "api/Apache.Ignite.Log4Net.html",
    "title": "Namespace Apache.Ignite.Log4Net | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Log4Net Classes IgniteLog4NetLogger Ignite log4net integration."
  },
  "api/Apache.Ignite.NLog.IgniteNLogLogger.html": {
    "href": "api/Apache.Ignite.NLog.IgniteNLogLogger.html",
    "title": "Class IgniteNLogLogger | Apache Ignite.NET",
    "keywords": "Class IgniteNLogLogger Ignite NLog integration. Inheritance System.Object IgniteNLogLogger Implements ILogger Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.NLog Assembly : Apache.Ignite.NLog.dll Syntax public class IgniteNLogLogger : ILogger Constructors IgniteNLogLogger() Initializes a new instance of the IgniteNLogLogger class using the NLog.LogManager.GetCurrentClassLogger to retrieve the NLog logger. Declaration public IgniteNLogLogger() IgniteNLogLogger(Logger) Initializes a new instance of the IgniteNLogLogger class. Declaration public IgniteNLogLogger(Logger logger) Parameters Type Name Description NLog.Logger logger The NLog logger instance. Methods ConvertLogLevel(LogLevel) Converts the Ignite LogLevel to the NLog log level. Declaration public static LogLevel ConvertLogLevel(LogLevel level) Parameters Type Name Description LogLevel level The Ignite log level. Returns Type Description NLog.LogLevel Corresponding NLog log level. IsEnabled(LogLevel) Determines whether the specified log level is enabled. Declaration public bool IsEnabled(LogLevel level) Parameters Type Name Description LogLevel level The level. Returns Type Description System.Boolean Value indicating whether the specified log level is enabled Exceptions Type Condition System.NotImplementedException Log(LogLevel, String, Object[], IFormatProvider, String, String, Exception) Logs the specified message. Declaration public void Log(LogLevel level, string message, object[] args, IFormatProvider formatProvider, string category, string nativeErrorInfo, Exception ex) Parameters Type Name Description LogLevel level The level. System.String message The message. System.Object [] args The arguments to format message . Can be null (formatting will not occur). System.IFormatProvider formatProvider The format provider. Can be null if args is null. System.String category The logging category name. System.String nativeErrorInfo The native error information. System.Exception ex The exception. Can be null. Exceptions Type Condition System.NotImplementedException Implements ILogger"
  },
  "api/Apache.Ignite.NLog.html": {
    "href": "api/Apache.Ignite.NLog.html",
    "title": "Namespace Apache.Ignite.NLog | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.NLog Classes IgniteNLogLogger Ignite NLog integration."
  },
  "api/Apache.Ignite.AspNet.IgniteSessionStateStoreProvider.html": {
    "href": "api/Apache.Ignite.AspNet.IgniteSessionStateStoreProvider.html",
    "title": "Class IgniteSessionStateStoreProvider | Apache Ignite.NET",
    "keywords": "Class IgniteSessionStateStoreProvider ASP.NET Session-State Store Provider that uses Ignite distributed cache as an underlying storage. You can either start Ignite yourself, and provide gridName attribute, or provide igniteConfigurationSectionName attribute to start Ignite automatically from specified configuration section (see IgniteConfigurationSection ) using igniteConfigurationSectionName . cacheName attribute specifies Ignite cache name to use for data storage. This attribute can be omitted if cache name is null. Optional applicationId attribute allows sharing a single Ignite cache between multiple web applications. Inheritance System.Object System.Configuration.Provider.ProviderBase System.Web.SessionState.SessionStateStoreProviderBase IgniteSessionStateStoreProvider Inherited Members System.Configuration.Provider.ProviderBase.Name System.Configuration.Provider.ProviderBase.Description System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.AspNet Assembly : Apache.Ignite.AspNet.dll Syntax public class IgniteSessionStateStoreProvider : SessionStateStoreProviderBase Fields DefaultCacheName The default cache name to be used when cacheName attribute is not specified. Declaration public const string DefaultCacheName = \"ASPNET_SESSION_STATE\" Field Value Type Description System.String Methods CreateNewStoreData(HttpContext, Int32) Creates a new System.Web.SessionState.SessionStateStoreData object to be used for the current request. Declaration public override SessionStateStoreData CreateNewStoreData(HttpContext context, int timeout) Parameters Type Name Description System.Web.HttpContext context The System.Web.HttpContext for the current request. System.Int32 timeout The session-state System.Web.SessionState.HttpSessionState.Timeout value for the new System.Web.SessionState.SessionStateStoreData , in minutes. Returns Type Description System.Web.SessionState.SessionStateStoreData A new System.Web.SessionState.SessionStateStoreData for the current request. Overrides System.Web.SessionState.SessionStateStoreProviderBase.CreateNewStoreData(System.Web.HttpContext, System.Int32) CreateUninitializedItem(HttpContext, String, Int32) Adds a new session-state item to the data store. Declaration public override void CreateUninitializedItem(HttpContext context, string id, int timeout) Parameters Type Name Description System.Web.HttpContext context The System.Web.HttpContext for the current request. System.String id The System.Web.SessionState.HttpSessionState.SessionID for the current request. System.Int32 timeout The session System.Web.SessionState.HttpSessionState.Timeout for the current request, in minutes. Overrides System.Web.SessionState.SessionStateStoreProviderBase.CreateUninitializedItem(System.Web.HttpContext, System.String, System.Int32) Dispose() Releases all resources used by the System.Web.SessionState.SessionStateStoreProviderBase implementation. Declaration public override void Dispose() Overrides System.Web.SessionState.SessionStateStoreProviderBase.Dispose() EndRequest(HttpContext) Called by the System.Web.SessionState.SessionStateModule object at the end of a request. Declaration public override void EndRequest(HttpContext context) Parameters Type Name Description System.Web.HttpContext context The System.Web.HttpContext for the current request. Overrides System.Web.SessionState.SessionStateStoreProviderBase.EndRequest(System.Web.HttpContext) GetItem(HttpContext, String, out Boolean, out TimeSpan, out Object, out SessionStateActions) Returns read-only session-state data from the session data store. Declaration public override SessionStateStoreData GetItem(HttpContext context, string id, out bool locked, out TimeSpan lockAge, out object lockId, out SessionStateActions actions) Parameters Type Name Description System.Web.HttpContext context The System.Web.HttpContext for the current request. System.String id The System.Web.SessionState.HttpSessionState.SessionID for the current request. System.Boolean locked When this method returns, contains a Boolean value that is set to true if the requested session item is locked at the session data store; otherwise, false. System.TimeSpan lockAge When this method returns, contains a System.TimeSpan object that is set to the amount of time that an item in the session data store has been locked. System.Object lockId When this method returns, contains an object that is set to the lock identifier for the current request. For details on the lock identifier, see \"Locking Session-Store Data\" in the System.Web.SessionState.SessionStateStoreProviderBase class summary. System.Web.SessionState.SessionStateActions actions When this method returns, contains one of the System.Web.SessionState.SessionStateActions values, indicating whether the current session is an uninitialized, cookieless session. Returns Type Description System.Web.SessionState.SessionStateStoreData A System.Web.SessionState.SessionStateStoreData populated with session values and information from the session data store. Overrides System.Web.SessionState.SessionStateStoreProviderBase.GetItem(System.Web.HttpContext, System.String, System.Boolean, System.TimeSpan, System.Object, System.Web.SessionState.SessionStateActions) GetItemExclusive(HttpContext, String, out Boolean, out TimeSpan, out Object, out SessionStateActions) Returns read-only session-state data from the session data store. Declaration public override SessionStateStoreData GetItemExclusive(HttpContext context, string id, out bool locked, out TimeSpan lockAge, out object lockId, out SessionStateActions actions) Parameters Type Name Description System.Web.HttpContext context The System.Web.HttpContext for the current request. System.String id The System.Web.SessionState.HttpSessionState.SessionID for the current request. System.Boolean locked When this method returns, contains a Boolean value that is set to true if a lock is successfully obtained; otherwise, false. System.TimeSpan lockAge When this method returns, contains a System.TimeSpan object that is set to the amount of time that an item in the session data store has been locked. System.Object lockId When this method returns, contains an object that is set to the lock identifier for the current request. For details on the lock identifier, see \"Locking Session-Store Data\" in the System.Web.SessionState.SessionStateStoreProviderBase class summary. System.Web.SessionState.SessionStateActions actions When this method returns, contains one of the System.Web.SessionState.SessionStateActions values, indicating whether the current session is an uninitialized, cookieless session. Returns Type Description System.Web.SessionState.SessionStateStoreData A System.Web.SessionState.SessionStateStoreData populated with session values and information from the session data store. Overrides System.Web.SessionState.SessionStateStoreProviderBase.GetItemExclusive(System.Web.HttpContext, System.String, System.Boolean, System.TimeSpan, System.Object, System.Web.SessionState.SessionStateActions) Initialize(String, NameValueCollection) Initializes the provider. Declaration public override void Initialize(string name, NameValueCollection config) Parameters Type Name Description System.String name The friendly name of the provider. System.Collections.Specialized.NameValueCollection config A collection of the name/value pairs representing the provider-specific attributes specified in the configuration for this provider. Overrides System.Configuration.Provider.ProviderBase.Initialize(System.String, System.Collections.Specialized.NameValueCollection) InitializeRequest(HttpContext) Called by the System.Web.SessionState.SessionStateModule object for per-request initialization. Declaration public override void InitializeRequest(HttpContext context) Parameters Type Name Description System.Web.HttpContext context The System.Web.HttpContext for the current request. Overrides System.Web.SessionState.SessionStateStoreProviderBase.InitializeRequest(System.Web.HttpContext) ReleaseItemExclusive(HttpContext, String, Object) Releases a lock on an item in the session data store. Declaration public override void ReleaseItemExclusive(HttpContext context, string id, object lockId) Parameters Type Name Description System.Web.HttpContext context The System.Web.HttpContext for the current request. System.String id The session identifier for the current request. System.Object lockId The lock identifier for the current request. Overrides System.Web.SessionState.SessionStateStoreProviderBase.ReleaseItemExclusive(System.Web.HttpContext, System.String, System.Object) RemoveItem(HttpContext, String, Object, SessionStateStoreData) Deletes item data from the session data store. Declaration public override void RemoveItem(HttpContext context, string id, object lockId, SessionStateStoreData item) Parameters Type Name Description System.Web.HttpContext context The System.Web.HttpContext for the current request. System.String id The session identifier for the current request. System.Object lockId The lock identifier for the current request. System.Web.SessionState.SessionStateStoreData item The System.Web.SessionState.SessionStateStoreData that represents the item to delete from the data store. Overrides System.Web.SessionState.SessionStateStoreProviderBase.RemoveItem(System.Web.HttpContext, System.String, System.Object, System.Web.SessionState.SessionStateStoreData) ResetItemTimeout(HttpContext, String) Updates the expiration date and time of an item in the session data store. Declaration public override void ResetItemTimeout(HttpContext context, string id) Parameters Type Name Description System.Web.HttpContext context The System.Web.HttpContext for the current request. System.String id The session identifier for the current request. Overrides System.Web.SessionState.SessionStateStoreProviderBase.ResetItemTimeout(System.Web.HttpContext, System.String) SetAndReleaseItemExclusive(HttpContext, String, SessionStateStoreData, Object, Boolean) Updates the session-item information in the session-state data store with values from the current request, and clears the lock on the data. Declaration public override void SetAndReleaseItemExclusive(HttpContext context, string id, SessionStateStoreData item, object lockId, bool newItem) Parameters Type Name Description System.Web.HttpContext context The System.Web.HttpContext for the current request. System.String id The session identifier for the current request. System.Web.SessionState.SessionStateStoreData item The System.Web.SessionState.SessionStateStoreData object that contains the current session values to be stored. System.Object lockId The lock identifier for the current request. System.Boolean newItem true to identify the session item as a new item; false to identify the session item as an existing item. Overrides System.Web.SessionState.SessionStateStoreProviderBase.SetAndReleaseItemExclusive(System.Web.HttpContext, System.String, System.Web.SessionState.SessionStateStoreData, System.Object, System.Boolean) SetItemExpireCallback(SessionStateItemExpireCallback) Sets a reference to the System.Web.SessionState.SessionStateItemExpireCallback delegate for the Session_OnEnd event defined in the Global.asax file. Declaration public override bool SetItemExpireCallback(SessionStateItemExpireCallback expireCallback) Parameters Type Name Description System.Web.SessionState.SessionStateItemExpireCallback expireCallback The System.Web.SessionState.SessionStateItemExpireCallback delegate for the Session_OnEnd event defined in the Global.asax file. Returns Type Description System.Boolean true if the session-state store provider supports calling the Session_OnEnd event; otherwise, false. Overrides System.Web.SessionState.SessionStateStoreProviderBase.SetItemExpireCallback(System.Web.SessionState.SessionStateItemExpireCallback)"
  },
  "api/Apache.Ignite.Core.Binary.IBinary.html": {
    "href": "api/Apache.Ignite.Core.Binary.IBinary.html",
    "title": "Interface IBinary | Apache Ignite.NET",
    "keywords": "Interface IBinary Defines binary objects functionality. With binary objects you are able to: Seamlessly interoperate between Java, .NET, and C++. Make any object binary with zero code change to your existing code. Nest binary objects within each other. Automatically handle circular or null references. Automatically convert collections and maps between Java, .NET, and C++. Optionally avoid deserialization of objects on the server side. Avoid need to have concrete class definitions on the server side. Dynamically change structure of the classes without having to restart the cluster. Index into binary objects for querying purposes. Namespace : Apache.Ignite.Core.Binary Assembly : Apache.Ignite.Core.dll Syntax public interface IBinary Methods BuildEnum(String, Int32) Converts enum to a binary form. Declaration IBinaryObject BuildEnum(string typeName, int value) Parameters Type Name Description System.String typeName Enum type name. System.Int32 value Enum int value. Returns Type Description IBinaryObject Binary representation of the specified enum value. BuildEnum(String, String) Converts enum to a binary form. Declaration IBinaryObject BuildEnum(string typeName, string valueName) Parameters Type Name Description System.String typeName Enum type name. System.String valueName Enum value name. Returns Type Description IBinaryObject Binary representation of the specified enum value. BuildEnum(Type, Int32) Converts enum to a binary form. Declaration IBinaryObject BuildEnum(Type type, int value) Parameters Type Name Description System.Type type Enum type. System.Int32 value Enum int value. Returns Type Description IBinaryObject Binary representation of the specified enum value. BuildEnum(Type, String) Converts enum to a binary form. Declaration IBinaryObject BuildEnum(Type type, string valueName) Parameters Type Name Description System.Type type Enum type. System.String valueName Enum value name. Returns Type Description IBinaryObject Binary representation of the specified enum value. GetBinaryType(Int32) Gets metadata for specified type id. Declaration IBinaryType GetBinaryType(int typeId) Parameters Type Name Description System.Int32 typeId Returns Type Description IBinaryType Metadata. GetBinaryType(String) Gets metadata for specified type name. Declaration IBinaryType GetBinaryType(string typeName) Parameters Type Name Description System.String typeName Returns Type Description IBinaryType Metadata. GetBinaryType(Type) Gets metadata for specified type. Declaration IBinaryType GetBinaryType(Type type) Parameters Type Name Description System.Type type Returns Type Description IBinaryType Metadata. GetBinaryTypes() Gets metadata for all known types. Declaration ICollection<IBinaryType> GetBinaryTypes() Returns Type Description System.Collections.Generic.ICollection < IBinaryType > Metadata. GetBuilder(IBinaryObject) Create builder over existing binary object. Declaration IBinaryObjectBuilder GetBuilder(IBinaryObject obj) Parameters Type Name Description IBinaryObject obj Returns Type Description IBinaryObjectBuilder Builder. GetBuilder(String) Create builder for the given binary object type name. Declaration IBinaryObjectBuilder GetBuilder(string typeName) Parameters Type Name Description System.String typeName Type name. Returns Type Description IBinaryObjectBuilder Builder. GetBuilder(Type) Create builder for the given binary object type. Note that this type must be specified in BinaryConfiguration . Declaration IBinaryObjectBuilder GetBuilder(Type type) Parameters Type Name Description System.Type type Returns Type Description IBinaryObjectBuilder Builder. GetTypeId(String) Gets type id for the given type name. Declaration int GetTypeId(string typeName) Parameters Type Name Description System.String typeName Type name. Returns Type Description System.Int32 Type id. RegisterEnum(String, IEnumerable<KeyValuePair<String, Int32>>) Registers enum type. Declaration IBinaryType RegisterEnum(string typeName, IEnumerable<KeyValuePair<string, int>> values) Parameters Type Name Description System.String typeName Name of the type. System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair < System.String , System.Int32 >> values Mapping of enum value names to int values. Returns Type Description IBinaryType Binary type for registered enum. ToBinary<T>(Object) Converts provided object to binary form. Note that object's type needs to be configured in BinaryConfiguration . Declaration T ToBinary<T>(object obj) Parameters Type Name Description System.Object obj Object to convert. Returns Type Description T Converted object. Type Parameters Name Description T"
  },
  "api/Apache.Ignite.Core.Binary.IBinaryType.html": {
    "href": "api/Apache.Ignite.Core.Binary.IBinaryType.html",
    "title": "Interface IBinaryType | Apache Ignite.NET",
    "keywords": "Interface IBinaryType Binary type metadata. Namespace : Apache.Ignite.Core.Binary Assembly : Apache.Ignite.Core.dll Syntax public interface IBinaryType Properties AffinityKeyFieldName Gets optional affinity key field name. Declaration string AffinityKeyFieldName { get; } Property Value Type Description System.String Affinity key field name or null in case it is not provided. Fields Gets field names for that type. Declaration ICollection<string> Fields { get; } Property Value Type Description System.Collections.Generic.ICollection < System.String > Field names. IsEnum Gets a value indicating whether this type represents an enum. Declaration bool IsEnum { get; } Property Value Type Description System.Boolean true if this instance represents an enum; otherwise, false . TypeId Gets the type identifier. Declaration int TypeId { get; } Property Value Type Description System.Int32 TypeName Gets type name. Declaration string TypeName { get; } Property Value Type Description System.String Type name. Methods GetEnumValues() Gets the enum values. Only valid when IsEnum is true. Declaration IEnumerable<IBinaryObject> GetEnumValues() Returns Type Description System.Collections.Generic.IEnumerable < IBinaryObject > GetFieldTypeName(String) Gets field type for the given field name. Declaration string GetFieldTypeName(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.String Field type."
  },
  "api/Apache.Ignite.Core.Cache.Affinity.IAffinityFunction.html": {
    "href": "api/Apache.Ignite.Core.Cache.Affinity.IAffinityFunction.html",
    "title": "Interface IAffinityFunction | Apache Ignite.NET",
    "keywords": "Interface IAffinityFunction Represents a function that maps cache keys to cluster nodes. Predefined implementations: RendezvousAffinityFunction . Namespace : Apache.Ignite.Core.Cache.Affinity Assembly : Apache.Ignite.Core.dll Syntax public interface IAffinityFunction Properties Partitions Gets the total number of partitions. All caches should always provide correct partition count which should be the same on all participating nodes. Note that partitions should always be numbered from 0 inclusively to N exclusively without any gaps. Declaration int Partitions { get; } Property Value Type Description System.Int32 Methods AssignPartitions(AffinityFunctionContext) Gets affinity nodes for a partition. In case of replicated cache, all returned nodes are updated in the same manner. In case of partitioned cache, the returned list should contain only the primary and back up nodes with primary node being always first. Note that partitioned affinity must obey the following contract: given that node N is primary for some key K , if any other node(s) leave grid and no node joins grid, node N will remain primary for key K . Declaration IEnumerable<IEnumerable<IClusterNode>> AssignPartitions(AffinityFunctionContext context) Parameters Type Name Description AffinityFunctionContext context The affinity function context. Returns Type Description System.Collections.Generic.IEnumerable < System.Collections.Generic.IEnumerable < IClusterNode >> A collection of partitions, where each partition is a collection of nodes, where first node is a primary node, and other nodes are backup nodes. GetPartition(Object) Gets partition number for a given key starting from 0. Partitioned caches should make sure that keys are about evenly distributed across all partitions from 0 to Partitions for best performance. Note that for fully replicated caches it is possible to segment key sets among different grid node groups. In that case each node group should return a unique partition number. However, unlike partitioned cache, mappings of keys to nodes in replicated caches are constant and a node cannot migrate from one partition to another. Declaration int GetPartition(object key) Parameters Type Name Description System.Object key Key to get partition for. Returns Type Description System.Int32 Partition number for a given key. RemoveNode(Guid) Removes node from affinity. This method is called when it is safe to remove disconnected node from affinity mapping. Declaration void RemoveNode(Guid nodeId) Parameters Type Name Description System.Guid nodeId The node identifier."
  },
  "api/Apache.Ignite.Core.Cache.Configuration.QueryIndexField.html": {
    "href": "api/Apache.Ignite.Core.Cache.Configuration.QueryIndexField.html",
    "title": "Class QueryIndexField | Apache Ignite.NET",
    "keywords": "Class QueryIndexField Represents an indexed field. Inheritance System.Object QueryIndexField Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Configuration Assembly : Apache.Ignite.Core.dll Syntax public class QueryIndexField Constructors QueryIndexField() Initializes a new instance of the QueryIndexField class. Declaration public QueryIndexField() QueryIndexField(String) Initializes a new instance of the QueryIndexField class. Declaration public QueryIndexField(string name) Parameters Type Name Description System.String name The name. QueryIndexField(String, Boolean) Initializes a new instance of the QueryIndexField class. Declaration public QueryIndexField(string name, bool isDescending) Parameters Type Name Description System.String name The name. System.Boolean isDescending Sort direction. Properties IsDescending Gets a value indicating whether this index is descending. Default is false. Declaration public bool IsDescending { get; set; } Property Value Type Description System.Boolean Name Gets the name. Declaration public string Name { get; set; } Property Value Type Description System.String"
  },
  "api/Apache.Ignite.EntityFramework.IDbCachingPolicy.html": {
    "href": "api/Apache.Ignite.EntityFramework.IDbCachingPolicy.html",
    "title": "Interface IDbCachingPolicy | Apache Ignite.NET",
    "keywords": "Interface IDbCachingPolicy Caching policy: defines which queries should be cached. Namespace : Apache.Ignite.EntityFramework Assembly : Apache.Ignite.EntityFramework.dll Syntax public interface IDbCachingPolicy Methods CanBeCached(DbQueryInfo) Determines whether the specified query can be cached. Declaration bool CanBeCached(DbQueryInfo queryInfo) Parameters Type Name Description DbQueryInfo queryInfo The query information. Returns Type Description System.Boolean true if the specified query can be cached; otherwise, false . CanBeCached(DbQueryInfo, Int32) Determines whether specified number of rows should be cached. Declaration bool CanBeCached(DbQueryInfo queryInfo, int rowCount) Parameters Type Name Description DbQueryInfo queryInfo The query information. System.Int32 rowCount The count of fetched rows. Returns Type Description System.Boolean GetCachingMode(DbQueryInfo) Gets the caching strategy for a give query. Declaration DbCachingMode GetCachingMode(DbQueryInfo queryInfo) Parameters Type Name Description DbQueryInfo queryInfo The query information. Returns Type Description DbCachingMode Caching strategy for the query. GetExpirationTimeout(DbQueryInfo) Gets the absolute expiration timeout for a given query. Declaration TimeSpan GetExpirationTimeout(DbQueryInfo queryInfo) Parameters Type Name Description DbQueryInfo queryInfo The query information. Returns Type Description System.TimeSpan Expiration timeout. System.TimeSpan.MaxValue for no expiration."
  },
  "api/Apache.Ignite.Core.Events.CacheRebalancingEvent.html": {
    "href": "api/Apache.Ignite.Core.Events.CacheRebalancingEvent.html",
    "title": "Class CacheRebalancingEvent | Apache Ignite.NET",
    "keywords": "Class CacheRebalancingEvent In-memory database (cache) rebalancing event. Rebalance event happens every time there is a change Inheritance System.Object EventBase CacheRebalancingEvent Implements IEvent System.IEquatable < EventBase > Inherited Members EventBase.Id EventBase.LocalOrder EventBase.Node EventBase.Message EventBase.Type EventBase.Name EventBase.Timestamp EventBase.Equals(EventBase) EventBase.Equals(Object) EventBase.GetHashCode() EventBase.ToString() EventBase.ReadNode(IBinaryRawReader) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Events Assembly : Apache.Ignite.Core.dll Syntax public sealed class CacheRebalancingEvent : EventBase, IEvent, IEquatable<EventBase> Properties CacheName Gets cache name. Declaration public string CacheName { get; } Property Value Type Description System.String DiscoveryEventName Gets name of discovery event that triggered this rebalancing event. Declaration public string DiscoveryEventName { get; } Property Value Type Description System.String DiscoveryEventType Gets type of discovery event that triggered this rebalancing event. Declaration public int DiscoveryEventType { get; } Property Value Type Description System.Int32 DiscoveryNode Gets shadow of the node that triggered this rebalancing event. Declaration public IClusterNode DiscoveryNode { get; } Property Value Type Description IClusterNode DiscoveryTimestamp Gets timestamp of discovery event that caused this rebalancing event. Declaration public long DiscoveryTimestamp { get; } Property Value Type Description System.Int64 Partition Gets partition for the event. Declaration public int Partition { get; } Property Value Type Description System.Int32 Methods ToShortString() Gets shortened version of ToString result. Declaration public override string ToShortString() Returns Type Description System.String Overrides EventBase.ToShortString() Implements IEvent System.IEquatable<T>"
  },
  "api/Apache.Ignite.Core.Log.ConsoleLogger.html": {
    "href": "api/Apache.Ignite.Core.Log.ConsoleLogger.html",
    "title": "Class ConsoleLogger | Apache Ignite.NET",
    "keywords": "Class ConsoleLogger Logs to Console. Simple logger implementation without dependencies, provided out of the box for convenience. For anything more complex please use NLog/log4net integrations. Inheritance System.Object ConsoleLogger Implements ILogger Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Log Assembly : Apache.Ignite.Core.dll Syntax public class ConsoleLogger : ILogger Constructors ConsoleLogger() Initializes a new instance of ConsoleLogger class. Uses Warn minimum level. Declaration public ConsoleLogger() Properties DateTimeProvider Gets or sets DateTime provider. Declaration public IDateTimeProvider DateTimeProvider { get; set; } Property Value Type Description IDateTimeProvider MinLevel Gets the minimum level to be logged. Any levels lower than that are ignored. Default is Warn . Declaration public LogLevel MinLevel { get; set; } Property Value Type Description LogLevel Methods IsEnabled(LogLevel) Determines whether the specified log level is enabled. Declaration public bool IsEnabled(LogLevel level) Parameters Type Name Description LogLevel level The level. Returns Type Description System.Boolean Value indicating whether the specified log level is enabled Log(LogLevel, String, Object[], IFormatProvider, String, String, Exception) Logs the specified message. Declaration public void Log(LogLevel level, string message, object[] args, IFormatProvider formatProvider, string category, string nativeErrorInfo, Exception ex) Parameters Type Name Description LogLevel level The level. System.String message The message. System.Object [] args The arguments to format message . Can be null (formatting will not occur). System.IFormatProvider formatProvider The format provider. Can be null if args is null. System.String category The logging category name. System.String nativeErrorInfo The native error information. System.Exception ex The exception. Can be null. Implements ILogger Extension Methods LoggerExtensions.Trace(ILogger, String) LoggerExtensions.Trace(ILogger, String, Object[]) LoggerExtensions.Trace(ILogger, Exception, String) LoggerExtensions.Trace(ILogger, Exception, String, Object[]) LoggerExtensions.Debug(ILogger, String) LoggerExtensions.Debug(ILogger, String, Object[]) LoggerExtensions.Debug(ILogger, Exception, String) LoggerExtensions.Debug(ILogger, Exception, String, Object[]) LoggerExtensions.Info(ILogger, String) LoggerExtensions.Info(ILogger, String, Object[]) LoggerExtensions.Info(ILogger, Exception, String) LoggerExtensions.Info(ILogger, Exception, String, Object[]) LoggerExtensions.Warn(ILogger, String) LoggerExtensions.Warn(ILogger, String, Object[]) LoggerExtensions.Warn(ILogger, Exception, String) LoggerExtensions.Warn(ILogger, Exception, String, Object[]) LoggerExtensions.Error(ILogger, String) LoggerExtensions.Error(ILogger, String, Object[]) LoggerExtensions.Error(ILogger, Exception, String) LoggerExtensions.Error(ILogger, Exception, String, Object[]) LoggerExtensions.Log(ILogger, LogLevel, String) LoggerExtensions.Log(ILogger, LogLevel, String, Object[]) LoggerExtensions.Log(ILogger, LogLevel, Exception, String) LoggerExtensions.Log(ILogger, LogLevel, Exception, String, Object[]) LoggerExtensions.GetLogger(ILogger, String) LoggerExtensions.GetLogger(ILogger, Type)"
  },
  "api/Apache.Ignite.Core.Log.IDateTimeProvider.html": {
    "href": "api/Apache.Ignite.Core.Log.IDateTimeProvider.html",
    "title": "Interface IDateTimeProvider | Apache Ignite.NET",
    "keywords": "Interface IDateTimeProvider System.DateTime abstraction for logging. Namespace : Apache.Ignite.Core.Log Assembly : Apache.Ignite.Core.dll Syntax public interface IDateTimeProvider Methods Now() Gets current System.DateTime . Declaration DateTime Now() Returns Type Description System.DateTime"
  },
  "api/Apache.Ignite.Core.Log.ILogger.html": {
    "href": "api/Apache.Ignite.Core.Log.ILogger.html",
    "title": "Interface ILogger | Apache Ignite.NET",
    "keywords": "Interface ILogger Defines Ignite logging interface. This interface only provides essential log methods. All convenience overloads are in LoggerExtensions . Namespace : Apache.Ignite.Core.Log Assembly : Apache.Ignite.Core.dll Syntax public interface ILogger Methods IsEnabled(LogLevel) Determines whether the specified log level is enabled. Declaration bool IsEnabled(LogLevel level) Parameters Type Name Description LogLevel level The level. Returns Type Description System.Boolean Value indicating whether the specified log level is enabled Log(LogLevel, String, Object[], IFormatProvider, String, String, Exception) Logs the specified message. Declaration void Log(LogLevel level, string message, object[] args, IFormatProvider formatProvider, string category, string nativeErrorInfo, Exception ex) Parameters Type Name Description LogLevel level The level. System.String message The message. System.Object [] args The arguments to format message . Can be null (formatting will not occur). System.IFormatProvider formatProvider The format provider. Can be null if args is null. System.String category The logging category name. System.String nativeErrorInfo The native error information. System.Exception ex The exception. Can be null. Extension Methods LoggerExtensions.Trace(ILogger, String) LoggerExtensions.Trace(ILogger, String, Object[]) LoggerExtensions.Trace(ILogger, Exception, String) LoggerExtensions.Trace(ILogger, Exception, String, Object[]) LoggerExtensions.Debug(ILogger, String) LoggerExtensions.Debug(ILogger, String, Object[]) LoggerExtensions.Debug(ILogger, Exception, String) LoggerExtensions.Debug(ILogger, Exception, String, Object[]) LoggerExtensions.Info(ILogger, String) LoggerExtensions.Info(ILogger, String, Object[]) LoggerExtensions.Info(ILogger, Exception, String) LoggerExtensions.Info(ILogger, Exception, String, Object[]) LoggerExtensions.Warn(ILogger, String) LoggerExtensions.Warn(ILogger, String, Object[]) LoggerExtensions.Warn(ILogger, Exception, String) LoggerExtensions.Warn(ILogger, Exception, String, Object[]) LoggerExtensions.Error(ILogger, String) LoggerExtensions.Error(ILogger, String, Object[]) LoggerExtensions.Error(ILogger, Exception, String) LoggerExtensions.Error(ILogger, Exception, String, Object[]) LoggerExtensions.Log(ILogger, LogLevel, String) LoggerExtensions.Log(ILogger, LogLevel, String, Object[]) LoggerExtensions.Log(ILogger, LogLevel, Exception, String) LoggerExtensions.Log(ILogger, LogLevel, Exception, String, Object[]) LoggerExtensions.GetLogger(ILogger, String) LoggerExtensions.GetLogger(ILogger, Type)"
  },
  "api/Apache.Ignite.Core.Log.LocalDateTimeProvider.html": {
    "href": "api/Apache.Ignite.Core.Log.LocalDateTimeProvider.html",
    "title": "Class LocalDateTimeProvider | Apache Ignite.NET",
    "keywords": "Class LocalDateTimeProvider Returns System.DateTime.Now . Inheritance System.Object LocalDateTimeProvider Implements IDateTimeProvider Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Log Assembly : Apache.Ignite.Core.dll Syntax public class LocalDateTimeProvider : IDateTimeProvider Fields Instance Default instance. Declaration public static readonly LocalDateTimeProvider Instance Field Value Type Description LocalDateTimeProvider Methods Now() Gets current System.DateTime . Declaration public DateTime Now() Returns Type Description System.DateTime Implements IDateTimeProvider"
  },
  "api/Apache.Ignite.Core.Services.ServiceDeploymentException.html": {
    "href": "api/Apache.Ignite.Core.Services.ServiceDeploymentException.html",
    "title": "Class ServiceDeploymentException | Apache Ignite.NET",
    "keywords": "Class ServiceDeploymentException Indicates an error during Grid Services deployment. Inheritance System.Object System.Exception IgniteException ServiceDeploymentException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Services Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class ServiceDeploymentException : IgniteException, ISerializable, _Exception Constructors ServiceDeploymentException() Initializes a new instance of the ServiceDeploymentException class. Declaration public ServiceDeploymentException() ServiceDeploymentException(SerializationInfo, StreamingContext) Initializes a new instance of the IgniteException class. Declaration protected ServiceDeploymentException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. ServiceDeploymentException(String) Initializes a new instance of the ServiceDeploymentException class. Declaration public ServiceDeploymentException(string message) Parameters Type Name Description System.String message The message that describes the error. ServiceDeploymentException(String, IBinaryObject, ICollection<ServiceConfiguration>) Initializes a new instance of the ServiceDeploymentException class. Declaration public ServiceDeploymentException(string message, IBinaryObject binaryCause, ICollection<ServiceConfiguration> failedCfgs) Parameters Type Name Description System.String message The message. IBinaryObject binaryCause The binary cause. System.Collections.Generic.ICollection < ServiceConfiguration > failedCfgs List of failed configurations ServiceDeploymentException(String, Exception) Initializes a new instance of the ServiceDeploymentException class. Declaration public ServiceDeploymentException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. ServiceDeploymentException(String, Exception, ICollection<ServiceConfiguration>) Initializes a new instance of the ServiceDeploymentException class with failed configurations. Declaration public ServiceDeploymentException(string message, Exception cause, ICollection<ServiceConfiguration> failedCfgs) Parameters Type Name Description System.String message The message. System.Exception cause The cause. System.Collections.Generic.ICollection < ServiceConfiguration > failedCfgs List of failed configurations Properties BinaryCause Gets the binary cause. Declaration public IBinaryObject BinaryCause { get; } Property Value Type Description IBinaryObject FailedConfigurations Configurations of services that failed to deploy, could be null Declaration public ICollection<ServiceConfiguration> FailedConfigurations { get; } Property Value Type Description System.Collections.Generic.ICollection < ServiceConfiguration > Methods GetObjectData(SerializationInfo, StreamingContext) When overridden in a derived class, sets the System.Runtime.Serialization.SerializationInfo with information about the exception. Declaration public override void GetObjectData(SerializationInfo info, StreamingContext context) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info The System.Runtime.Serialization.SerializationInfo that holds the serialized object data about the exception being thrown. System.Runtime.Serialization.StreamingContext context The System.Runtime.Serialization.StreamingContext that contains contextual information about the source or destination. Overrides System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Services.ServiceInvocationException.html": {
    "href": "api/Apache.Ignite.Core.Services.ServiceInvocationException.html",
    "title": "Class ServiceInvocationException | Apache Ignite.NET",
    "keywords": "Class ServiceInvocationException Indicates an error during Grid Services invocation. Inheritance System.Object System.Exception IgniteException ServiceInvocationException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Services Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class ServiceInvocationException : IgniteException, ISerializable, _Exception Constructors ServiceInvocationException() Initializes a new instance of the ServiceInvocationException class. Declaration public ServiceInvocationException() ServiceInvocationException(SerializationInfo, StreamingContext) Initializes a new instance of the IgniteException class. Declaration protected ServiceInvocationException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. ServiceInvocationException(String) Initializes a new instance of the ServiceInvocationException class. Declaration public ServiceInvocationException(string message) Parameters Type Name Description System.String message The message that describes the error. ServiceInvocationException(String, IBinaryObject) Initializes a new instance of the ServiceInvocationException class. Declaration public ServiceInvocationException(string message, IBinaryObject binaryCause) Parameters Type Name Description System.String message The message. IBinaryObject binaryCause The binary cause. ServiceInvocationException(String, Exception) Initializes a new instance of the ServiceInvocationException class. Declaration public ServiceInvocationException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. Properties BinaryCause Gets the binary cause. Declaration public IBinaryObject BinaryCause { get; } Property Value Type Description IBinaryObject Methods GetObjectData(SerializationInfo, StreamingContext) When overridden in a derived class, sets the System.Runtime.Serialization.SerializationInfo with information about the exception. Declaration public override void GetObjectData(SerializationInfo info, StreamingContext context) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info The System.Runtime.Serialization.SerializationInfo that holds the serialized object data about the exception being thrown. System.Runtime.Serialization.StreamingContext context The System.Runtime.Serialization.StreamingContext that contains contextual information about the source or destination. Overrides System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Services.html": {
    "href": "api/Apache.Ignite.Core.Services.html",
    "title": "Namespace Apache.Ignite.Core.Services | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Services Classes ServiceConfiguration Service configuration. ServiceDeploymentException Indicates an error during Grid Services deployment. ServiceInvocationException Indicates an error during Grid Services invocation. Interfaces IService Represents Ignite-managed service. IServiceContext Represents service execution context. IServiceDescriptor Service deployment descriptor. IServices Defines functionality to deploy distributed services in the Ignite."
  },
  "api/Apache.Ignite.Core.Ssl.ISslContextFactory.html": {
    "href": "api/Apache.Ignite.Core.Ssl.ISslContextFactory.html",
    "title": "Interface ISslContextFactory | Apache Ignite.NET",
    "keywords": "Interface ISslContextFactory Represents an SSL Context Factory. Only predefined implementation is supported for now: SslContextFactory . Namespace : Apache.Ignite.Core.Ssl Assembly : Apache.Ignite.Core.dll Syntax public interface ISslContextFactory"
  },
  "api/Apache.Ignite.Core.Messaging.html": {
    "href": "api/Apache.Ignite.Core.Messaging.html",
    "title": "Namespace Apache.Ignite.Core.Messaging | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Messaging Interfaces IMessageListener<T> Represents messaging filter predicate. IMessaging Provides functionality for topic-based message exchange among nodes defined by IClusterGroup . Users can send ordered and unordered messages to various topics. Note that same topic name cannot be reused between ordered and unordered messages. All members are thread-safe and may be used concurrently from multiple threads."
  },
  "api/Apache.Ignite.Core.PersistentStore.CheckpointWriteOrder.html": {
    "href": "api/Apache.Ignite.Core.PersistentStore.CheckpointWriteOrder.html",
    "title": "Enum CheckpointWriteOrder | Apache Ignite.NET",
    "keywords": "Enum CheckpointWriteOrder Defines checkpoint pages order on disk. Namespace : Apache.Ignite.Core.PersistentStore Assembly : Apache.Ignite.Core.dll Syntax [Obsolete(\"Use Apache.Ignite.Core.Data.CheckpointWriteOrder\")] public enum CheckpointWriteOrder Fields Name Description Random Pages are written in order provided by checkpoint pages collection iterator (which is basically a hashtable). Sequential All checkpoint pages are collected into single list and sorted by page index. Provides almost sequential disk writes, which can be much faster on some SSD models."
  },
  "api/Apache.Ignite.Core.PersistentStore.IPersistentStoreMetrics.html": {
    "href": "api/Apache.Ignite.Core.PersistentStore.IPersistentStoreMetrics.html",
    "title": "Interface IPersistentStoreMetrics | Apache Ignite.NET",
    "keywords": "Interface IPersistentStoreMetrics Persistent store metrics. Obsolete, see IDataStorageMetrics . Namespace : Apache.Ignite.Core.PersistentStore Assembly : Apache.Ignite.Core.dll Syntax [Obsolete(\"Use IDataStorageMetrics\")] public interface IPersistentStoreMetrics Properties LastCheckpointCopiedOnWritePagesNumber Gets the number of pages copied to a temporary checkpoint buffer during the last checkpoint. Declaration long LastCheckpointCopiedOnWritePagesNumber { get; } Property Value Type Description System.Int64 LastCheckpointDataPagesNumber Gets the number of data pages written during the last checkpoint. Declaration long LastCheckpointDataPagesNumber { get; } Property Value Type Description System.Int64 LastCheckpointFsyncDuration Gets the duration of the sync phase of the last checkpoint. Declaration TimeSpan LastCheckpointFsyncDuration { get; } Property Value Type Description System.TimeSpan LastCheckpointingDuration Gets the duration of the last checkpoint. Declaration TimeSpan LastCheckpointingDuration { get; } Property Value Type Description System.TimeSpan LastCheckpointLockWaitDuration Gets the duration of last checkpoint lock wait. Declaration TimeSpan LastCheckpointLockWaitDuration { get; } Property Value Type Description System.TimeSpan LastCheckpointMarkDuration Gets the duration of last checkpoint mark phase. Declaration TimeSpan LastCheckpointMarkDuration { get; } Property Value Type Description System.TimeSpan LastCheckpointPagesWriteDuration Gets the duration of last checkpoint pages write phase. Declaration TimeSpan LastCheckpointPagesWriteDuration { get; } Property Value Type Description System.TimeSpan LastCheckpointTotalPagesNumber Gets the total number of pages written during the last checkpoint. Declaration long LastCheckpointTotalPagesNumber { get; } Property Value Type Description System.Int64 WalArchiveSegments Gets the current number of WAL segments in the WAL archive. Declaration int WalArchiveSegments { get; } Property Value Type Description System.Int32 WalFsyncTimeAverage Gets the average WAL fsync duration in microseconds over the last time interval. Declaration float WalFsyncTimeAverage { get; } Property Value Type Description System.Single WalLoggingRate Gets the average number of WAL records per second written during the last time interval. Declaration float WalLoggingRate { get; } Property Value Type Description System.Single WalWritingRate Gets the average number of bytes per second written during the last time interval. Declaration float WalWritingRate { get; } Property Value Type Description System.Single"
  },
  "api/Apache.Ignite.Core.Cache.Event.ICacheEntryEventListener-2.html": {
    "href": "api/Apache.Ignite.Core.Cache.Event.ICacheEntryEventListener-2.html",
    "title": "Interface ICacheEntryEventListener<TK, TV> | Apache Ignite.NET",
    "keywords": "Interface ICacheEntryEventListener<TK, TV> Cache entry event listener. Namespace : Apache.Ignite.Core.Cache.Event Assembly : Apache.Ignite.Core.dll Syntax public interface ICacheEntryEventListener<TK, TV> Type Parameters Name Description TK TV Methods OnEvent(IEnumerable<ICacheEntryEvent<TK, TV>>) Event callback. Declaration void OnEvent(IEnumerable<ICacheEntryEvent<TK, TV>> evts) Parameters Type Name Description System.Collections.Generic.IEnumerable < ICacheEntryEvent <TK, TV>> evts Events."
  },
  "api/Apache.Ignite.Core.Cache.Event.html": {
    "href": "api/Apache.Ignite.Core.Cache.Event.html",
    "title": "Namespace Apache.Ignite.Core.Cache.Event | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Cache.Event Interfaces ICacheEntryEvent<TK, TV> Cache entry event. ICacheEntryEventFilter<TK, TV> Cache entry event filter. ICacheEntryEventListener<TK, TV> Cache entry event listener. Enums CacheEntryEventType Cache event type."
  },
  "api/Apache.Ignite.Core.Cache.ICacheAffinity.html": {
    "href": "api/Apache.Ignite.Core.Cache.ICacheAffinity.html",
    "title": "Interface ICacheAffinity | Apache Ignite.NET",
    "keywords": "Interface ICacheAffinity Provides affinity information to detect which node is primary and which nodes are backups for a partitioned cache. You can get an instance of this interface by calling GetAffinity(String) method. Mapping of a key to a node is a three-step operation. First step will get an affinity key for given key using CacheAffinityKeyMapper . If mapper is not specified, the original key will be used. Second step will map affinity key to partition using CacheAffinityFunction.partition(Object) method. Third step will map obtained partition to nodes for current grid topology version. Interface provides various mapKeysToNodes(...) methods which provide node affinity mapping for given keys. All mapKeysToNodes(...) methods are not transactional and will not enlist keys into ongoing transaction. All members are thread-safe and may be used concurrently from multiple threads. Namespace : Apache.Ignite.Core.Cache Assembly : Apache.Ignite.Core.dll Syntax public interface ICacheAffinity Properties Partitions Gets number of partitions in cache according to configured affinity function. Declaration int Partitions { get; } Property Value Type Description System.Int32 Number of cache partitions. Methods GetAffinityKey<TK, TR>(TK) Maps passed in key to a key which will be used for node affinity. Declaration TR GetAffinityKey<TK, TR>(TK key) Parameters Type Name Description TK key Key to map. Returns Type Description TR Key to be used for node-to-affinity mapping (may be the same key as passed in). Type Parameters Name Description TK TR GetAllPartitions(IClusterNode) Gets partition ids for which nodes of the given projection has ownership (either primary or backup). Declaration int[] GetAllPartitions(IClusterNode n) Parameters Type Name Description IClusterNode n Node. Returns Type Description System.Int32 [] Partition ids for which given projection has ownership. GetBackupPartitions(IClusterNode) Gets partition ids for which nodes of the given projection has backup ownership. Declaration int[] GetBackupPartitions(IClusterNode n) Parameters Type Name Description IClusterNode n Node. Returns Type Description System.Int32 [] Partition ids for which given projection has backup ownership. GetPartition<TK>(TK) Gets partition id for the given key. Declaration int GetPartition<TK>(TK key) Parameters Type Name Description TK key Key to get partition id for. Returns Type Description System.Int32 Partition id. Type Parameters Name Description TK GetPrimaryPartitions(IClusterNode) Gets partition ids for which nodes of the given projection has primary ownership. Declaration int[] GetPrimaryPartitions(IClusterNode n) Parameters Type Name Description IClusterNode n Node. Returns Type Description System.Int32 [] Partition ids for which given projection has primary ownership. IsBackup<TK>(IClusterNode, TK) Returns 'true' if given node is the backup node for given key. Declaration bool IsBackup<TK>(IClusterNode n, TK key) Parameters Type Name Description IClusterNode n Node. TK key Key. Returns Type Description System.Boolean 'True' if given node is the backup node for given key. Type Parameters Name Description TK IsPrimary<TK>(IClusterNode, TK) Returns 'true' if given node is the primary node for given key. Declaration bool IsPrimary<TK>(IClusterNode n, TK key) Parameters Type Name Description IClusterNode n Node. TK key Key. Returns Type Description System.Boolean 'True' if given node is the primary node for given key. Type Parameters Name Description TK IsPrimaryOrBackup<TK>(IClusterNode, TK) Returns 'true' if given node is either primary or backup node for given key. Declaration bool IsPrimaryOrBackup<TK>(IClusterNode n, TK key) Parameters Type Name Description IClusterNode n Node. TK key Key. Returns Type Description System.Boolean 'True' if given node is either primary or backup node for given key. Type Parameters Name Description TK MapKeysToNodes<TK>(IEnumerable<TK>) This method provides ability to detect which keys are mapped to which nodes. Use it to determine which nodes are storing which keys prior to sending jobs that access these keys. Declaration IDictionary<IClusterNode, IList<TK>> MapKeysToNodes<TK>(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys to map to nodes. Returns Type Description System.Collections.Generic.IDictionary < IClusterNode , System.Collections.Generic.IList <TK>> Map of nodes to keys or empty map if there are no alive nodes for this cache. Type Parameters Name Description TK MapKeyToNode<TK>(TK) This method provides ability to detect to which primary node the given key is mapped. Use it to determine which nodes are storing which keys prior to sending jobs that access these keys. Declaration IClusterNode MapKeyToNode<TK>(TK key) Parameters Type Name Description TK key Keys to map to a node. Returns Type Description IClusterNode Primary node for the key or null if there are no alive nodes for this cache. Type Parameters Name Description TK MapKeyToPrimaryAndBackups<TK>(TK) Gets primary and backup nodes for the key. Note that primary node is always first in the returned collection. Declaration IList<IClusterNode> MapKeyToPrimaryAndBackups<TK>(TK key) Parameters Type Name Description TK key Returns Type Description System.Collections.Generic.IList < IClusterNode > Type Parameters Name Description TK MapPartitionsToNodes(IEnumerable<Int32>) Gets primary nodes for the given partitions. Declaration IDictionary<int, IClusterNode> MapPartitionsToNodes(IEnumerable<int> parts) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Int32 > parts Partition ids. Returns Type Description System.Collections.Generic.IDictionary < System.Int32 , IClusterNode > Mapping of given partitions to their primary nodes. MapPartitionToNode(Int32) Gets primary node for the given partition. Declaration IClusterNode MapPartitionToNode(int part) Parameters Type Name Description System.Int32 part Partition id. Returns Type Description IClusterNode Primary node for the given partition. MapPartitionToPrimaryAndBackups(Int32) Gets primary and backup nodes for partition. Note that primary node is always first in the returned collection. Declaration IList<IClusterNode> MapPartitionToPrimaryAndBackups(int part) Parameters Type Name Description System.Int32 part Partition to get affinity nodes for. Returns Type Description System.Collections.Generic.IList < IClusterNode > Collection of primary and backup nodes for partition with primary node always first"
  },
  "api/Apache.Ignite.Core.Cache.ICacheEntry-2.html": {
    "href": "api/Apache.Ignite.Core.Cache.ICacheEntry-2.html",
    "title": "Interface ICacheEntry<TK, TV> | Apache Ignite.NET",
    "keywords": "Interface ICacheEntry<TK, TV> Cache entry interface. Namespace : Apache.Ignite.Core.Cache Assembly : Apache.Ignite.Core.dll Syntax public interface ICacheEntry<out TK, out TV> Type Parameters Name Description TK Key type. TV Value type. Properties Key Gets the key. Declaration TK Key { get; } Property Value Type Description TK Value Gets the value. Declaration TV Value { get; } Property Value Type Description TV"
  },
  "api/Apache.Ignite.Core.Cache.Query.Continuous.IContinuousQueryHandle-1.html": {
    "href": "api/Apache.Ignite.Core.Cache.Query.Continuous.IContinuousQueryHandle-1.html",
    "title": "Interface IContinuousQueryHandle<T> | Apache Ignite.NET",
    "keywords": "Interface IContinuousQueryHandle<T> Represents a continuous query handle. Inherited Members System.IDisposable.Dispose() Namespace : Apache.Ignite.Core.Cache.Query.Continuous Assembly : Apache.Ignite.Core.dll Syntax public interface IContinuousQueryHandle<T> : IContinuousQueryHandle, IDisposable Type Parameters Name Description T Type of the initial query cursor. Methods GetInitialQueryCursor() Gets the cursor for initial query. Can be called only once, throws exception on consequent calls. Declaration IQueryCursor<T> GetInitialQueryCursor() Returns Type Description IQueryCursor <T> Initial query cursor."
  },
  "api/Apache.Ignite.Core.Cache.Query.Continuous.IContinuousQueryHandle.html": {
    "href": "api/Apache.Ignite.Core.Cache.Query.Continuous.IContinuousQueryHandle.html",
    "title": "Interface IContinuousQueryHandle | Apache Ignite.NET",
    "keywords": "Interface IContinuousQueryHandle Represents a continuous query handle. Inherited Members System.IDisposable.Dispose() Namespace : Apache.Ignite.Core.Cache.Query.Continuous Assembly : Apache.Ignite.Core.dll Syntax public interface IContinuousQueryHandle : IDisposable"
  },
  "api/Apache.Ignite.Core.Cache.Store.ICacheStore-2.html": {
    "href": "api/Apache.Ignite.Core.Cache.Store.ICacheStore-2.html",
    "title": "Interface ICacheStore<TK, TV> | Apache Ignite.NET",
    "keywords": "Interface ICacheStore<TK, TV> API for cache persistent storage for read-through and write-through behavior. Generic argument types depend on KeepBinaryInStore property. When true (default), cache store operates on IBinaryObject instances. Otherwise, generic arguments should be the same as in corresponding ICache<TK, TV> . Persistent store is configured in Ignite's Spring XML configuration file via CacheConfiguration.setStore() property. If you have an implementation of cache store in .NET, you should use special Java wrapper which accepts assembly name and class name of .NET store implementation (both properties are mandatory). Optionally, you may specify \"properies\" property to set any property values on an instance of your store. Here is an example: <bean class=\"org.apache.ignite.configuration.CacheConfiguration\"> ... <property name=\"cacheStoreFactory\"> <bean class=\"org.apache.ignite.platform.dotnet.PlatformDotNetCacheStoreFactory\"> <property name=\"assemblyName\" value=\"MyAssembly\"/> <property name=\"className\" value=\"MyApp.MyCacheStore\"/> <property name=\"properties\"> <map> <entry key=\"IntProperty\"> <value type=\"java.lang.Integer\">42</value> </entry> <entry key=\"StringProperty\" value=\"String value\"/> </map> </property> </bean> </property> ... </bean> Assemply name and class name are passed to System.Activator.CreateInstance(String, String) method during node startup to create an instance of cache store. Refer to its documentation for details. All transactional operations of this API are provided with ongoing ITransaction , if any. You can attach any metadata to transaction, e.g. to recognize if several operations belong to the same transaction or not. Here is an example of how attach a ODBC connection as transaction metadata: OdbcConnection conn = tx.Meta(\"some.name\"); if (conn == null) { conn = ...; // Create or get connection. // Store connection in transaction metadata, so it can be accessed // for other operations on the same transaction. tx.AddMeta(\"some.name\", conn); } Namespace : Apache.Ignite.Core.Cache.Store Assembly : Apache.Ignite.Core.dll Syntax public interface ICacheStore<TK, TV> : ICacheStore Type Parameters Name Description TK Key type. TV Value type. Methods Delete(TK) Delete the cache entry from the external resource. Expiry of a cache entry is not a delete hence will not cause this method to be invoked. This method is invoked even if no mapping for the key exists. Declaration void Delete(TK key) Parameters Type Name Description TK key The key that is used for the delete operation. Exceptions Type Condition CacheStoreException DeleteAll(IEnumerable<TK>) Remove data and keys from the external resource for the given collection of keys, if present. The order that individual deletes occur is undefined. If this operation fails (by throwing an exception) after a partial success, the writer must remove any successfully written entries from the entries collection so that the caching implementation knows what succeeded and can mutate the cache. Expiry of a cache entry is not a delete hence will not cause this method to be invoked. This method may include keys even if there is no mapping for that key, in which case the data represented by that key should be removed from the underlying resource. Declaration void DeleteAll(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys a mutable collection of keys for entries to delete. Upon invocation, it contains the keys to delete for write-through. Upon return the collection must only contain the keys that were not successfully deleted. Exceptions Type Condition CacheStoreException Load(TK) Loads an object. Application developers should implement this method to customize the loading of a value for a cache entry. This method is called by a cache when a requested entry is not in the cache. If the object can't be loaded null should be returned. Declaration TV Load(TK key) Parameters Type Name Description TK key The key identifying the object being loaded. Returns Type Description TV The value for the entry that is to be stored in the cache or null if the object can't be loaded Exceptions Type Condition CacheStoreException LoadAll(IEnumerable<TK>) Loads multiple objects. Application developers should implement this method to customize the loading of cache entries. This method is called when the requested object is not in the cache. If an object can't be loaded, it is not returned in the resulting map. Declaration IEnumerable<KeyValuePair<TK, TV>> LoadAll(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys identifying the values to be loaded. Returns Type Description System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair <TK, TV>> A map of key, values to be stored in the cache. Exceptions Type Condition CacheStoreException LoadCache(Action<TK, TV>, Object[]) Loads all values from underlying persistent storage. Note that keys are not passed, so it is up to implementation to figure out what to load. This method is called whenever LocalLoadCache(ICacheEntryFilter<TK, TV>, Object[]) method is invoked which is usually to preload the cache from persistent storage. This method is optional, and cache implementation does not depend on this method to do anything. For every loaded value method provided action should be called. The action will then make sure that the loaded value is stored in cache. Declaration void LoadCache(Action<TK, TV> act, params object[] args) Parameters Type Name Description System.Action <TK, TV> act Action for loaded values. System.Object [] args Optional arguemnts passed to LocalLoadCache(ICacheEntryFilter<TK, TV>, Object[]) method. Exceptions Type Condition CacheStoreException SessionEnd(Boolean) Tells store to commit or rollback a transaction depending on the value of the commit parameter. Declaration void SessionEnd(bool commit) Parameters Type Name Description System.Boolean commit True if transaction should commit, false for rollback. Exceptions Type Condition CacheStoreException Write(TK, TV) Write the specified value under the specified key to the external resource. This method is intended to support both key/value creation and value update. Declaration void Write(TK key, TV val) Parameters Type Name Description TK key Key to write. TV val Value to write. Exceptions Type Condition CacheStoreException WriteAll(IEnumerable<KeyValuePair<TK, TV>>) Write the specified entries to the external resource. This method is intended to support both insert and update. The order that individual writes occur is undefined. If this operation fails (by throwing an exception) after a partial success, the writer must remove any successfully written entries from the entries collection so that the caching implementation knows what succeeded and can mutate the cache. Declaration void WriteAll(IEnumerable<KeyValuePair<TK, TV>> entries) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair <TK, TV>> entries a mutable collection to write. Upon invocation, it contains the entries to write for write-through. Upon return the collection must only contain entries that were not successfully written. (see partial success above). Exceptions Type Condition CacheStoreException"
  },
  "api/Apache.Ignite.Core.Cache.Store.ICacheStore.html": {
    "href": "api/Apache.Ignite.Core.Cache.Store.ICacheStore.html",
    "title": "Interface ICacheStore | Apache Ignite.NET",
    "keywords": "Interface ICacheStore Non-generic base type for ICacheStore<TK, TV> , used only for configuration property. Users should implement generic ICacheStore<TK, TV> . Namespace : Apache.Ignite.Core.Cache.Store Assembly : Apache.Ignite.Core.dll Syntax public interface ICacheStore"
  },
  "api/Apache.Ignite.Core.Client.IClientClusterGroup.html": {
    "href": "api/Apache.Ignite.Core.Client.IClientClusterGroup.html",
    "title": "Interface IClientClusterGroup | Apache Ignite.NET",
    "keywords": "Interface IClientClusterGroup Defines grid projection which represents a common functionality over a group of nodes. Grid projection allows to group Ignite nodes into various subgroups to perform distributed operations on them. All ForXXX(...)' methods will create a child grid projection from existing projection. If you create a new projection from current one, then the resulting projection will include a subset of nodes from current projection. The following code snippet shows how to create grid projections: var g = Ignition.StartClient().GetCluster(); // Projection over .NET nodes. var remoteNodes = g.ForDotNet(); // Projection over server nodes. var randomNode = g.ForServers(); // Projection over all nodes that have user attribute \"group\" set to value \"worker\". var workerNodes = g.ForAttribute(\"group\", \"worker\"); Namespace : Apache.Ignite.Core.Client Assembly : Apache.Ignite.Core.dll Syntax public interface IClientClusterGroup Methods ForAttribute(String, String) Creates projection for nodes containing given name and value specified in user attributes. Declaration IClientClusterGroup ForAttribute(string name, string val) Parameters Type Name Description System.String name Name of the attribute. System.String val Optional attribute value to match. Returns Type Description IClientClusterGroup Grid projection for nodes containing specified attribute. ForDotNet() Creates grid projection for nodes supporting .NET, i.e. for nodes started with Apache.Ignite.exe. Declaration IClientClusterGroup ForDotNet() Returns Type Description IClientClusterGroup Grid projection for nodes supporting .NET. ForPredicate(Func<IClientClusterNode, Boolean>) Creates a grid projection which includes all nodes that pass the given predicate filter. Declaration IClientClusterGroup ForPredicate(Func<IClientClusterNode, bool> p) Parameters Type Name Description System.Func < IClientClusterNode , System.Boolean > p Predicate filter for nodes to include into this projection. Returns Type Description IClientClusterGroup Grid projection for nodes that passed the predicate filter. ForServers() Creates a cluster group of nodes started in server mode ( ClientMode ). Declaration IClientClusterGroup ForServers() Returns Type Description IClientClusterGroup Cluster group of nodes started in server mode. GetCompute() Gets compute functionality over this grid projection. All operations on the returned compute instance will only include nodes from this projection. Declaration IComputeClient GetCompute() Returns Type Description IComputeClient Compute instance over this grid projection. GetNode() Gets first node from the list of nodes in this projection. Declaration IClientClusterNode GetNode() Returns Type Description IClientClusterNode Node. GetNode(Guid) Gets a node for given ID from this grid projection. Declaration IClientClusterNode GetNode(Guid id) Parameters Type Name Description System.Guid id Node ID. Returns Type Description IClientClusterNode Node with given ID from this projection or null if such node does not exist in this projection. GetNodes() Gets read-only collections of nodes in this projection. Declaration ICollection<IClientClusterNode> GetNodes() Returns Type Description System.Collections.Generic.ICollection < IClientClusterNode > All nodes in this projection."
  },
  "api/Apache.Ignite.Core.Client.IClientClusterNode.html": {
    "href": "api/Apache.Ignite.Core.Client.IClientClusterNode.html",
    "title": "Interface IClientClusterNode | Apache Ignite.NET",
    "keywords": "Interface IClientClusterNode Interface representing a single cluster node obtained through a thin client. You can get a list of all nodes in grid by calling GetNodes() . You can use Ignite node attributes to provide static information about a node. This information is initialized once within grid, during node startup, and remains the same throughout the lifetime of a node. All members are thread-safe and may be used concurrently from multiple threads. Inherited Members IBaselineNode.ConsistentId IBaselineNode.Attributes Namespace : Apache.Ignite.Core.Client Assembly : Apache.Ignite.Core.dll Syntax public interface IClientClusterNode : IBaselineNode Properties Addresses Collection of addresses this node is known by. Declaration ICollection<string> Addresses { get; } Property Value Type Description System.Collections.Generic.ICollection < System.String > Collection of addresses. HostNames Collection of host names this node is known by. Declaration ICollection<string> HostNames { get; } Property Value Type Description System.Collections.Generic.ICollection < System.String > Collection of host names. Id Globally unique node ID. A new ID is generated every time a node restarts. Declaration Guid Id { get; } Property Value Type Description System.Guid IsClient Gets a value indicating whether or not this node is connected to cluster as a client. Do not confuse client in terms of discovery and client in terms of cache. Cache clients cannot carry data, while topology clients connect to the topology in a different way. Declaration bool IsClient { get; } Property Value Type Description System.Boolean true if this node is a client node, false otherwise. . IsDaemon Tests whether or not this node is a daemon. Daemon nodes are the usual Ignite nodes that participate in topology but not visible on the main APIs, i.e. they are not part of any projections. Daemon nodes are used primarily for management and monitoring functionality that is build on Ignite and needs to participate in the topology but should be excluded from \"normal\" topology so that it won't participate in task execution or in-memory database. Application code should never use daemon nodes. Declaration bool IsDaemon { get; } Property Value Type Description System.Boolean IsLocal Tests whether or not this node is a local node. Declaration bool IsLocal { get; } Property Value Type Description System.Boolean Order Node order within grid topology. Discovery SPIs that support node ordering will assign a proper order to each node and will guarantee that discovery event notifications for new nodes will come in proper order. All other SPIs not supporting ordering may choose to return node startup time here. Declaration long Order { get; } Property Value Type Description System.Int64 Version Gets an Ignite node version. Declaration IgniteProductVersion Version { get; } Property Value Type Description IgniteProductVersion"
  },
  "api/Apache.Ignite.Core.Cluster.ClusterGroupEmptyException.html": {
    "href": "api/Apache.Ignite.Core.Cluster.ClusterGroupEmptyException.html",
    "title": "Class ClusterGroupEmptyException | Apache Ignite.NET",
    "keywords": "Class ClusterGroupEmptyException Indicates an illegal call on empty projection. Thrown by projection when operation that requires at least one node is called on empty projection. Inheritance System.Object System.Exception IgniteException ClusterGroupEmptyException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cluster Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class ClusterGroupEmptyException : IgniteException, ISerializable, _Exception Constructors ClusterGroupEmptyException() Initializes a new instance of the ClusterGroupEmptyException class. Declaration public ClusterGroupEmptyException() ClusterGroupEmptyException(SerializationInfo, StreamingContext) Initializes a new instance of the ClusterGroupEmptyException class. Declaration protected ClusterGroupEmptyException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization info. System.Runtime.Serialization.StreamingContext ctx Streaming context. ClusterGroupEmptyException(String) Initializes a new instance of the ClusterGroupEmptyException class. Declaration public ClusterGroupEmptyException(string msg) Parameters Type Name Description System.String msg Exception message. ClusterGroupEmptyException(String, Exception) Initializes a new instance of the ClusterGroupEmptyException class. Declaration public ClusterGroupEmptyException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Cluster.ClusterTopologyException.html": {
    "href": "api/Apache.Ignite.Core.Cluster.ClusterTopologyException.html",
    "title": "Class ClusterTopologyException | Apache Ignite.NET",
    "keywords": "Class ClusterTopologyException Indicates an error with grid topology (e.g., crashed node, etc.) Inheritance System.Object System.Exception IgniteException ClusterTopologyException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cluster Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class ClusterTopologyException : IgniteException, ISerializable, _Exception Constructors ClusterTopologyException() Initializes a new instance of the ClusterTopologyException class. Declaration public ClusterTopologyException() ClusterTopologyException(SerializationInfo, StreamingContext) Initializes a new instance of the ClusterTopologyException class. Declaration protected ClusterTopologyException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization info. System.Runtime.Serialization.StreamingContext ctx Streaming context. ClusterTopologyException(String) Initializes a new instance of the ClusterTopologyException class. Declaration public ClusterTopologyException(string msg) Parameters Type Name Description System.String msg Exception message. ClusterTopologyException(String, Exception) Initializes a new instance of the ClusterTopologyException class. Declaration public ClusterTopologyException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Common.IgniteIllegalStateException.html": {
    "href": "api/Apache.Ignite.Core.Common.IgniteIllegalStateException.html",
    "title": "Class IgniteIllegalStateException | Apache Ignite.NET",
    "keywords": "Class IgniteIllegalStateException Indicates that ignite in invalid state was accessed. Inheritance System.Object System.Exception IgniteException IgniteIllegalStateException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Common Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class IgniteIllegalStateException : IgniteException, ISerializable, _Exception Constructors IgniteIllegalStateException() Initializes a new instance of the IgniteIllegalStateException class. Declaration public IgniteIllegalStateException() IgniteIllegalStateException(SerializationInfo, StreamingContext) Initializes a new instance of the IgniteIllegalStateException class. Declaration protected IgniteIllegalStateException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. IgniteIllegalStateException(String) Initializes a new instance of the IgniteIllegalStateException class. Declaration public IgniteIllegalStateException(string message) Parameters Type Name Description System.String message The message that describes the error. IgniteIllegalStateException(String, Exception) Initializes a new instance of the IgniteIllegalStateException class. Declaration public IgniteIllegalStateException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Common.IgniteProductVersion.html": {
    "href": "api/Apache.Ignite.Core.Common.IgniteProductVersion.html",
    "title": "Class IgniteProductVersion | Apache Ignite.NET",
    "keywords": "Class IgniteProductVersion Represents node version. Inheritance System.Object IgniteProductVersion Implements System.IEquatable < IgniteProductVersion > System.IComparable < IgniteProductVersion > Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Common Assembly : Apache.Ignite.Core.dll Syntax public class IgniteProductVersion : IEquatable<IgniteProductVersion>, IComparable<IgniteProductVersion> Constructors IgniteProductVersion(Byte, Byte, Byte, String, DateTime, Byte[]) Constructor. Declaration public IgniteProductVersion(byte major, byte minor, byte maintenance, string stage, DateTime releaseDate, byte[] revHash) Parameters Type Name Description System.Byte major Major version number. System.Byte minor Minor version number. System.Byte maintenance Maintenance version number. System.String stage Stage of development. System.DateTime releaseDate Revision date. System.Byte [] revHash Revision hash. Properties Maintenance Gets the maintenance version number. Declaration public byte Maintenance { get; } Property Value Type Description System.Byte Major Gets the major version number. Declaration public byte Major { get; } Property Value Type Description System.Byte Minor Gets the minor version number. Declaration public byte Minor { get; } Property Value Type Description System.Byte ReleaseDate Gets the release date. Declaration public DateTime ReleaseDate { get; } Property Value Type Description System.DateTime RevisionHash Gets the revision hash Declaration public byte[] RevisionHash { get; } Property Value Type Description System.Byte [] Stage Gets the stage of development. Declaration public string Stage { get; } Property Value Type Description System.String Methods CompareTo(IgniteProductVersion) Declaration public int CompareTo(IgniteProductVersion other) Parameters Type Name Description IgniteProductVersion other Returns Type Description System.Int32 Equals(IgniteProductVersion) Declaration public bool Equals(IgniteProductVersion other) Parameters Type Name Description IgniteProductVersion other Returns Type Description System.Boolean GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements System.IEquatable<T> System.IComparable<T>"
  },
  "api/Apache.Ignite.Core.Compute.ICompute.html": {
    "href": "api/Apache.Ignite.Core.Compute.ICompute.html",
    "title": "Interface ICompute | Apache Ignite.NET",
    "keywords": "Interface ICompute Defines Ignite functionality for executing tasks and closures over nodes in the IClusterGroup . Instance of ICompute is obtained from grid projection using GetCompute() method. Note that if attempt is made to execute a computation over an empty projection (i.e. projection that does not have any alive nodes), ClusterGroupEmptyException will be thrown out of result task. Ignite must select a node for a computation to be executed. The node will be selected based on the underlying GridLoadBalancingSpi , which by default sequentially picks next available node from grid projection. Other load balancing policies, such as random or adaptive , can be configured as well by selecting different load balancing SPI in Ignite configuration. If your logic requires some custom load balancing behavior, consider implementing ComputeTask in Java directly. Ignite guarantees that as long as there is at least one Ignite node standing, every job will be executed. Jobs will automatically failover to another node if a remote node crashed or has rejected execution due to lack of resources. By default, in case of failover, next load balanced node will be picked for job execution. Also jobs will never be re-routed to the nodes they have failed on. This behavior can be changed by configuring any of the existing or a custom FailoverSpi in Ignite configuration. All members are thread-safe and may be used concurrently from multiple threads. Namespace : Apache.Ignite.Core.Compute Assembly : Apache.Ignite.Core.dll Syntax public interface ICompute Properties ClusterGroup Grid projection to which this compute instance belongs. Declaration IClusterGroup ClusterGroup { get; } Property Value Type Description IClusterGroup Methods AffinityCall<TRes>(IEnumerable<String>, Int32, IComputeFunc<TRes>) Executes given job on the node where data for provided partition is located. Declaration TRes AffinityCall<TRes>(IEnumerable<string> cacheNames, int partition, IComputeFunc<TRes> func) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.String > cacheNames Names of the caches to reserve the partition in. The first cache is used for affinity co-location. System.Int32 partition Partition number. IComputeFunc <TRes> func Job to execute. Returns Type Description TRes Job result for this execution. Type Parameters Name Description TRes Type of job result. AffinityCall<TRes>(String, Object, IComputeFunc<TRes>) Executes given job on the node where data for provided affinity key is located (a.k.a. affinity co-location). Declaration TRes AffinityCall<TRes>(string cacheName, object affinityKey, IComputeFunc<TRes> clo) Parameters Type Name Description System.String cacheName Name of the cache to use for affinity co-location. System.Object affinityKey Affinity key. IComputeFunc <TRes> clo Job to execute. Returns Type Description TRes Job result for this execution. Type Parameters Name Description TRes Type of job result. AffinityCallAsync<TRes>(IEnumerable<String>, Int32, IComputeFunc<TRes>) Executes given job on the node where data for provided partition is located. Declaration Task<TRes> AffinityCallAsync<TRes>(IEnumerable<string> cacheNames, int partition, IComputeFunc<TRes> func) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.String > cacheNames Names of the caches to reserve the partition in. The first cache is used for affinity co-location. System.Int32 partition Partition number. IComputeFunc <TRes> func Job to execute. Returns Type Description System.Threading.Tasks.Task <TRes> Job result for this execution. Type Parameters Name Description TRes Type of job result. AffinityCallAsync<TRes>(IEnumerable<String>, Int32, IComputeFunc<TRes>, CancellationToken) Executes given job on the node where data for provided partition is located. Declaration Task<TRes> AffinityCallAsync<TRes>(IEnumerable<string> cacheNames, int partition, IComputeFunc<TRes> func, CancellationToken cancellationToken) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.String > cacheNames Names of the caches to reserve the partition in. The first cache is used for affinity co-location. System.Int32 partition Partition number. IComputeFunc <TRes> func Job to execute. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task <TRes> Job result for this execution. Type Parameters Name Description TRes Type of job result. AffinityCallAsync<TRes>(String, Object, IComputeFunc<TRes>) Executes given job on the node where data for provided affinity key is located (a.k.a. affinity co-location). Declaration Task<TRes> AffinityCallAsync<TRes>(string cacheName, object affinityKey, IComputeFunc<TRes> clo) Parameters Type Name Description System.String cacheName Name of the cache to use for affinity co-location. System.Object affinityKey Affinity key. IComputeFunc <TRes> clo Job to execute. Returns Type Description System.Threading.Tasks.Task <TRes> Job result for this execution. Type Parameters Name Description TRes Type of job result. AffinityCallAsync<TRes>(String, Object, IComputeFunc<TRes>, CancellationToken) Executes given job on the node where data for provided affinity key is located (a.k.a. affinity co-location). Declaration Task<TRes> AffinityCallAsync<TRes>(string cacheName, object affinityKey, IComputeFunc<TRes> clo, CancellationToken cancellationToken) Parameters Type Name Description System.String cacheName Name of the cache to use for affinity co-location. System.Object affinityKey Affinity key. IComputeFunc <TRes> clo Job to execute. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task <TRes> Job result for this execution. Type Parameters Name Description TRes Type of job result. AffinityRun(IEnumerable<String>, Int32, IComputeAction) Executes given job on the node where data for provided partition is located (a.k.a. affinity co-location). Declaration void AffinityRun(IEnumerable<string> cacheNames, int partition, IComputeAction action) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.String > cacheNames Names of the caches to reserve the partition in. The first cache is used for affinity co-location. System.Int32 partition Partition number. IComputeAction action Job to execute. AffinityRun(String, Object, IComputeAction) Executes given job on the node where data for provided affinity key is located (a.k.a. affinity co-location). Declaration void AffinityRun(string cacheName, object affinityKey, IComputeAction action) Parameters Type Name Description System.String cacheName Name of the cache to use for affinity co-location. System.Object affinityKey Affinity key. IComputeAction action Job to execute. AffinityRunAsync(IEnumerable<String>, Int32, IComputeAction) Executes given job on the node where data for provided partition is located (a.k.a. affinity co-location). Declaration Task AffinityRunAsync(IEnumerable<string> cacheNames, int partition, IComputeAction action) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.String > cacheNames Names of the caches to reserve the partition in. The first cache is used for affinity co-location. System.Int32 partition Partition number. IComputeAction action Job to execute. Returns Type Description System.Threading.Tasks.Task AffinityRunAsync(IEnumerable<String>, Int32, IComputeAction, CancellationToken) Executes given job on the node where data for provided partition is located (a.k.a. affinity co-location). Declaration Task AffinityRunAsync(IEnumerable<string> cacheNames, int partition, IComputeAction action, CancellationToken cancellationToken) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.String > cacheNames Names of the caches to reserve the partition in. The first cache is used for affinity co-location. System.Int32 partition Partition number. IComputeAction action Job to execute. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task AffinityRunAsync(String, Object, IComputeAction) Executes given job on the node where data for provided affinity key is located (a.k.a. affinity co-location). Declaration Task AffinityRunAsync(string cacheName, object affinityKey, IComputeAction action) Parameters Type Name Description System.String cacheName Name of the cache to use for affinity co-location. System.Object affinityKey Affinity key. IComputeAction action Job to execute. Returns Type Description System.Threading.Tasks.Task AffinityRunAsync(String, Object, IComputeAction, CancellationToken) Executes given job on the node where data for provided affinity key is located (a.k.a. affinity co-location). Declaration Task AffinityRunAsync(string cacheName, object affinityKey, IComputeAction action, CancellationToken cancellationToken) Parameters Type Name Description System.String cacheName Name of the cache to use for affinity co-location. System.Object affinityKey Affinity key. IComputeAction action Job to execute. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task Task. Apply<TArg, TRes>(IComputeFunc<TArg, TRes>, TArg) Executes provided closure job on a node in this grid projection. Declaration TRes Apply<TArg, TRes>(IComputeFunc<TArg, TRes> clo, TArg arg) Parameters Type Name Description IComputeFunc <TArg, TRes> clo Job to run. TArg arg Job argument. Returns Type Description TRes Job result for this execution. Type Parameters Name Description TArg Type of argument. TRes Type of job result. Apply<TArg, TRes>(IComputeFunc<TArg, TRes>, IEnumerable<TArg>) Executes provided closure job on nodes within this grid projection. A new job is executed for every argument in the passed in collection. The number of actual job executions will be equal to size of the job arguments collection. Declaration ICollection<TRes> Apply<TArg, TRes>(IComputeFunc<TArg, TRes> clo, IEnumerable<TArg> args) Parameters Type Name Description IComputeFunc <TArg, TRes> clo Job to run. System.Collections.Generic.IEnumerable <TArg> args Job arguments. Returns Type Description System.Collections.Generic.ICollection <TRes> Collection of job results. Type Parameters Name Description TArg Type of argument. TRes Type of job result. Apply<TArg, TFuncRes, TRes>(IComputeFunc<TArg, TFuncRes>, IEnumerable<TArg>, IComputeReducer<TFuncRes, TRes>) Executes provided closure job on nodes within this grid projection. A new job is executed for every argument in the passed in collection. The number of actual job executions will be equal to size of the job arguments collection. The returned job results will be reduced into an individual result by provided reducer. Declaration TRes Apply<TArg, TFuncRes, TRes>(IComputeFunc<TArg, TFuncRes> clo, IEnumerable<TArg> args, IComputeReducer<TFuncRes, TRes> rdc) Parameters Type Name Description IComputeFunc <TArg, TFuncRes> clo Job to run. System.Collections.Generic.IEnumerable <TArg> args Job arguments. IComputeReducer <TFuncRes, TRes> rdc Reducer to reduce all job results into one individual return value. Returns Type Description TRes Reduced job result for this execution. Type Parameters Name Description TArg Type of argument. TFuncRes Type of function result. TRes Type of result after reduce. ApplyAsync<TArg, TRes>(IComputeFunc<TArg, TRes>, TArg) Executes provided closure job on a node in this grid projection. Declaration Task<TRes> ApplyAsync<TArg, TRes>(IComputeFunc<TArg, TRes> clo, TArg arg) Parameters Type Name Description IComputeFunc <TArg, TRes> clo Job to run. TArg arg Job argument. Returns Type Description System.Threading.Tasks.Task <TRes> Job result for this execution. Type Parameters Name Description TArg Type of argument. TRes Type of job result. ApplyAsync<TArg, TRes>(IComputeFunc<TArg, TRes>, TArg, CancellationToken) Executes provided closure job on a node in this grid projection. Declaration Task<TRes> ApplyAsync<TArg, TRes>(IComputeFunc<TArg, TRes> clo, TArg arg, CancellationToken cancellationToken) Parameters Type Name Description IComputeFunc <TArg, TRes> clo Job to run. TArg arg Job argument. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task <TRes> Job result for this execution. Type Parameters Name Description TArg Type of argument. TRes Type of job result. ApplyAsync<TArg, TRes>(IComputeFunc<TArg, TRes>, IEnumerable<TArg>) Executes provided closure job on nodes within this grid projection. A new job is executed for every argument in the passed in collection. The number of actual job executions will be equal to size of the job arguments collection. Declaration Task<ICollection<TRes>> ApplyAsync<TArg, TRes>(IComputeFunc<TArg, TRes> clo, IEnumerable<TArg> args) Parameters Type Name Description IComputeFunc <TArg, TRes> clo Job to run. System.Collections.Generic.IEnumerable <TArg> args Job arguments. Returns Type Description System.Threading.Tasks.Task < System.Collections.Generic.ICollection <TRes>> Collection of job results. Type Parameters Name Description TArg Type of argument. TRes Type of job result. ApplyAsync<TArg, TRes>(IComputeFunc<TArg, TRes>, IEnumerable<TArg>, CancellationToken) Executes provided closure job on nodes within this grid projection. A new job is executed for every argument in the passed in collection. The number of actual job executions will be equal to size of the job arguments collection. Declaration Task<ICollection<TRes>> ApplyAsync<TArg, TRes>(IComputeFunc<TArg, TRes> clo, IEnumerable<TArg> args, CancellationToken cancellationToken) Parameters Type Name Description IComputeFunc <TArg, TRes> clo Job to run. System.Collections.Generic.IEnumerable <TArg> args Job arguments. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task < System.Collections.Generic.ICollection <TRes>> Collection of job results. Type Parameters Name Description TArg Type of argument. TRes Type of job result. ApplyAsync<TArg, TFuncRes, TRes>(IComputeFunc<TArg, TFuncRes>, IEnumerable<TArg>, IComputeReducer<TFuncRes, TRes>) Executes provided closure job on nodes within this grid projection. A new job is executed for every argument in the passed in collection. The number of actual job executions will be equal to size of the job arguments collection. The returned job results will be reduced into an individual result by provided reducer. Declaration Task<TRes> ApplyAsync<TArg, TFuncRes, TRes>(IComputeFunc<TArg, TFuncRes> clo, IEnumerable<TArg> args, IComputeReducer<TFuncRes, TRes> rdc) Parameters Type Name Description IComputeFunc <TArg, TFuncRes> clo Job to run. System.Collections.Generic.IEnumerable <TArg> args Job arguments. IComputeReducer <TFuncRes, TRes> rdc Reducer to reduce all job results into one individual return value. Returns Type Description System.Threading.Tasks.Task <TRes> Reduced job result for this execution. Type Parameters Name Description TArg Type of argument. TFuncRes Type of function result. TRes Type of result after reduce. ApplyAsync<TArg, TFuncRes, TRes>(IComputeFunc<TArg, TFuncRes>, IEnumerable<TArg>, IComputeReducer<TFuncRes, TRes>, CancellationToken) Executes provided closure job on nodes within this grid projection. A new job is executed for every argument in the passed in collection. The number of actual job executions will be equal to size of the job arguments collection. The returned job results will be reduced into an individual result by provided reducer. Declaration Task<TRes> ApplyAsync<TArg, TFuncRes, TRes>(IComputeFunc<TArg, TFuncRes> clo, IEnumerable<TArg> args, IComputeReducer<TFuncRes, TRes> rdc, CancellationToken cancellationToken) Parameters Type Name Description IComputeFunc <TArg, TFuncRes> clo Job to run. System.Collections.Generic.IEnumerable <TArg> args Job arguments. IComputeReducer <TFuncRes, TRes> rdc Reducer to reduce all job results into one individual return value. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task <TRes> Reduced job result for this execution. Type Parameters Name Description TArg Type of argument. TFuncRes Type of function result. TRes Type of result after reduce. Broadcast(IComputeAction) Broadcasts given job to all nodes in grid projection. Declaration void Broadcast(IComputeAction action) Parameters Type Name Description IComputeAction action Job to broadcast to all projection nodes. Broadcast<TRes>(IComputeFunc<TRes>) Broadcasts given job to all nodes in grid projection. Every participating node will return a job result. Declaration ICollection<TRes> Broadcast<TRes>(IComputeFunc<TRes> clo) Parameters Type Name Description IComputeFunc <TRes> clo Job to broadcast to all projection nodes. Returns Type Description System.Collections.Generic.ICollection <TRes> Collection of results for this execution. Type Parameters Name Description TRes Broadcast<TArg, TRes>(IComputeFunc<TArg, TRes>, TArg) Broadcasts given closure job with passed in argument to all nodes in grid projection. Every participating node will return a job result. Declaration ICollection<TRes> Broadcast<TArg, TRes>(IComputeFunc<TArg, TRes> clo, TArg arg) Parameters Type Name Description IComputeFunc <TArg, TRes> clo Job to broadcast to all projection nodes. TArg arg Job closure argument. Returns Type Description System.Collections.Generic.ICollection <TRes> Collection of results for this execution. Type Parameters Name Description TArg Type of argument. TRes Type of job result. BroadcastAsync(IComputeAction) Broadcasts given job to all nodes in grid projection. Declaration Task BroadcastAsync(IComputeAction action) Parameters Type Name Description IComputeAction action Job to broadcast to all projection nodes. Returns Type Description System.Threading.Tasks.Task BroadcastAsync(IComputeAction, CancellationToken) Broadcasts given job to all nodes in grid projection. Declaration Task BroadcastAsync(IComputeAction action, CancellationToken cancellationToken) Parameters Type Name Description IComputeAction action Job to broadcast to all projection nodes. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task Task. BroadcastAsync<TRes>(IComputeFunc<TRes>) Broadcasts given job to all nodes in grid projection. Every participating node will return a job result. Declaration Task<ICollection<TRes>> BroadcastAsync<TRes>(IComputeFunc<TRes> clo) Parameters Type Name Description IComputeFunc <TRes> clo Job to broadcast to all projection nodes. Returns Type Description System.Threading.Tasks.Task < System.Collections.Generic.ICollection <TRes>> Collection of results for this execution. Type Parameters Name Description TRes BroadcastAsync<TRes>(IComputeFunc<TRes>, CancellationToken) Broadcasts given job to all nodes in grid projection. Every participating node will return a job result. Declaration Task<ICollection<TRes>> BroadcastAsync<TRes>(IComputeFunc<TRes> clo, CancellationToken cancellationToken) Parameters Type Name Description IComputeFunc <TRes> clo Job to broadcast to all projection nodes. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task < System.Collections.Generic.ICollection <TRes>> Collection of results for this execution. Type Parameters Name Description TRes The type of the resource. BroadcastAsync<TArg, TRes>(IComputeFunc<TArg, TRes>, TArg) Broadcasts given closure job with passed in argument to all nodes in grid projection. Every participating node will return a job result. Declaration Task<ICollection<TRes>> BroadcastAsync<TArg, TRes>(IComputeFunc<TArg, TRes> clo, TArg arg) Parameters Type Name Description IComputeFunc <TArg, TRes> clo Job to broadcast to all projection nodes. TArg arg Job closure argument. Returns Type Description System.Threading.Tasks.Task < System.Collections.Generic.ICollection <TRes>> Collection of results for this execution. Type Parameters Name Description TArg Type of argument. TRes Type of job result. BroadcastAsync<TArg, TRes>(IComputeFunc<TArg, TRes>, TArg, CancellationToken) Broadcasts given closure job with passed in argument to all nodes in grid projection. Every participating node will return a job result. Declaration Task<ICollection<TRes>> BroadcastAsync<TArg, TRes>(IComputeFunc<TArg, TRes> clo, TArg arg, CancellationToken cancellationToken) Parameters Type Name Description IComputeFunc <TArg, TRes> clo Job to broadcast to all projection nodes. TArg arg Job closure argument. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task < System.Collections.Generic.ICollection <TRes>> Collection of results for this execution. Type Parameters Name Description TArg Type of argument. TRes Type of job result. Call<TRes>(IComputeFunc<TRes>) Executes provided job on a node in this grid projection. The result of the job execution is returned from the result closure. Declaration TRes Call<TRes>(IComputeFunc<TRes> clo) Parameters Type Name Description IComputeFunc <TRes> clo Job to execute. Returns Type Description TRes Job result for this execution. Type Parameters Name Description TRes Type of job result. Call<TRes>(IEnumerable<IComputeFunc<TRes>>) Executes collection of jobs on nodes within this grid projection. Declaration ICollection<TRes> Call<TRes>(IEnumerable<IComputeFunc<TRes>> clos) Parameters Type Name Description System.Collections.Generic.IEnumerable < IComputeFunc <TRes>> clos Collection of jobs to execute. Returns Type Description System.Collections.Generic.ICollection <TRes> Collection of job results for this execution. Type Parameters Name Description TRes Type of job result. Call<TFuncRes, TRes>(IEnumerable<IComputeFunc<TFuncRes>>, IComputeReducer<TFuncRes, TRes>) Executes collection of jobs on nodes within this grid projection. Declaration TRes Call<TFuncRes, TRes>(IEnumerable<IComputeFunc<TFuncRes>> clos, IComputeReducer<TFuncRes, TRes> reducer) Parameters Type Name Description System.Collections.Generic.IEnumerable < IComputeFunc <TFuncRes>> clos Collection of jobs to execute. IComputeReducer <TFuncRes, TRes> reducer Reducer to reduce all job results into one individual return value. Returns Type Description TRes Reduced job result for this execution. Type Parameters Name Description TFuncRes Type of function result. TRes Type of result after reduce. CallAsync<TRes>(IComputeFunc<TRes>) Executes provided job on a node in this grid projection. The result of the job execution is returned from the result closure. Declaration Task<TRes> CallAsync<TRes>(IComputeFunc<TRes> clo) Parameters Type Name Description IComputeFunc <TRes> clo Job to execute. Returns Type Description System.Threading.Tasks.Task <TRes> Job result for this execution. Type Parameters Name Description TRes Type of job result. CallAsync<TRes>(IComputeFunc<TRes>, CancellationToken) Executes provided job on a node in this grid projection. The result of the job execution is returned from the result closure. Declaration Task<TRes> CallAsync<TRes>(IComputeFunc<TRes> clo, CancellationToken cancellationToken) Parameters Type Name Description IComputeFunc <TRes> clo Job to execute. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task <TRes> Job result for this execution. Type Parameters Name Description TRes Type of job result. CallAsync<TRes>(IEnumerable<IComputeFunc<TRes>>) Executes collection of jobs on nodes within this grid projection. Declaration Task<ICollection<TRes>> CallAsync<TRes>(IEnumerable<IComputeFunc<TRes>> clos) Parameters Type Name Description System.Collections.Generic.IEnumerable < IComputeFunc <TRes>> clos Collection of jobs to execute. Returns Type Description System.Threading.Tasks.Task < System.Collections.Generic.ICollection <TRes>> Collection of job results for this execution. Type Parameters Name Description TRes Type of job result. CallAsync<TRes>(IEnumerable<IComputeFunc<TRes>>, CancellationToken) Executes collection of jobs on nodes within this grid projection. Declaration Task<ICollection<TRes>> CallAsync<TRes>(IEnumerable<IComputeFunc<TRes>> clos, CancellationToken cancellationToken) Parameters Type Name Description System.Collections.Generic.IEnumerable < IComputeFunc <TRes>> clos Collection of jobs to execute. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task < System.Collections.Generic.ICollection <TRes>> Collection of job results for this execution. Type Parameters Name Description TRes Type of job result. CallAsync<TFuncRes, TRes>(IEnumerable<IComputeFunc<TFuncRes>>, IComputeReducer<TFuncRes, TRes>) Executes collection of jobs on nodes within this grid projection. Declaration Task<TRes> CallAsync<TFuncRes, TRes>(IEnumerable<IComputeFunc<TFuncRes>> clos, IComputeReducer<TFuncRes, TRes> reducer) Parameters Type Name Description System.Collections.Generic.IEnumerable < IComputeFunc <TFuncRes>> clos Collection of jobs to execute. IComputeReducer <TFuncRes, TRes> reducer Reducer to reduce all job results into one individual return value. Returns Type Description System.Threading.Tasks.Task <TRes> Reduced job result for this execution. Type Parameters Name Description TFuncRes Type of function result. TRes Type of result after reduce. CallAsync<TFuncRes, TRes>(IEnumerable<IComputeFunc<TFuncRes>>, IComputeReducer<TFuncRes, TRes>, CancellationToken) Executes collection of jobs on nodes within this grid projection. Declaration Task<TRes> CallAsync<TFuncRes, TRes>(IEnumerable<IComputeFunc<TFuncRes>> clos, IComputeReducer<TFuncRes, TRes> reducer, CancellationToken cancellationToken) Parameters Type Name Description System.Collections.Generic.IEnumerable < IComputeFunc <TFuncRes>> clos Collection of jobs to execute. IComputeReducer <TFuncRes, TRes> reducer Reducer to reduce all job results into one individual return value. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task <TRes> Reduced job result for this execution. Type Parameters Name Description TFuncRes Type of function result. TRes Type of result after reduce. Execute<TJobRes, TRes>(IComputeTask<TJobRes, TRes>) Executes given task on the grid projection. For step-by-step explanation of task execution process refer to IComputeTask<TArg, TJobRes, TRes> documentation. Declaration TRes Execute<TJobRes, TRes>(IComputeTask<TJobRes, TRes> task) Parameters Type Name Description IComputeTask <TJobRes, TRes> task Task to execute. Returns Type Description TRes Task result. Type Parameters Name Description TJobRes Type of job result. TRes Type of reduce result. Execute<TJobRes, TRes>(Type) Executes given task on the grid projection. For step-by-step explanation of task execution process refer to IComputeTask<TArg, TJobRes, TRes> documentation. Declaration TRes Execute<TJobRes, TRes>(Type taskType) Parameters Type Name Description System.Type taskType Task type. Returns Type Description TRes Task result. Type Parameters Name Description TJobRes Type of job result. TRes Type of reduce result. Execute<TArg, TJobRes, TRes>(IComputeTask<TArg, TJobRes, TRes>, TArg) Executes given task on the grid projection. For step-by-step explanation of task execution process refer to IComputeTask<TArg, TJobRes, TRes> documentation. Declaration TRes Execute<TArg, TJobRes, TRes>(IComputeTask<TArg, TJobRes, TRes> task, TArg taskArg) Parameters Type Name Description IComputeTask <TArg, TJobRes, TRes> task Task to execute. TArg taskArg Optional task argument. Returns Type Description TRes Task result. Type Parameters Name Description TArg Argument type. TJobRes Type of job result. TRes Type of final task result. Execute<TArg, TJobRes, TRes>(Type, TArg) Executes given task on the grid projection. For step-by-step explanation of task execution process refer to IComputeTask<TArg, TJobRes, TRes> documentation. Declaration TRes Execute<TArg, TJobRes, TRes>(Type taskType, TArg taskArg) Parameters Type Name Description System.Type taskType Task type. TArg taskArg Optional task argument. Returns Type Description TRes Task result. Type Parameters Name Description TArg Argument type. TJobRes Type of job result. TRes Type of reduce result. ExecuteAsync<TJobRes, TRes>(IComputeTask<TJobRes, TRes>) Executes given task on the grid projection. For step-by-step explanation of task execution process refer to IComputeTask<TArg, TJobRes, TRes> documentation. Declaration Task<TRes> ExecuteAsync<TJobRes, TRes>(IComputeTask<TJobRes, TRes> task) Parameters Type Name Description IComputeTask <TJobRes, TRes> task Task to execute. Returns Type Description System.Threading.Tasks.Task <TRes> Task result. Type Parameters Name Description TJobRes Type of job result. TRes Type of reduce result. ExecuteAsync<TJobRes, TRes>(IComputeTask<TJobRes, TRes>, CancellationToken) Executes given task on the grid projection. For step-by-step explanation of task execution process refer to IComputeTask<TArg, TJobRes, TRes> documentation. Declaration Task<TRes> ExecuteAsync<TJobRes, TRes>(IComputeTask<TJobRes, TRes> task, CancellationToken cancellationToken) Parameters Type Name Description IComputeTask <TJobRes, TRes> task Task to execute. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task <TRes> Task result. Type Parameters Name Description TJobRes Type of job result. TRes Type of reduce result. ExecuteAsync<TJobRes, TRes>(Type) Executes given task on the grid projection. For step-by-step explanation of task execution process refer to IComputeTask<TArg, TJobRes, TRes> documentation. Declaration Task<TRes> ExecuteAsync<TJobRes, TRes>(Type taskType) Parameters Type Name Description System.Type taskType Task type. Returns Type Description System.Threading.Tasks.Task <TRes> Task result. Type Parameters Name Description TJobRes Type of job result. TRes Type of reduce result. ExecuteAsync<TJobRes, TRes>(Type, CancellationToken) Executes given task on the grid projection. For step-by-step explanation of task execution process refer to IComputeTask<TArg, TJobRes, TRes> documentation. Declaration Task<TRes> ExecuteAsync<TJobRes, TRes>(Type taskType, CancellationToken cancellationToken) Parameters Type Name Description System.Type taskType Task type. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task <TRes> Task result. Type Parameters Name Description TJobRes Type of job result. TRes Type of reduce result. ExecuteAsync<TArg, TJobRes, TRes>(IComputeTask<TArg, TJobRes, TRes>, TArg) Executes given task on the grid projection. For step-by-step explanation of task execution process refer to IComputeTask<TArg, TJobRes, TRes> documentation. Declaration Task<TRes> ExecuteAsync<TArg, TJobRes, TRes>(IComputeTask<TArg, TJobRes, TRes> task, TArg taskArg) Parameters Type Name Description IComputeTask <TArg, TJobRes, TRes> task Task to execute. TArg taskArg Optional task argument. Returns Type Description System.Threading.Tasks.Task <TRes> Task result. Type Parameters Name Description TArg Argument type. TJobRes Type of job result. TRes Type of final task result. ExecuteAsync<TArg, TJobRes, TRes>(IComputeTask<TArg, TJobRes, TRes>, TArg, CancellationToken) Executes given task on the grid projection. For step-by-step explanation of task execution process refer to IComputeTask<TArg, TJobRes, TRes> documentation. Declaration Task<TRes> ExecuteAsync<TArg, TJobRes, TRes>(IComputeTask<TArg, TJobRes, TRes> task, TArg taskArg, CancellationToken cancellationToken) Parameters Type Name Description IComputeTask <TArg, TJobRes, TRes> task Task to execute. TArg taskArg Optional task argument. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task <TRes> Task result. Type Parameters Name Description TArg Argument type. TJobRes Type of job result. TRes Type of final task result. ExecuteAsync<TArg, TJobRes, TRes>(Type, TArg) Executes given task on the grid projection. For step-by-step explanation of task execution process refer to IComputeTask<TArg, TJobRes, TRes> documentation. Declaration Task<TRes> ExecuteAsync<TArg, TJobRes, TRes>(Type taskType, TArg taskArg) Parameters Type Name Description System.Type taskType Task type. TArg taskArg Optional task argument. Returns Type Description System.Threading.Tasks.Task <TRes> Task result. Type Parameters Name Description TArg Argument type. TJobRes Type of job result. TRes Type of reduce result. ExecuteAsync<TArg, TJobRes, TRes>(Type, TArg, CancellationToken) Executes given task on the grid projection. For step-by-step explanation of task execution process refer to IComputeTask<TArg, TJobRes, TRes> documentation. Declaration Task<TRes> ExecuteAsync<TArg, TJobRes, TRes>(Type taskType, TArg taskArg, CancellationToken cancellationToken) Parameters Type Name Description System.Type taskType Task type. TArg taskArg Optional task argument. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task <TRes> Task result. Type Parameters Name Description TArg Argument type. TJobRes Type of job result. TRes Type of reduce result. ExecuteJavaTask<TRes>(String, Object) Executes given Java task on the grid projection. If task for given name has not been deployed yet, then 'taskName' will be used as task class name to auto-deploy the task. Declaration TRes ExecuteJavaTask<TRes>(string taskName, object taskArg) Parameters Type Name Description System.String taskName Java task name System.Object taskArg Optional argument of task execution, can be null. Returns Type Description TRes Task result. Type Parameters Name Description TRes Type of task result. ExecuteJavaTaskAsync<TRes>(String, Object) Executes given Java task on the grid projection. If task for given name has not been deployed yet, then 'taskName' will be used as task class name to auto-deploy the task. Declaration Task<TRes> ExecuteJavaTaskAsync<TRes>(string taskName, object taskArg) Parameters Type Name Description System.String taskName Java task name System.Object taskArg Optional argument of task execution, can be null. Returns Type Description System.Threading.Tasks.Task <TRes> Task result. Type Parameters Name Description TRes Type of task result. ExecuteJavaTaskAsync<TRes>(String, Object, CancellationToken) Executes given Java task on the grid projection. If task for given name has not been deployed yet, then 'taskName' will be used as task class name to auto-deploy the task. Declaration Task<TRes> ExecuteJavaTaskAsync<TRes>(string taskName, object taskArg, CancellationToken cancellationToken) Parameters Type Name Description System.String taskName Java task name System.Object taskArg Optional argument of task execution, can be null. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task <TRes> Task result. Type Parameters Name Description TRes Type of task result. Run(IComputeAction) Executes provided job on a node in this grid projection. Declaration void Run(IComputeAction action) Parameters Type Name Description IComputeAction action Job to execute. Run(IEnumerable<IComputeAction>) Executes collection of jobs on Ignite nodes within this grid projection. Declaration void Run(IEnumerable<IComputeAction> actions) Parameters Type Name Description System.Collections.Generic.IEnumerable < IComputeAction > actions Jobs to execute. RunAsync(IComputeAction) Executes provided job on a node in this grid projection. Declaration Task RunAsync(IComputeAction action) Parameters Type Name Description IComputeAction action Job to execute. Returns Type Description System.Threading.Tasks.Task RunAsync(IComputeAction, CancellationToken) Executes provided job on a node in this grid projection. Declaration Task RunAsync(IComputeAction action, CancellationToken cancellationToken) Parameters Type Name Description IComputeAction action Job to execute. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task RunAsync(IEnumerable<IComputeAction>) Executes collection of jobs on Ignite nodes within this grid projection. Declaration Task RunAsync(IEnumerable<IComputeAction> actions) Parameters Type Name Description System.Collections.Generic.IEnumerable < IComputeAction > actions Jobs to execute. Returns Type Description System.Threading.Tasks.Task RunAsync(IEnumerable<IComputeAction>, CancellationToken) Executes collection of jobs on Ignite nodes within this grid projection. Declaration Task RunAsync(IEnumerable<IComputeAction> actions, CancellationToken cancellationToken) Parameters Type Name Description System.Collections.Generic.IEnumerable < IComputeAction > actions Jobs to execute. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task Task. WithExecutor(String) Gets instance of the compute API associated with custom executor. All tasks and closures submitted to returned instance will be processed by this executor on both remote and local nodes. If an executor with the given name doesn't exist, task will be processed in default (\"public\") pool. Executor should be defined in ExecutorConfiguration . Declaration ICompute WithExecutor(string executorName) Parameters Type Name Description System.String executorName Executor name. Returns Type Description ICompute New Compute instance associated with a custom executor. WithKeepBinary() Sets keep-binary flag for the next executed Java task on this projection in the current thread so that task argument passed to Java and returned task results will not be deserialized. Declaration ICompute WithKeepBinary() Returns Type Description ICompute This compute instance for chaining calls. WithNoFailover() Sets no-failover flag for the next executed task on this projection in the current thread. If flag is set, job will be never failed over even if remote node crashes or rejects execution. When task starts execution, the no-failover flag is reset, so all other task will use default failover policy, unless this flag is set again. Declaration ICompute WithNoFailover() Returns Type Description ICompute This compute instance for chaining calls. WithNoResultCache() Disables caching for the next executed task in the current thread. Declaration ICompute WithNoResultCache() Returns Type Description ICompute This compute instance for chaining calls. WithTimeout(Int64) Sets task timeout for the next executed task on this projection in the current thread. When task starts execution, the timeout is reset, so one timeout is used only once. Declaration ICompute WithTimeout(long timeout) Parameters Type Name Description System.Int64 timeout Computation timeout in milliseconds. Returns Type Description ICompute This compute instance for chaining calls."
  },
  "api/Apache.Ignite.Core.Compute.IComputeAction.html": {
    "href": "api/Apache.Ignite.Core.Compute.IComputeAction.html",
    "title": "Interface IComputeAction | Apache Ignite.NET",
    "keywords": "Interface IComputeAction Defines a void function having no arguments. Namespace : Apache.Ignite.Core.Compute Assembly : Apache.Ignite.Core.dll Syntax public interface IComputeAction Methods Invoke() Invokes action. Declaration void Invoke()"
  },
  "api/Apache.Ignite.Core.Configuration.DataPageEvictionMode.html": {
    "href": "api/Apache.Ignite.Core.Configuration.DataPageEvictionMode.html",
    "title": "Enum DataPageEvictionMode | Apache Ignite.NET",
    "keywords": "Enum DataPageEvictionMode Memory page eviction mode. Only data pages, that store key-value entries, are eligible for eviction. The other types of pages, like index or system pages, are not evictable. Namespace : Apache.Ignite.Core.Configuration Assembly : Apache.Ignite.Core.dll Syntax public enum DataPageEvictionMode Fields Name Description Disabled Eviction is disabled. Random2Lru Activates Random-2-LRU algorithm which is a scan resistant version of Random-LRU. This algorithm differs from Random-LRU only in a way that two latest access timestamps are stored for every data page. At the eviction time, a minimum between two latest timestamps is taken for further comparison with minimums of other pages that might be evicted. LRU-2 outperforms LRU by resolving \"one-hit wonder\" problem - if a data page is accessed rarely, but accidentally accessed once, its protected from eviction for a long time. RandomLru Random-LRU algorithm. Once a memory region defined by a memory policy is configured, an off-heap array is allocated to track last usage timestamp for every individual data page. The size of the array equals to MaxSize / PageSize . When a data page is accessed, its timestamp gets updated in the tracking array. The page index in the tracking array equals to pageAddress / MaxSize . When some pages need to be evicted, the algorithm randomly chooses 5 indexes from the tracking array and evicts a page with the latest timestamp. If some of the indexes point to non-data pages (index or system pages) then the algorithm picks other pages."
  },
  "api/Apache.Ignite.Core.Configuration.DataRegionConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Configuration.DataRegionConfiguration.html",
    "title": "Class DataRegionConfiguration | Apache Ignite.NET",
    "keywords": "Class DataRegionConfiguration Defines custom data region configuration for Apache Ignite page memory (see DataStorageConfiguration ). For each configured data region Apache Ignite instantiates respective memory regions with different parameters like maximum size, eviction policy, swapping options, etc. An Apache Ignite cache can be mapped to a particular region using DataRegionName method. Inheritance System.Object DataRegionConfiguration Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Configuration Assembly : Apache.Ignite.Core.dll Syntax public class DataRegionConfiguration Constructors DataRegionConfiguration() Initializes a new instance of the DataRegionConfiguration class. Declaration public DataRegionConfiguration() Fields DefaultEmptyPagesPoolSize The default empty pages pool size. Declaration public const int DefaultEmptyPagesPoolSize = 100 Field Value Type Description System.Int32 DefaultEvictionThreshold The default eviction threshold. Declaration public const double DefaultEvictionThreshold = 0.9 Field Value Type Description System.Double DefaultInitialSize The default initial size. Declaration public const long DefaultInitialSize = 268435456L Field Value Type Description System.Int64 DefaultLazyMemoryAllocation Default value for LazyMemoryAllocation . Declaration public const bool DefaultLazyMemoryAllocation = true Field Value Type Description System.Boolean DefaultMaxSize The default maximum size, equals to 20% of total RAM. Declaration public static readonly long DefaultMaxSize Field Value Type Description System.Int64 DefaultMetricsRateTimeInterval The default rate time interval. Declaration public static readonly TimeSpan DefaultMetricsRateTimeInterval Field Value Type Description System.TimeSpan DefaultMetricsSubIntervalCount The default sub intervals. Declaration public const int DefaultMetricsSubIntervalCount = 5 Field Value Type Description System.Int32 DefaultPersistenceEnabled Default value for PersistenceEnabled . Declaration public const bool DefaultPersistenceEnabled = false Field Value Type Description System.Boolean Properties CheckpointPageBufferSize Gets or sets the size of the checkpointing page buffer. Default is 0 : Ignite will choose buffer size automatically. Declaration public long CheckpointPageBufferSize { get; set; } Property Value Type Description System.Int64 EmptyPagesPoolSize Gets or sets the minimal number of empty pages to be present in reuse lists for this data region. This parameter ensures that Ignite will be able to successfully evict old data entries when the size of (key, value) pair is slightly larger than page size / 2. Increase this parameter if cache can contain very big entries (total size of pages in this pool should be enough to contain largest cache entry). Declaration public int EmptyPagesPoolSize { get; set; } Property Value Type Description System.Int32 EvictionThreshold Gets or sets the threshold for memory pages eviction initiation. For instance, if the threshold is 0.9 it means that the page memory will start the eviction only after 90% of the memory region is occupied. Declaration public double EvictionThreshold { get; set; } Property Value Type Description System.Double InitialSize Gets or sets initial memory region size. When the used memory size exceeds this value, new chunks of memory will be allocated. Declaration public long InitialSize { get; set; } Property Value Type Description System.Int64 LazyMemoryAllocation Gets or sets the lazy memory allocation flag. Declaration public bool LazyMemoryAllocation { get; set; } Property Value Type Description System.Boolean MaxSize Sets maximum memory region size. The total size should not be less than 10 MB due to internal data structures overhead. Declaration public long MaxSize { get; set; } Property Value Type Description System.Int64 MetricsEnabled Gets or sets a value indicating whether memory metrics should be enabled. Metrics can be retrieved with GetDataRegionMetrics() method. Declaration public bool MetricsEnabled { get; set; } Property Value Type Description System.Boolean MetricsRateTimeInterval Gets or sets the rate time interval for AllocationRate and EvictionRate monitoring purposes. For instance, after setting the interval to 60 seconds, subsequent calls to AllocationRate will return average allocation rate (pages per second) for the last minute. Declaration public TimeSpan MetricsRateTimeInterval { get; set; } Property Value Type Description System.TimeSpan MetricsSubIntervalCount Gets or sets the number of sub intervals to split MetricsRateTimeInterval into to calculate AllocationRate and EvictionRate . Bigger value results in more accurate metrics. Declaration public int MetricsSubIntervalCount { get; set; } Property Value Type Description System.Int32 Name Gets or sets the data region name. Declaration public string Name { get; set; } Property Value Type Description System.String PageEvictionMode Gets or sets the page eviction mode. If Disabled is used (default) then an out of memory exception will be thrown if the memory region usage goes beyond MaxSize . Declaration public DataPageEvictionMode PageEvictionMode { get; set; } Property Value Type Description DataPageEvictionMode PersistenceEnabled Gets or sets a value indicating whether disk persistence is enabled for this region. Default is DefaultPersistenceEnabled . Declaration public bool PersistenceEnabled { get; set; } Property Value Type Description System.Boolean SwapPath Gets or sets the the path to the directory for memory-mapped files. Null for no swap. Declaration public string SwapPath { get; set; } Property Value Type Description System.String"
  },
  "api/Apache.Ignite.Core.Configuration.DataStorageConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Configuration.DataStorageConfiguration.html",
    "title": "Class DataStorageConfiguration | Apache Ignite.NET",
    "keywords": "Class DataStorageConfiguration Data storage configuration for Ignite page memory. The page memory is a manageable off-heap based memory architecture that divides all expandable data regions into pages of fixed size. An individual page can store one or many cache key-value entries that allows reusing the memory in the most efficient way and avoid memory fragmentation issues. By default, the page memory allocates a single expandable data region. All the caches that will be configured in an application will be mapped to this data region by default, thus, all the cache data will reside in that data region. Inheritance System.Object DataStorageConfiguration Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Configuration Assembly : Apache.Ignite.Core.dll Syntax public class DataStorageConfiguration Constructors DataStorageConfiguration() Initializes a new instance of the DataStorageConfiguration class. Declaration public DataStorageConfiguration() Fields DefaultCheckpointFrequency Default value for CheckpointFrequency . Declaration public static readonly TimeSpan DefaultCheckpointFrequency Field Value Type Description System.TimeSpan DefaultCheckpointThreads Default value for CheckpointThreads . Declaration public const int DefaultCheckpointThreads = 4 Field Value Type Description System.Int32 DefaultCheckpointWriteOrder Default value for CheckpointWriteOrder . Declaration public const CheckpointWriteOrder DefaultCheckpointWriteOrder = CheckpointWriteOrder.Sequential Field Value Type Description CheckpointWriteOrder DefaultConcurrencyLevel The default concurrency level. Declaration public static readonly int DefaultConcurrencyLevel Field Value Type Description System.Int32 DefaultDataRegionName Default name is assigned to default data region if no user-defined DefaultDataRegionConfiguration is specified. Declaration public const string DefaultDataRegionName = \"default\" Field Value Type Description System.String DefaultLockWaitTime Default value for LockWaitTime . Declaration public static readonly TimeSpan DefaultLockWaitTime Field Value Type Description System.TimeSpan DefaultMaxWalArchiveSize Default value for MaxWalArchiveSize . Declaration public const long DefaultMaxWalArchiveSize = 1073741824L Field Value Type Description System.Int64 DefaultMetricsRateTimeInterval The default rate time interval. Declaration public static readonly TimeSpan DefaultMetricsRateTimeInterval Field Value Type Description System.TimeSpan DefaultMetricsSubIntervalCount The default sub intervals. Declaration public const int DefaultMetricsSubIntervalCount = 5 Field Value Type Description System.Int32 DefaultPageSize The default page size. Declaration public const int DefaultPageSize = 4096 Field Value Type Description System.Int32 DefaultSystemRegionInitialSize Default size of a memory chunk reserved for system cache initially. Declaration public const long DefaultSystemRegionInitialSize = 41943040L Field Value Type Description System.Int64 DefaultSystemRegionMaxSize Default max size of a memory chunk for the system cache. Declaration public const long DefaultSystemRegionMaxSize = 104857600L Field Value Type Description System.Int64 DefaultTlbSize Default value for WalThreadLocalBufferSize . Declaration public const int DefaultTlbSize = 131072 Field Value Type Description System.Int32 DefaultWalArchivePath Default value for WalArchivePath . Declaration public const string DefaultWalArchivePath = \"db/wal/archive\" Field Value Type Description System.String DefaultWalAutoArchiveAfterInactivity Default value for WalFlushFrequency . Declaration public static readonly TimeSpan DefaultWalAutoArchiveAfterInactivity Field Value Type Description System.TimeSpan DefaultWalCompactionEnabled Default value for WalCompactionEnabled . Declaration public const bool DefaultWalCompactionEnabled = false Field Value Type Description System.Boolean DefaultWalFlushFrequency Default value for WalFlushFrequency . Declaration public static readonly TimeSpan DefaultWalFlushFrequency Field Value Type Description System.TimeSpan DefaultWalFsyncDelayNanos Default value for WalFsyncDelayNanos . Declaration public const long DefaultWalFsyncDelayNanos = 1000L Field Value Type Description System.Int64 DefaultWalHistorySize Default value for WalHistorySize . Declaration public const int DefaultWalHistorySize = 20 Field Value Type Description System.Int32 DefaultWalMode Default value for WalMode . Declaration public const WalMode DefaultWalMode = WalMode.LogOnly Field Value Type Description WalMode DefaultWalPageCompression Default value for WalPageCompression . Declaration public const DiskPageCompression DefaultWalPageCompression = DiskPageCompression.Disabled Field Value Type Description DiskPageCompression DefaultWalPath Default value for WalPath . Declaration public const string DefaultWalPath = \"db/wal\" Field Value Type Description System.String DefaultWalRecordIteratorBufferSize Default value for WalRecordIteratorBufferSize . Declaration public const int DefaultWalRecordIteratorBufferSize = 67108864 Field Value Type Description System.Int32 DefaultWalSegments Default value for WalSegments . Declaration public const int DefaultWalSegments = 10 Field Value Type Description System.Int32 DefaultWalSegmentSize Default value for WalSegmentSize . Declaration public const int DefaultWalSegmentSize = 67108864 Field Value Type Description System.Int32 DefaultWriteThrottlingEnabled Default value for WriteThrottlingEnabled . Declaration public const bool DefaultWriteThrottlingEnabled = false Field Value Type Description System.Boolean Properties AlwaysWriteFullPages Gets or sets a value indicating whether full pages should always be written. Declaration public bool AlwaysWriteFullPages { get; set; } Property Value Type Description System.Boolean CheckpointFrequency Gets or sets the checkpointing frequency which is a minimal interval when the dirty pages will be written to the Persistent Store. Declaration public TimeSpan CheckpointFrequency { get; set; } Property Value Type Description System.TimeSpan CheckpointReadLockTimeout Gets or sets the timeout for checkpoint read lock acquisition. Declaration public TimeSpan? CheckpointReadLockTimeout { get; set; } Property Value Type Description System.Nullable < System.TimeSpan > CheckpointThreads Gets or sets the number of threads for checkpointing. Declaration public int CheckpointThreads { get; set; } Property Value Type Description System.Int32 CheckpointWriteOrder Gets or sets the checkpoint page write order on disk. Declaration public CheckpointWriteOrder CheckpointWriteOrder { get; set; } Property Value Type Description CheckpointWriteOrder ConcurrencyLevel Gets or sets the number of concurrent segments in Ignite internal page mapping tables. Declaration public int ConcurrencyLevel { get; set; } Property Value Type Description System.Int32 DataRegionConfigurations Gets or sets the data region configurations. Declaration public ICollection<DataRegionConfiguration> DataRegionConfigurations { get; set; } Property Value Type Description System.Collections.Generic.ICollection < DataRegionConfiguration > DefaultDataRegionConfiguration Gets or sets the default region configuration. Declaration public DataRegionConfiguration DefaultDataRegionConfiguration { get; set; } Property Value Type Description DataRegionConfiguration LockWaitTime Gets or sets the persistent manager file lock wait time. Declaration public TimeSpan LockWaitTime { get; set; } Property Value Type Description System.TimeSpan MaxWalArchiveSize Gets or sets maximum size of wal archive folder, in bytes. Declaration public long MaxWalArchiveSize { get; set; } Property Value Type Description System.Int64 MetricsEnabled Gets or sets a value indicating whether to enable data storage metrics. See GetDataStorageMetrics() . Declaration public bool MetricsEnabled { get; set; } Property Value Type Description System.Boolean MetricsRateTimeInterval Gets or sets the length of the time interval for rate-based metrics. This interval defines a window over which hits will be tracked. Declaration public TimeSpan MetricsRateTimeInterval { get; set; } Property Value Type Description System.TimeSpan MetricsSubIntervalCount Number of sub-intervals to split the MetricsRateTimeInterval into to track the update history. Declaration public int MetricsSubIntervalCount { get; set; } Property Value Type Description System.Int32 PageSize Gets or sets the size of the memory page. Declaration public int PageSize { get; set; } Property Value Type Description System.Int32 StoragePath Gets or sets the path where data and indexes will be persisted. Declaration public string StoragePath { get; set; } Property Value Type Description System.String SystemRegionInitialSize Gets or sets the size of a memory chunk reserved for system needs. Declaration public long SystemRegionInitialSize { get; set; } Property Value Type Description System.Int64 SystemRegionMaxSize Gets or sets the maximum memory region size reserved for system needs. Declaration public long SystemRegionMaxSize { get; set; } Property Value Type Description System.Int64 WalArchivePath Gets or sets the path to the directory where WAL (Write Ahead Log) archive is stored. Every WAL segment will be fully copied to this directory before it can be reused for WAL purposes. Declaration public string WalArchivePath { get; set; } Property Value Type Description System.String WalAutoArchiveAfterInactivity Gets or sets the inactivity time after which to run WAL segment auto archiving. Declaration public TimeSpan WalAutoArchiveAfterInactivity { get; set; } Property Value Type Description System.TimeSpan WalCompactionEnabled Gets or sets flag indicating whether WAL compaction is enabled. If true, system filters and compresses WAL archive in background. Compressed WAL archive gets automatically decompressed on demand. Declaration public bool WalCompactionEnabled { get; set; } Property Value Type Description System.Boolean WalFlushFrequency Gets or sets the WAL (Write Ahead Log) flush frequency. Declaration public TimeSpan WalFlushFrequency { get; set; } Property Value Type Description System.TimeSpan WalFsyncDelayNanos Gets or sets the WAL (Write Ahead Log) fsync (disk sync) delay, in nanoseconds Declaration public long WalFsyncDelayNanos { get; set; } Property Value Type Description System.Int64 WalHistorySize Gets or sets the number of checkpoints to store in WAL (Write Ahead Log) history. Declaration public int WalHistorySize { get; set; } Property Value Type Description System.Int32 WalMode Gets or sets the WAL (Write Ahead Log) mode. Declaration public WalMode WalMode { get; set; } Property Value Type Description WalMode WalPageCompression Gets or sets the compression algorithm for WAL page snapshot records. Declaration public DiskPageCompression WalPageCompression { get; set; } Property Value Type Description DiskPageCompression WalPageCompressionLevel Gets or sets the compression level for WAL page snapshot records. Declaration public int ? WalPageCompressionLevel { get; set; } Property Value Type Description System.Nullable < System.Int32 > WalPath Gets or sets the path to the directory where WAL (Write Ahead Log) is stored. Declaration public string WalPath { get; set; } Property Value Type Description System.String WalRecordIteratorBufferSize Gets or sets the size of the WAL (Write Ahead Log) record iterator buffer, in bytes. Declaration public int WalRecordIteratorBufferSize { get; set; } Property Value Type Description System.Int32 WalSegments Gets or sets a number of WAL (Write Ahead Log) segments to work with. For performance reasons, the whole WAL is split into files of fixed length called segments. Declaration public int WalSegments { get; set; } Property Value Type Description System.Int32 WalSegmentSize Gets or sets the size of the WAL (Write Ahead Log) segment. For performance reasons, the whole WAL is split into files of fixed length called segments. Declaration public int WalSegmentSize { get; set; } Property Value Type Description System.Int32 WalThreadLocalBufferSize Gets or sets the size of the TLB (Thread-Local Buffer), in bytes. Declaration public int WalThreadLocalBufferSize { get; set; } Property Value Type Description System.Int32 WriteThrottlingEnabled Gets or sets a value indicating whether threads that generate dirty pages too fast during ongoing checkpoint will be throttled. Declaration public bool WriteThrottlingEnabled { get; set; } Property Value Type Description System.Boolean"
  },
  "api/Apache.Ignite.Core.Configuration.DiskPageCompression.html": {
    "href": "api/Apache.Ignite.Core.Configuration.DiskPageCompression.html",
    "title": "Enum DiskPageCompression | Apache Ignite.NET",
    "keywords": "Enum DiskPageCompression Disk page compression options. Namespace : Apache.Ignite.Core.Configuration Assembly : Apache.Ignite.Core.dll Syntax public enum DiskPageCompression Fields Name Description Disabled Compression disabled. Lz4 Lz4 compression. SkipGarbage Retain only useful data from half-filled pages, but do not apply any compression. Snappy Snappy compression. Zstd Zstd compression."
  },
  "api/Apache.Ignite.Core.Discovery.Tcp.Multicast.TcpDiscoveryMulticastIpFinder.html": {
    "href": "api/Apache.Ignite.Core.Discovery.Tcp.Multicast.TcpDiscoveryMulticastIpFinder.html",
    "title": "Class TcpDiscoveryMulticastIpFinder | Apache Ignite.NET",
    "keywords": "Class TcpDiscoveryMulticastIpFinder Multicast-based IP finder. When TCP discovery starts this finder sends multicast request and waits for some time when others nodes reply to this request with messages containing their addresses Inheritance System.Object TcpDiscoveryIpFinderBase TcpDiscoveryStaticIpFinder TcpDiscoveryMulticastIpFinder Implements ITcpDiscoveryIpFinder Inherited Members TcpDiscoveryStaticIpFinder.Endpoints TcpDiscoveryIpFinderBase.TypeCodeVmIpFinder TcpDiscoveryIpFinderBase.TypeCodeMulticastIpFinder System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Discovery.Tcp.Multicast Assembly : Apache.Ignite.Core.dll Syntax public class TcpDiscoveryMulticastIpFinder : TcpDiscoveryStaticIpFinder, ITcpDiscoveryIpFinder Constructors TcpDiscoveryMulticastIpFinder() Initializes a new instance of the TcpDiscoveryMulticastIpFinder class. Declaration public TcpDiscoveryMulticastIpFinder() Fields DefaultAddressRequestAttempts Default address request attempts. Declaration public const int DefaultAddressRequestAttempts = 2 Field Value Type Description System.Int32 DefaultMulticastGroup Default multicast group. Declaration public const string DefaultMulticastGroup = \"228.1.2.4\" Field Value Type Description System.String DefaultMulticastPort Default multicast port. Declaration public const int DefaultMulticastPort = 47400 Field Value Type Description System.Int32 DefaultResponseTimeout Default response timeout. Declaration public static readonly TimeSpan DefaultResponseTimeout Field Value Type Description System.TimeSpan Properties AddressRequestAttempts Gets or sets the number of attempts to send multicast address request. IP finder re-sends request only in case if no reply for previous request is received. Declaration public int AddressRequestAttempts { get; set; } Property Value Type Description System.Int32 LocalAddress Gets or sets the local address. If provided address is non-loopback then multicast socket is bound to this interface. If local address is not set or is any local address then IP finder creates multicast sockets for all found non-loopback addresses. Declaration public string LocalAddress { get; set; } Property Value Type Description System.String MulticastGroup Gets or sets the IP address of the multicast group. Declaration public string MulticastGroup { get; set; } Property Value Type Description System.String MulticastPort Gets or sets the port number which multicast messages are sent to. Declaration public int MulticastPort { get; set; } Property Value Type Description System.Int32 ResponseTimeout Gets or sets the response timeout. Declaration public TimeSpan ResponseTimeout { get; set; } Property Value Type Description System.TimeSpan TimeToLive Gets or sets the time to live for multicast packets sent out on this IP finder in order to control the scope of the multicast. Declaration public byte ? TimeToLive { get; set; } Property Value Type Description System.Nullable < System.Byte > TypeCode Gets the type code to be used in Java to determine ip finder type. Declaration protected override byte TypeCode { get; } Property Value Type Description System.Byte Overrides TcpDiscoveryStaticIpFinder.TypeCode Implements ITcpDiscoveryIpFinder"
  },
  "api/Apache.Ignite.Core.Discovery.Tcp.Multicast.html": {
    "href": "api/Apache.Ignite.Core.Discovery.Tcp.Multicast.html",
    "title": "Namespace Apache.Ignite.Core.Discovery.Tcp.Multicast | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Discovery.Tcp.Multicast Classes TcpDiscoveryMulticastIpFinder Multicast-based IP finder. When TCP discovery starts this finder sends multicast request and waits for some time when others nodes reply to this request with messages containing their addresses"
  },
  "api/Apache.Ignite.Core.Discovery.Tcp.Static.TcpDiscoveryStaticIpFinder.html": {
    "href": "api/Apache.Ignite.Core.Discovery.Tcp.Static.TcpDiscoveryStaticIpFinder.html",
    "title": "Class TcpDiscoveryStaticIpFinder | Apache Ignite.NET",
    "keywords": "Class TcpDiscoveryStaticIpFinder IP Finder which works only with pre-configured list of IP addresses. Inheritance System.Object TcpDiscoveryIpFinderBase TcpDiscoveryStaticIpFinder TcpDiscoveryMulticastIpFinder Implements ITcpDiscoveryIpFinder Inherited Members TcpDiscoveryIpFinderBase.TypeCodeVmIpFinder TcpDiscoveryIpFinderBase.TypeCodeMulticastIpFinder System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Discovery.Tcp.Static Assembly : Apache.Ignite.Core.dll Syntax public class TcpDiscoveryStaticIpFinder : TcpDiscoveryIpFinderBase, ITcpDiscoveryIpFinder Constructors TcpDiscoveryStaticIpFinder() Initializes a new instance of the TcpDiscoveryStaticIpFinder class. Declaration public TcpDiscoveryStaticIpFinder() Properties Endpoints Gets or sets the end points. Declaration public ICollection<string> Endpoints { get; set; } Property Value Type Description System.Collections.Generic.ICollection < System.String > TypeCode Gets the type code to be used in Java to determine ip finder type. Declaration protected override byte TypeCode { get; } Property Value Type Description System.Byte Overrides TcpDiscoveryIpFinderBase.TypeCode Implements ITcpDiscoveryIpFinder"
  },
  "api/Apache.Ignite.Core.Discovery.Tcp.Static.html": {
    "href": "api/Apache.Ignite.Core.Discovery.Tcp.Static.html",
    "title": "Namespace Apache.Ignite.Core.Discovery.Tcp.Static | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Discovery.Tcp.Static Classes TcpDiscoveryStaticIpFinder IP Finder which works only with pre-configured list of IP addresses."
  },
  "api/Apache.Ignite.Core.Failure.IFailureHandler.html": {
    "href": "api/Apache.Ignite.Core.Failure.IFailureHandler.html",
    "title": "Interface IFailureHandler | Apache Ignite.NET",
    "keywords": "Interface IFailureHandler Failure handler interface. Only predefined implementations are supported: NoOpFailureHandler , StopNodeFailureHandler , StopNodeOrHaltFailureHandler . Namespace : Apache.Ignite.Core.Failure Assembly : Apache.Ignite.Core.dll Syntax public interface IFailureHandler"
  },
  "api/Apache.Ignite.Core.Events.IEventFilter-1.html": {
    "href": "api/Apache.Ignite.Core.Events.IEventFilter-1.html",
    "title": "Interface IEventFilter<T> | Apache Ignite.NET",
    "keywords": "Interface IEventFilter<T> Represents an event filter. Namespace : Apache.Ignite.Core.Events Assembly : Apache.Ignite.Core.dll Syntax public interface IEventFilter<in T> where T : IEvent Type Parameters Name Description T Event type. Methods Invoke(T) Determines whether specified event passes this filter. Declaration bool Invoke(T evt) Parameters Type Name Description T evt Event. Returns Type Description System.Boolean Value indicating whether specified event passes this filter."
  },
  "api/Apache.Ignite.Core.Events.IEventListener-1.html": {
    "href": "api/Apache.Ignite.Core.Events.IEventListener-1.html",
    "title": "Interface IEventListener<T> | Apache Ignite.NET",
    "keywords": "Interface IEventListener<T> Represents an event listener. Namespace : Apache.Ignite.Core.Events Assembly : Apache.Ignite.Core.dll Syntax public interface IEventListener<in T> where T : IEvent Type Parameters Name Description T Event type. Methods Invoke(T) Invoked when event occurs. Declaration bool Invoke(T evt) Parameters Type Name Description T evt Event. Returns Type Description System.Boolean Value indicating whether this listener should be kept subscribed. Returning false unsubscribes this listener from future notifications."
  },
  "api/Apache.Ignite.Core.Events.IEvents.html": {
    "href": "api/Apache.Ignite.Core.Events.IEvents.html",
    "title": "Interface IEvents | Apache Ignite.NET",
    "keywords": "Interface IEvents Provides functionality for event notifications on nodes defined by ClusterGroup . All members are thread-safe and may be used concurrently from multiple threads. Namespace : Apache.Ignite.Core.Events Assembly : Apache.Ignite.Core.dll Syntax public interface IEvents Properties ClusterGroup Gets the cluster group to which this instance belongs. Declaration IClusterGroup ClusterGroup { get; } Property Value Type Description IClusterGroup Methods DisableLocal(IEnumerable<Int32>) Disables provided events. Allows to stop recording events that were enabled before. Note that specified events will be disabled regardless of whether local node is in this cluster group or not. Declaration void DisableLocal(IEnumerable<int> types) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Int32 > types Events to disable. DisableLocal(Int32[]) Disables provided events. Allows to stop recording events that were enabled before. Note that specified events will be disabled regardless of whether local node is in this cluster group or not. Declaration void DisableLocal(params int[] types) Parameters Type Name Description System.Int32 [] types Events to disable. EnableLocal(IEnumerable<Int32>) Enables provided events. Allows to start recording events that were disabled before. Note that provided events will be enabled regardless of whether local node is in this cluster group or not. Declaration void EnableLocal(IEnumerable<int> types) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Int32 > types Events to enable. EnableLocal(Int32[]) Enables provided events. Allows to start recording events that were disabled before. Note that provided events will be enabled regardless of whether local node is in this cluster group or not. Declaration void EnableLocal(params int[] types) Parameters Type Name Description System.Int32 [] types Events to enable. GetEnabledEvents() Gets types of enabled events. Declaration ICollection<int> GetEnabledEvents() Returns Type Description System.Collections.Generic.ICollection < System.Int32 > Types of enabled events. IsEnabled(Int32) Determines whether the specified event is enabled. Declaration bool IsEnabled(int type) Parameters Type Name Description System.Int32 type Event type. Returns Type Description System.Boolean Value indicating whether the specified event is enabled. LocalListen<T>(IEventListener<T>, IEnumerable<Int32>) Adds an event listener for local events. Note that listener will be added regardless of whether local node is in this cluster group or not. Declaration void LocalListen<T>(IEventListener<T> listener, IEnumerable<int> types)where T : IEvent Parameters Type Name Description IEventListener <T> listener Predicate that is called on each received event. If predicate returns false, it will be unregistered and will stop receiving events. System.Collections.Generic.IEnumerable < System.Int32 > types Event types for which this listener will be notified, should not be empty. Type Parameters Name Description T Type of events. LocalListen<T>(IEventListener<T>, Int32[]) Adds an event listener for local events. Note that listener will be added regardless of whether local node is in this cluster group or not. Declaration void LocalListen<T>(IEventListener<T> listener, params int[] types)where T : IEvent Parameters Type Name Description IEventListener <T> listener Predicate that is called on each received event. If predicate returns false, it will be unregistered and will stop receiving events. System.Int32 [] types Event types for which this listener will be notified, should not be empty. Type Parameters Name Description T Type of events. LocalQuery(IEnumerable<Int32>) Queries local node for events using of specified types. Declaration ICollection<IEvent> LocalQuery(IEnumerable<int> types) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Int32 > types Event types to be queried. Optional. Returns Type Description System.Collections.Generic.ICollection < IEvent > Collection of Ignite events found on local node. LocalQuery(Int32[]) Queries local node for events using of specified types. Declaration ICollection<IEvent> LocalQuery(params int[] types) Parameters Type Name Description System.Int32 [] types Event types to be queried. Optional. Returns Type Description System.Collections.Generic.ICollection < IEvent > Collection of Ignite events found on local node. RecordLocal(IEvent) Records customer user generated event. All registered local listeners will be notified. NOTE: all types in range from 1 to 1000 are reserved for internal Ignite events and should not be used by user-defined events. Attempt to record internal event with this method will cause System.ArgumentException to be thrown. Declaration void RecordLocal(IEvent evt) Parameters Type Name Description IEvent evt Locally generated event. Exceptions Type Condition System.ArgumentException If event type is within Ignite reserved range (1 to 1000) RemoteQuery<T>(IEventFilter<T>, Nullable<TimeSpan>, IEnumerable<Int32>) Queries nodes in this cluster group for events using passed in predicate filter for event selection. Declaration ICollection<T> RemoteQuery<T>(IEventFilter<T> filter, TimeSpan? timeout = default (TimeSpan? ), IEnumerable<int> types = null)where T : IEvent Parameters Type Name Description IEventFilter <T> filter Predicate filter used to query events on remote nodes. System.Nullable < System.TimeSpan > timeout Maximum time to wait for result, null or 0 to wait forever. System.Collections.Generic.IEnumerable < System.Int32 > types Event types to be queried. Returns Type Description System.Collections.Generic.ICollection <T> Collection of Ignite events returned from specified nodes. Type Parameters Name Description T Type of events. RemoteQuery<T>(IEventFilter<T>, Nullable<TimeSpan>, Int32[]) Queries nodes in this cluster group for events using passed in predicate filter for event selection. Declaration ICollection<T> RemoteQuery<T>(IEventFilter<T> filter, TimeSpan? timeout = default (TimeSpan? ), params int[] types)where T : IEvent Parameters Type Name Description IEventFilter <T> filter Predicate filter used to query events on remote nodes. System.Nullable < System.TimeSpan > timeout Maximum time to wait for result, null or 0 to wait forever. System.Int32 [] types Event types to be queried. Returns Type Description System.Collections.Generic.ICollection <T> Collection of Ignite events returned from specified nodes. Type Parameters Name Description T Type of events. RemoteQueryAsync<T>(IEventFilter<T>, Nullable<TimeSpan>, IEnumerable<Int32>) Queries nodes in this cluster group for events using passed in predicate filter for event selection. Declaration Task<ICollection<T>> RemoteQueryAsync<T>(IEventFilter<T> filter, TimeSpan? timeout = default (TimeSpan? ), IEnumerable<int> types = null)where T : IEvent Parameters Type Name Description IEventFilter <T> filter Predicate filter used to query events on remote nodes. System.Nullable < System.TimeSpan > timeout Maximum time to wait for result, null or 0 to wait forever. System.Collections.Generic.IEnumerable < System.Int32 > types Event types to be queried. Returns Type Description System.Threading.Tasks.Task < System.Collections.Generic.ICollection <T>> Collection of Ignite events returned from specified nodes. Type Parameters Name Description T Type of events. RemoteQueryAsync<T>(IEventFilter<T>, Nullable<TimeSpan>, Int32[]) Queries nodes in this cluster group for events using passed in predicate filter for event selection. Declaration Task<ICollection<T>> RemoteQueryAsync<T>(IEventFilter<T> filter, TimeSpan? timeout = default (TimeSpan? ), params int[] types)where T : IEvent Parameters Type Name Description IEventFilter <T> filter Predicate filter used to query events on remote nodes. System.Nullable < System.TimeSpan > timeout Maximum time to wait for result, null or 0 to wait forever. System.Int32 [] types Event types to be queried. Returns Type Description System.Threading.Tasks.Task < System.Collections.Generic.ICollection <T>> Collection of Ignite events returned from specified nodes. Type Parameters Name Description T Type of events. StopLocalListen<T>(IEventListener<T>, IEnumerable<Int32>) Removes local event listener. Declaration bool StopLocalListen<T>(IEventListener<T> listener, IEnumerable<int> types)where T : IEvent Parameters Type Name Description IEventListener <T> listener Local event listener to remove. System.Collections.Generic.IEnumerable < System.Int32 > types Types of events for which to remove listener. If not specified, then listener will be removed for all types it was registered for. Returns Type Description System.Boolean True if listener was removed, false otherwise. Type Parameters Name Description T Type of events. StopLocalListen<T>(IEventListener<T>, Int32[]) Removes local event listener. Declaration bool StopLocalListen<T>(IEventListener<T> listener, params int[] types)where T : IEvent Parameters Type Name Description IEventListener <T> listener Local event listener to remove. System.Int32 [] types Types of events for which to remove listener. If not specified, then listener will be removed for all types it was registered for. Returns Type Description System.Boolean True if listener was removed, false otherwise. Type Parameters Name Description T Type of events. WaitForLocal(IEnumerable<Int32>) Waits for the specified events. Declaration IEvent WaitForLocal(IEnumerable<int> types) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Int32 > types Types of the events to wait for. If not provided, all events will be passed to the filter. Returns Type Description IEvent Ignite event. WaitForLocal(Int32[]) Waits for the specified events. Declaration IEvent WaitForLocal(params int[] types) Parameters Type Name Description System.Int32 [] types Types of the events to wait for. If not provided, all events will be passed to the filter. Returns Type Description IEvent Ignite event. WaitForLocal<T>(IEventFilter<T>, IEnumerable<Int32>) Waits for the specified events. Declaration T WaitForLocal<T>(IEventFilter<T> filter, IEnumerable<int> types)where T : IEvent Parameters Type Name Description IEventFilter <T> filter Optional filtering predicate. Event wait will end as soon as it returns false. System.Collections.Generic.IEnumerable < System.Int32 > types Types of the events to wait for. If not provided, all events will be passed to the filter. Returns Type Description T Ignite event. Type Parameters Name Description T Type of events. WaitForLocal<T>(IEventFilter<T>, Int32[]) Waits for the specified events. Declaration T WaitForLocal<T>(IEventFilter<T> filter, params int[] types)where T : IEvent Parameters Type Name Description IEventFilter <T> filter Optional filtering predicate. Event wait will end as soon as it returns false. System.Int32 [] types Types of the events to wait for. If not provided, all events will be passed to the filter. Returns Type Description T Ignite event. Type Parameters Name Description T Type of events. WaitForLocalAsync(IEnumerable<Int32>) Waits for the specified events. Declaration Task<IEvent> WaitForLocalAsync(IEnumerable<int> types) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Int32 > types Types of the events to wait for. If not provided, all events will be passed to the filter. Returns Type Description System.Threading.Tasks.Task < IEvent > Ignite event. WaitForLocalAsync(Int32[]) Waits for the specified events. Declaration Task<IEvent> WaitForLocalAsync(params int[] types) Parameters Type Name Description System.Int32 [] types Types of the events to wait for. If not provided, all events will be passed to the filter. Returns Type Description System.Threading.Tasks.Task < IEvent > Ignite event. WaitForLocalAsync<T>(IEventFilter<T>, IEnumerable<Int32>) Waits for the specified events. Declaration Task<T> WaitForLocalAsync<T>(IEventFilter<T> filter, IEnumerable<int> types)where T : IEvent Parameters Type Name Description IEventFilter <T> filter Optional filtering predicate. Event wait will end as soon as it returns false. System.Collections.Generic.IEnumerable < System.Int32 > types Types of the events to wait for. If not provided, all events will be passed to the filter. Returns Type Description System.Threading.Tasks.Task <T> Ignite event. Type Parameters Name Description T Type of events. WaitForLocalAsync<T>(IEventFilter<T>, Int32[]) Waits for the specified events. Declaration Task<T> WaitForLocalAsync<T>(IEventFilter<T> filter, params int[] types)where T : IEvent Parameters Type Name Description IEventFilter <T> filter Optional filtering predicate. Event wait will end as soon as it returns false. System.Int32 [] types Types of the events to wait for. If not provided, all events will be passed to the filter. Returns Type Description System.Threading.Tasks.Task <T> Ignite event. Type Parameters Name Description T Type of events."
  },
  "api/Apache.Ignite.Core.Failure.NoOpFailureHandler.html": {
    "href": "api/Apache.Ignite.Core.Failure.NoOpFailureHandler.html",
    "title": "Class NoOpFailureHandler | Apache Ignite.NET",
    "keywords": "Class NoOpFailureHandler Just ignores any failure. It's useful for tests and debugging. Inheritance System.Object NoOpFailureHandler Implements IFailureHandler Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Failure Assembly : Apache.Ignite.Core.dll Syntax public class NoOpFailureHandler : IFailureHandler Implements IFailureHandler"
  },
  "api/Apache.Ignite.Core.Failure.StopNodeFailureHandler.html": {
    "href": "api/Apache.Ignite.Core.Failure.StopNodeFailureHandler.html",
    "title": "Class StopNodeFailureHandler | Apache Ignite.NET",
    "keywords": "Class StopNodeFailureHandler Handler will stop node in case of critical error. Inheritance System.Object StopNodeFailureHandler Implements IFailureHandler Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Failure Assembly : Apache.Ignite.Core.dll Syntax public class StopNodeFailureHandler : IFailureHandler Implements IFailureHandler"
  },
  "api/Apache.Ignite.Core.Failure.StopNodeOrHaltFailureHandler.html": {
    "href": "api/Apache.Ignite.Core.Failure.StopNodeOrHaltFailureHandler.html",
    "title": "Class StopNodeOrHaltFailureHandler | Apache Ignite.NET",
    "keywords": "Class StopNodeOrHaltFailureHandler Handler will try to stop node if TryStop value is true. If node can't be stopped during provided Timeout or TryStop value is false then JVM process will be terminated forcibly. Inheritance System.Object StopNodeOrHaltFailureHandler Implements IFailureHandler Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Failure Assembly : Apache.Ignite.Core.dll Syntax public class StopNodeOrHaltFailureHandler : IFailureHandler Constructors StopNodeOrHaltFailureHandler() Initialize a new instance of the StopNodeOrHaltFailureHandler Declaration public StopNodeOrHaltFailureHandler() Properties Timeout Stop node timeout. Defaults to 0. Declaration public TimeSpan Timeout { get; set; } Property Value Type Description System.TimeSpan TryStop Try stop flag. Defaults false. Declaration public bool TryStop { get; set; } Property Value Type Description System.Boolean Implements IFailureHandler"
  },
  "api/Apache.Ignite.Core.Log.LoggerExtensions.html": {
    "href": "api/Apache.Ignite.Core.Log.LoggerExtensions.html",
    "title": "Class LoggerExtensions | Apache Ignite.NET",
    "keywords": "Class LoggerExtensions Extension methods for ILogger Inheritance System.Object LoggerExtensions Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Log Assembly : Apache.Ignite.Core.dll Syntax public static class LoggerExtensions Methods Debug(ILogger, Exception, String) Logs the message with Debug level. Declaration public static void Debug(this ILogger logger, Exception ex, string message) Parameters Type Name Description ILogger logger The logger. System.Exception ex The exception. System.String message The message. Debug(ILogger, Exception, String, Object[]) Logs the message with Debug level. Declaration public static void Debug(this ILogger logger, Exception ex, string message, params object[] args) Parameters Type Name Description ILogger logger The logger. System.Exception ex The exception. System.String message The message. System.Object [] args The arguments. Debug(ILogger, String) Logs the message with Debug level. Declaration public static void Debug(this ILogger logger, string message) Parameters Type Name Description ILogger logger The logger. System.String message The message. Debug(ILogger, String, Object[]) Logs the message with Debug level. Declaration public static void Debug(this ILogger logger, string message, params object[] args) Parameters Type Name Description ILogger logger The logger. System.String message The message. System.Object [] args The arguments. Error(ILogger, Exception, String) Logs the message with Error level. Declaration public static void Error(this ILogger logger, Exception ex, string message) Parameters Type Name Description ILogger logger The logger. System.Exception ex The exception. System.String message The message. Error(ILogger, Exception, String, Object[]) Logs the message with Error level. Declaration public static void Error(this ILogger logger, Exception ex, string message, params object[] args) Parameters Type Name Description ILogger logger The logger. System.Exception ex The exception. System.String message The message. System.Object [] args The arguments. Error(ILogger, String) Logs the message with Error level. Declaration public static void Error(this ILogger logger, string message) Parameters Type Name Description ILogger logger The logger. System.String message The message. Error(ILogger, String, Object[]) Logs the message with Error level. Declaration public static void Error(this ILogger logger, string message, params object[] args) Parameters Type Name Description ILogger logger The logger. System.String message The message. System.Object [] args The arguments. GetLogger(ILogger, String) Gets the CategoryLogger with a specified category that wraps provided logger. Declaration public static ILogger GetLogger(this ILogger logger, string category) Parameters Type Name Description ILogger logger The logger. System.String category The category. Returns Type Description ILogger Logger that uses specified category when no other category is provided. GetLogger(ILogger, Type) Gets the CategoryLogger with a specified category that wraps provided logger. Declaration public static ILogger GetLogger(this ILogger logger, Type category) Parameters Type Name Description ILogger logger The logger. System.Type category The category as a type. Returns Type Description ILogger Logger that uses specified category when no other category is provided. Info(ILogger, Exception, String) Logs the message with Info level. Declaration public static void Info(this ILogger logger, Exception ex, string message) Parameters Type Name Description ILogger logger The logger. System.Exception ex The exception. System.String message The message. Info(ILogger, Exception, String, Object[]) Logs the message with Info level. Declaration public static void Info(this ILogger logger, Exception ex, string message, params object[] args) Parameters Type Name Description ILogger logger The logger. System.Exception ex The exception. System.String message The message. System.Object [] args The arguments. Info(ILogger, String) Logs the message with Info level. Declaration public static void Info(this ILogger logger, string message) Parameters Type Name Description ILogger logger The logger. System.String message The message. Info(ILogger, String, Object[]) Logs the message with Info level. Declaration public static void Info(this ILogger logger, string message, params object[] args) Parameters Type Name Description ILogger logger The logger. System.String message The message. System.Object [] args The arguments. Log(ILogger, LogLevel, Exception, String) Logs the message. Declaration public static void Log(this ILogger logger, LogLevel level, Exception ex, string message) Parameters Type Name Description ILogger logger The logger. LogLevel level The level. System.Exception ex The exception. System.String message The message. Log(ILogger, LogLevel, Exception, String, Object[]) Logs the message. Declaration public static void Log(this ILogger logger, LogLevel level, Exception ex, string message, params object[] args) Parameters Type Name Description ILogger logger The logger. LogLevel level The level. System.Exception ex The exception. System.String message The message. System.Object [] args The arguments. Log(ILogger, LogLevel, String) Logs the message. Declaration public static void Log(this ILogger logger, LogLevel level, string message) Parameters Type Name Description ILogger logger The logger. LogLevel level The level. System.String message The message. Log(ILogger, LogLevel, String, Object[]) Logs the message. Declaration public static void Log(this ILogger logger, LogLevel level, string message, params object[] args) Parameters Type Name Description ILogger logger The logger. LogLevel level The level. System.String message The message. System.Object [] args The arguments. Trace(ILogger, Exception, String) Logs the message with Trace level. Declaration public static void Trace(this ILogger logger, Exception ex, string message) Parameters Type Name Description ILogger logger The logger. System.Exception ex The exception. System.String message The message. Trace(ILogger, Exception, String, Object[]) Logs the message with Trace level. Declaration public static void Trace(this ILogger logger, Exception ex, string message, params object[] args) Parameters Type Name Description ILogger logger The logger. System.Exception ex The exception. System.String message The message. System.Object [] args The arguments. Trace(ILogger, String) Logs the message with Trace level. Declaration public static void Trace(this ILogger logger, string message) Parameters Type Name Description ILogger logger The logger. System.String message The message. Trace(ILogger, String, Object[]) Logs the message with Trace level. Declaration public static void Trace(this ILogger logger, string message, params object[] args) Parameters Type Name Description ILogger logger The logger. System.String message The message. System.Object [] args The arguments. Warn(ILogger, Exception, String) Logs the message with Warn level. Declaration public static void Warn(this ILogger logger, Exception ex, string message) Parameters Type Name Description ILogger logger The logger. System.Exception ex The exception. System.String message The message. Warn(ILogger, Exception, String, Object[]) Logs the message with Warn level. Declaration public static void Warn(this ILogger logger, Exception ex, string message, params object[] args) Parameters Type Name Description ILogger logger The logger. System.Exception ex The exception. System.String message The message. System.Object [] args The arguments. Warn(ILogger, String) Logs the message with Warn level. Declaration public static void Warn(this ILogger logger, string message) Parameters Type Name Description ILogger logger The logger. System.String message The message. Warn(ILogger, String, Object[]) Logs the message with Warn level. Declaration public static void Warn(this ILogger logger, string message, params object[] args) Parameters Type Name Description ILogger logger The logger. System.String message The message. System.Object [] args The arguments."
  },
  "api/Apache.Ignite.Core.Log.LogLevel.html": {
    "href": "api/Apache.Ignite.Core.Log.LogLevel.html",
    "title": "Enum LogLevel | Apache Ignite.NET",
    "keywords": "Enum LogLevel Defines log levels. Namespace : Apache.Ignite.Core.Log Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public enum LogLevel Fields Name Description Debug Debug log level. Error Error log level. Info Info log level. Trace Trace log level. Warn Warning log level."
  },
  "api/Apache.Ignite.Core.Log.html": {
    "href": "api/Apache.Ignite.Core.Log.html",
    "title": "Namespace Apache.Ignite.Core.Log | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Log Classes CategoryLogger Wrapping logger with a predefined category. When Log(LogLevel, String, Object[], IFormatProvider, String, String, Exception) method is called, and category parameter is null, predefined category will be used. ConsoleLogger Logs to Console. Simple logger implementation without dependencies, provided out of the box for convenience. For anything more complex please use NLog/log4net integrations. LocalDateTimeProvider Returns System.DateTime.Now . LoggerExtensions Extension methods for ILogger Interfaces IDateTimeProvider System.DateTime abstraction for logging. ILogger Defines Ignite logging interface. This interface only provides essential log methods. All convenience overloads are in LoggerExtensions . Enums LogLevel Defines log levels."
  },
  "api/Apache.Ignite.Core.Messaging.IMessageListener-1.html": {
    "href": "api/Apache.Ignite.Core.Messaging.IMessageListener-1.html",
    "title": "Interface IMessageListener<T> | Apache Ignite.NET",
    "keywords": "Interface IMessageListener<T> Represents messaging filter predicate. Namespace : Apache.Ignite.Core.Messaging Assembly : Apache.Ignite.Core.dll Syntax public interface IMessageListener<in T> Type Parameters Name Description T Methods Invoke(Guid, T) Invokes the message listener when a message arrives. Declaration bool Invoke(Guid nodeId, T message) Parameters Type Name Description System.Guid nodeId Message source node identifier. T message Message. Returns Type Description System.Boolean Value indicating whether this instance should remain subscribed. Returning false will unsubscribe this message listener from further notifications."
  },
  "api/Apache.Ignite.Core.Resource.InstanceResourceAttribute.html": {
    "href": "api/Apache.Ignite.Core.Resource.InstanceResourceAttribute.html",
    "title": "Class InstanceResourceAttribute | Apache Ignite.NET",
    "keywords": "Class InstanceResourceAttribute Attribute which injects IIgnite instance. Can be defined inside implementors of IComputeTask<TArg, TJobRes, TRes> and IComputeJob<TRes> interfaces. Can be applied to non-static fields, properties and methods returning void and accepting a single parameter. Inheritance System.Object System.Attribute InstanceResourceAttribute Implements System.Runtime.InteropServices._Attribute Inherited Members System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Boolean) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Boolean) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Module) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.IsDefined(System.Reflection.Module, System.Type) System.Attribute.IsDefined(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Boolean) System.Attribute.IsDefined(System.Reflection.Assembly, System.Type) System.Attribute.IsDefined(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.Equals(System.Object) System.Attribute.GetHashCode() System.Attribute.Match(System.Object) System.Attribute.IsDefaultAttribute() System.Attribute.System.Runtime.InteropServices._Attribute.GetTypeInfoCount(System.UInt32) System.Attribute.System.Runtime.InteropServices._Attribute.GetTypeInfo(System.UInt32, System.UInt32, System.IntPtr) System.Attribute.System.Runtime.InteropServices._Attribute.GetIDsOfNames(System.Guid, System.IntPtr, System.UInt32, System.UInt32, System.IntPtr) System.Attribute.System.Runtime.InteropServices._Attribute.Invoke(System.UInt32, System.Guid, System.UInt32, System.Int16, System.IntPtr, System.IntPtr, System.IntPtr, System.IntPtr) System.Attribute.TypeId System.Object.ToString() System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Resource Assembly : Apache.Ignite.Core.dll Syntax [AttributeUsage(AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Field)] public sealed class InstanceResourceAttribute : Attribute, _Attribute Implements System.Runtime.InteropServices._Attribute"
  },
  "api/Apache.Ignite.Core.Resource.StoreSessionResourceAttribute.html": {
    "href": "api/Apache.Ignite.Core.Resource.StoreSessionResourceAttribute.html",
    "title": "Class StoreSessionResourceAttribute | Apache Ignite.NET",
    "keywords": "Class StoreSessionResourceAttribute Annotates a field or a setter method for injection of current ICacheStoreSession instance. It can be injected into ICacheStore . Inheritance System.Object System.Attribute StoreSessionResourceAttribute Implements System.Runtime.InteropServices._Attribute Inherited Members System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Boolean) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Boolean) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Module) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.IsDefined(System.Reflection.Module, System.Type) System.Attribute.IsDefined(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Boolean) System.Attribute.IsDefined(System.Reflection.Assembly, System.Type) System.Attribute.IsDefined(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.Equals(System.Object) System.Attribute.GetHashCode() System.Attribute.Match(System.Object) System.Attribute.IsDefaultAttribute() System.Attribute.System.Runtime.InteropServices._Attribute.GetTypeInfoCount(System.UInt32) System.Attribute.System.Runtime.InteropServices._Attribute.GetTypeInfo(System.UInt32, System.UInt32, System.IntPtr) System.Attribute.System.Runtime.InteropServices._Attribute.GetIDsOfNames(System.Guid, System.IntPtr, System.UInt32, System.UInt32, System.IntPtr) System.Attribute.System.Runtime.InteropServices._Attribute.Invoke(System.UInt32, System.Guid, System.UInt32, System.Int16, System.IntPtr, System.IntPtr, System.IntPtr, System.IntPtr) System.Attribute.TypeId System.Object.ToString() System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Resource Assembly : Apache.Ignite.Core.dll Syntax [AttributeUsage(AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Field)] public sealed class StoreSessionResourceAttribute : Attribute, _Attribute Implements System.Runtime.InteropServices._Attribute"
  },
  "api/Apache.Ignite.Core.Resource.html": {
    "href": "api/Apache.Ignite.Core.Resource.html",
    "title": "Namespace Apache.Ignite.Core.Resource | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Resource Classes InstanceResourceAttribute Attribute which injects IIgnite instance. Can be defined inside implementors of IComputeTask<TArg, TJobRes, TRes> and IComputeJob<TRes> interfaces. Can be applied to non-static fields, properties and methods returning void and accepting a single parameter. StoreSessionResourceAttribute Annotates a field or a setter method for injection of current ICacheStoreSession instance. It can be injected into ICacheStore ."
  },
  "api/Apache.Ignite.Core.Services.IService.html": {
    "href": "api/Apache.Ignite.Core.Services.IService.html",
    "title": "Interface IService | Apache Ignite.NET",
    "keywords": "Interface IService Represents Ignite-managed service. Namespace : Apache.Ignite.Core.Services Assembly : Apache.Ignite.Core.dll Syntax public interface IService Methods Cancel(IServiceContext) Cancels this instance. Note that Ignite cannot guarantee that the service exits from Execute(IServiceContext) method whenever Cancel(IServiceContext) is called. It is up to the user to make sure that the service code properly reacts to cancellations. Declaration void Cancel(IServiceContext context) Parameters Type Name Description IServiceContext context Service execution context. Execute(IServiceContext) Starts execution of this service. This method is automatically invoked whenever an instance of the service is deployed on a Ignite node. Note that service is considered deployed even after it exits the Execute method and can be cancelled (or undeployed) only by calling any of the Cancel methods on IServices API. Also note that service is not required to exit from Execute method until Cancel method was called. Declaration void Execute(IServiceContext context) Parameters Type Name Description IServiceContext context Service execution context. Init(IServiceContext) Initializes this instance before execution. Declaration void Init(IServiceContext context) Parameters Type Name Description IServiceContext context Service execution context."
  },
  "api/Apache.Ignite.Core.Transactions.TransactionRollbackException.html": {
    "href": "api/Apache.Ignite.Core.Transactions.TransactionRollbackException.html",
    "title": "Class TransactionRollbackException | Apache Ignite.NET",
    "keywords": "Class TransactionRollbackException Exception thrown whenever Ignite transactions has been automatically rolled back. Inheritance System.Object System.Exception IgniteException TransactionRollbackException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Transactions Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class TransactionRollbackException : IgniteException, ISerializable, _Exception Constructors TransactionRollbackException() Initializes a new instance of the TransactionRollbackException class. Declaration public TransactionRollbackException() TransactionRollbackException(SerializationInfo, StreamingContext) Initializes a new instance of the TransactionRollbackException class. Declaration protected TransactionRollbackException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. TransactionRollbackException(String) Initializes a new instance of the TransactionRollbackException class. Declaration public TransactionRollbackException(string message) Parameters Type Name Description System.String message The message that describes the error. TransactionRollbackException(String, Exception) Initializes a new instance of the TransactionRollbackException class. Declaration public TransactionRollbackException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Transactions.TransactionState.html": {
    "href": "api/Apache.Ignite.Core.Transactions.TransactionState.html",
    "title": "Enum TransactionState | Apache Ignite.NET",
    "keywords": "Enum TransactionState Cache transaction state. Namespace : Apache.Ignite.Core.Transactions Assembly : Apache.Ignite.Core.dll Syntax public enum TransactionState Fields Name Description Active Transaction started. Committed Transaction commit succeeded. Committing Transaction commit started (validating finished). MarkedRollback Transaction is marked for rollback. Prepared Transaction validation succeeded. Preparing Transaction validating. RolledBack Transaction rollback succeeded. RollingBack Transaction rollback started (validation failed). Unknown Transaction rollback failed or is otherwise unknown state."
  },
  "api/Apache.Ignite.Core.Transactions.TransactionTimeoutException.html": {
    "href": "api/Apache.Ignite.Core.Transactions.TransactionTimeoutException.html",
    "title": "Class TransactionTimeoutException | Apache Ignite.NET",
    "keywords": "Class TransactionTimeoutException Exception thrown whenever Ignite transactions time out. Inheritance System.Object System.Exception IgniteException TransactionTimeoutException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Transactions Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class TransactionTimeoutException : IgniteException, ISerializable, _Exception Constructors TransactionTimeoutException() Initializes a new instance of the TransactionTimeoutException class. Declaration public TransactionTimeoutException() TransactionTimeoutException(SerializationInfo, StreamingContext) Initializes a new instance of the TransactionTimeoutException class. Declaration protected TransactionTimeoutException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. TransactionTimeoutException(String) Initializes a new instance of the TransactionTimeoutException class. Declaration public TransactionTimeoutException(string message) Parameters Type Name Description System.String message The message that describes the error. TransactionTimeoutException(String, Exception) Initializes a new instance of the TransactionTimeoutException class. Declaration public TransactionTimeoutException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Transactions.html": {
    "href": "api/Apache.Ignite.Core.Transactions.html",
    "title": "Namespace Apache.Ignite.Core.Transactions | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Transactions Classes TransactionConfiguration Transactions configuration. TransactionDeadlockException Indicates a deadlock within Ignite transaction. This exception can be thrown from any cache method that modifies or reads data within a transaction with timeout (see TxStart(TransactionConcurrency, TransactionIsolation, TimeSpan, Int32) overload). TransactionHeuristicException Exception thrown whenever Ignite transaction enters an unknown state. This exception is usually thrown whenever commit partially succeeds. Cache will still resolve this situation automatically to ensure data integrity, by invalidating all values participating in this transaction on remote nodes. TransactionOptimisticException Exception thrown whenever Ignite transactions fail optimistically. TransactionRollbackException Exception thrown whenever Ignite transactions has been automatically rolled back. TransactionTimeoutException Exception thrown whenever Ignite transactions time out. Interfaces ITransaction Grid cache transaction. Cache transactions support the following isolation levels: ReadCommitted isolation level means that always a committed value will be provided for read operations. With this isolation level values are always read from cache global memory or persistent store every time a value is accessed. In other words, if the same key is accessed more than once within the same transaction, it may have different value every time since global cache memory may be updated concurrently by other threads. RepeatableRead isolation level means that if a value was read once within transaction, then all consecutive reads will provide the same in-transaction value. With this isolation level accessed values are stored within in-transaction memory, so consecutive access to the same key within the same transaction will always return the value that was previously read or updated within this transaction. If concurrency is Pessimistic , then a lock on the key will be acquired prior to accessing the value. Serializable isolation level means that all transactions occur in a completely isolated fashion, as if all transactions in the system had executed serially, one after the other. Read access with this level happens the same way as with RepeatableRead level. However, in Optimistic mode, if some transactions cannot be serially isolated from each other, then one winner will be picked and the other transactions in conflict will result in TransactionOptimisticException being thrown on Java side. Cache transactions support the following concurrency models: Optimistic - in this mode all cache operations are not distributed to other nodes until Commit() . In this mode one PREPARE message will be sent to participating cache nodes to start acquiring per-transaction locks, and once all nodes reply OK (i.e. Phase 1 completes successfully), a one-way COMMIT message is sent without waiting for reply. If it is necessary to know whenever remote nodes have committed as well, synchronous commit or synchronous rollback should be enabled via CacheConfiguration.setWriteSynchronizationMode . Note that in this mode, optimistic failures are only possible in conjunction with Serializable isolation level. In all other cases, optimistic transactions will never fail optimistically and will always be identically ordered on all participating Ignite nodes. Pessimistic - in this mode a lock is acquired on all cache operations with exception of read operations in ReadCommitted mode. All optional filters passed into cache operations will be evaluated after successful lock acquisition. Whenever Commit() is called, a single one-way COMMIT message is sent to participating cache nodes without waiting for reply. Note that there is no reason for distributed PREPARE step, as all locks have been already acquired. Just like with optimistic mode, it is possible to configure synchronous commit or rollback and wait till transaction commits on all participating remote nodes. In addition to standard CacheAtomicityMode.TRANSACTIONAL behavior, Ignite also supports a lighter CacheAtomicityMode.ATOMIC mode as well. In this mode distributed transactions and distributed locking are not supported. Disabling transactions and locking allows to achieve much higher performance and throughput ratios. It is recommended that CacheAtomicityMode.TRANSACTIONAL mode is used whenever full ACID -compliant transactions are not needed. You can use cache transactions as follows: ICacheTx tx = cache.TxStart(); try { int v1 = cache<string, int>.Get(\"k1\"); // Check if v1 satisfies some condition before doing a put. if (v1 > 0) cache.Put<string, int>(\"k1\", 2); cache.Removex(\"k2); // Commit the transaction. tx.Commit(); } finally { tx.Dispose(); } ITransactionCollection Disposable readonly collection of ITransaction ITransactionMetrics Transaction metrics, shared across all caches. ITransactions Transactions facade. All members are thread-safe and may be used concurrently from multiple threads. Enums TransactionConcurrency Transaction concurrency control. See ITransaction for more information on transaction concurrency controls. TransactionIsolation Defines different cache transaction isolation levels. See ITransaction documentation for more information about cache transaction isolation levels. TransactionState Cache transaction state."
  },
  "api/Apache.Ignite.AspNet.IgniteWebUtils.html": {
    "href": "api/Apache.Ignite.AspNet.IgniteWebUtils.html",
    "title": "Class IgniteWebUtils | Apache Ignite.NET",
    "keywords": "Class IgniteWebUtils Ignite web utilities. Inheritance System.Object IgniteWebUtils Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.AspNet Assembly : Apache.Ignite.AspNet.dll Syntax public static class IgniteWebUtils Methods GetWebIgniteHome() Gets the Ignite home directory from default location in web deployment (application_root\\bin). Ignite can not detect home directory in a standard way because IIS uses temporary folders for dlls. Declaration public static string GetWebIgniteHome() Returns Type Description System.String"
  },
  "api/Apache.Ignite.Core.Binary.IBinaryIdMapper.html": {
    "href": "api/Apache.Ignite.Core.Binary.IBinaryIdMapper.html",
    "title": "Interface IBinaryIdMapper | Apache Ignite.NET",
    "keywords": "Interface IBinaryIdMapper Maps class name and class field names to integer identifiers. Namespace : Apache.Ignite.Core.Binary Assembly : Apache.Ignite.Core.dll Syntax public interface IBinaryIdMapper Methods GetFieldId(Int32, String) Gets field ID for the given field of the given class. Declaration int GetFieldId(int typeId, string fieldName) Parameters Type Name Description System.Int32 typeId Type ID. System.String fieldName Field name. Returns Type Description System.Int32 ID of the field or null in case hash code is to be used. GetTypeId(String) Gets type ID for the given type. Declaration int GetTypeId(string typeName) Parameters Type Name Description System.String typeName Full type name. Returns Type Description System.Int32 ID of the class or 0 in case hash code is to be used."
  },
  "api/Apache.Ignite.Core.Binary.IBinaryReader.html": {
    "href": "api/Apache.Ignite.Core.Binary.IBinaryReader.html",
    "title": "Interface IBinaryReader | Apache Ignite.NET",
    "keywords": "Interface IBinaryReader Reader for binary objects. Namespace : Apache.Ignite.Core.Binary Assembly : Apache.Ignite.Core.dll Syntax public interface IBinaryReader Methods GetRawReader() Get raw reader. Declaration IBinaryRawReader GetRawReader() Returns Type Description IBinaryRawReader Raw reader. ReadArray<T>(String) Read named object array. Declaration T[] ReadArray<T>(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description T[] Object array. Type Parameters Name Description T ReadBoolean(String) Read named boolean value. Declaration bool ReadBoolean(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Boolean Boolean value. ReadBooleanArray(String) Read named boolean array. Declaration bool[] ReadBooleanArray(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Boolean [] Boolean array. ReadByte(String) Read named byte value. Declaration byte ReadByte(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Byte Byte value. ReadByteArray(String) Read named byte array. Declaration byte[] ReadByteArray(string fieldName) Parameters Type Name Description System.String fieldName Returns Type Description System.Byte [] Byte array. ReadChar(String) Read named char value. Declaration char ReadChar(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Char Char value. ReadCharArray(String) Read named char array. Declaration char[] ReadCharArray(string fieldName) Parameters Type Name Description System.String fieldName Returns Type Description System.Char [] Char array. ReadCollection(String) Read named collection. Declaration ICollection ReadCollection(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Collections.ICollection Collection. ReadCollection(String, Func<Int32, ICollection>, Action<ICollection, Object>) Read named collection. Declaration ICollection ReadCollection(string fieldName, Func<int, ICollection> factory, Action<ICollection, object> adder) Parameters Type Name Description System.String fieldName Field name. System.Func < System.Int32 , System.Collections.ICollection > factory Factory. System.Action < System.Collections.ICollection , System.Object > adder Adder. Returns Type Description System.Collections.ICollection Collection. ReadDecimal(String) Read named decimal value. Declaration decimal ? ReadDecimal(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Nullable < System.Decimal > Decimal value. ReadDecimalArray(String) Read named decimal array. Declaration decimal ? [] ReadDecimalArray(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Nullable < System.Decimal >[] Decimal array. ReadDictionary(String) Read named dictionary. Declaration IDictionary ReadDictionary(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Collections.IDictionary Dictionary. ReadDictionary(String, Func<Int32, IDictionary>) Read named dictionary. Declaration IDictionary ReadDictionary(string fieldName, Func<int, IDictionary> factory) Parameters Type Name Description System.String fieldName Field name. System.Func < System.Int32 , System.Collections.IDictionary > factory Factory. Returns Type Description System.Collections.IDictionary Dictionary. ReadDouble(String) Read named double value. Declaration double ReadDouble(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Double Double value. ReadDoubleArray(String) Read named double array. Declaration double[] ReadDoubleArray(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Double [] Double array. ReadEnum<T>(String) Read named enum value. Declaration T ReadEnum<T>(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description T Enum value. Type Parameters Name Description T ReadEnumArray<T>(String) Read named enum array. Declaration T[] ReadEnumArray<T>(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description T[] Enum array. Type Parameters Name Description T ReadFloat(String) Read named float value. Declaration float ReadFloat(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Single Float value. ReadFloatArray(String) Read named float array. Declaration float[] ReadFloatArray(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Single [] Float array. ReadGuid(String) Read named GUID value. Declaration Guid? ReadGuid(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Nullable < System.Guid > GUID value. ReadGuidArray(String) Read named GUID array. Declaration Guid? [] ReadGuidArray(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Nullable < System.Guid >[] GUID array. ReadInt(String) Read named int value. Declaration int ReadInt(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Int32 Int value. ReadIntArray(String) Read named int array. Declaration int[] ReadIntArray(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Int32 [] Int array. ReadLong(String) Read named long value. Declaration long ReadLong(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Int64 Long value. ReadLongArray(String) Read named long array. Declaration long[] ReadLongArray(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Int64 [] Long array. ReadObject<T>(String) Read named object. Declaration T ReadObject<T>(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description T Object. Type Parameters Name Description T ReadShort(String) Read named short value. Declaration short ReadShort(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Int16 Short value. ReadShortArray(String) Read named short array. Declaration short[] ReadShortArray(string fieldName) Parameters Type Name Description System.String fieldName Returns Type Description System.Int16 [] Short array. ReadString(String) Read named string value. Declaration string ReadString(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.String String value. ReadStringArray(String) Read named string array. Declaration string[] ReadStringArray(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.String [] String array. ReadTimestamp(String) Read named date value in UTC form. Declaration DateTime? ReadTimestamp(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Nullable < System.DateTime > Date value. ReadTimestampArray(String) Read named date array in UTC form. Declaration DateTime? [] ReadTimestampArray(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Nullable < System.DateTime >[] Date array."
  },
  "api/Apache.Ignite.Core.Cache.Affinity.AffinityKeyMappedAttribute.html": {
    "href": "api/Apache.Ignite.Core.Cache.Affinity.AffinityKeyMappedAttribute.html",
    "title": "Class AffinityKeyMappedAttribute | Apache Ignite.NET",
    "keywords": "Class AffinityKeyMappedAttribute Specifies cache key field to be used to determine a node on which given cache key will be stored. Only one field or property can be marked with this attribute. This attribute is an alternative to AffinityKeyFieldName setting. This attribute has lower priority than AffinityKeyFieldName setting. One of the major use cases for this attribute is the routing of grid computations to the nodes where the data for this computation is cached, the concept otherwise known as Colocation Of Computations And Data. For example, if a Person object is always accessed together with a Company object for which this person is an employee, then for better performance and scalability it makes sense to colocate Person objects together with their Company object when storing them in cache. To achieve that, cache key used to cache Person objects should have a field or property marked with AffinityKeyMappedAttribute attribute, which will provide the value of the company key for which that person works. Inheritance System.Object System.Attribute AffinityKeyMappedAttribute Implements System.Runtime.InteropServices._Attribute Inherited Members System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Boolean) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Boolean) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Module) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.IsDefined(System.Reflection.Module, System.Type) System.Attribute.IsDefined(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Boolean) System.Attribute.IsDefined(System.Reflection.Assembly, System.Type) System.Attribute.IsDefined(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.Equals(System.Object) System.Attribute.GetHashCode() System.Attribute.Match(System.Object) System.Attribute.IsDefaultAttribute() System.Attribute.System.Runtime.InteropServices._Attribute.GetTypeInfoCount(System.UInt32) System.Attribute.System.Runtime.InteropServices._Attribute.GetTypeInfo(System.UInt32, System.UInt32, System.IntPtr) System.Attribute.System.Runtime.InteropServices._Attribute.GetIDsOfNames(System.Guid, System.IntPtr, System.UInt32, System.UInt32, System.IntPtr) System.Attribute.System.Runtime.InteropServices._Attribute.Invoke(System.UInt32, System.Guid, System.UInt32, System.Int16, System.IntPtr, System.IntPtr, System.IntPtr, System.IntPtr) System.Attribute.TypeId System.Object.ToString() System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Affinity Assembly : Apache.Ignite.Core.dll Syntax [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)] public sealed class AffinityKeyMappedAttribute : Attribute, _Attribute Methods GetFieldNameFromAttribute(Type) Gets the affinity key field name from attribute. Declaration public static string GetFieldNameFromAttribute(Type type) Parameters Type Name Description System.Type type Returns Type Description System.String Implements System.Runtime.InteropServices._Attribute"
  },
  "api/Apache.Ignite.Core.Cache.CacheResult-1.html": {
    "href": "api/Apache.Ignite.Core.Cache.CacheResult-1.html",
    "title": "Struct CacheResult<T> | Apache Ignite.NET",
    "keywords": "Struct CacheResult<T> Represents a cache operation result with a success flag. Implements System.IEquatable < CacheResult <T>> Inherited Members System.ValueType.ToString() System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() Namespace : Apache.Ignite.Core.Cache Assembly : Apache.Ignite.Core.dll Syntax public struct CacheResult<T> : IEquatable<CacheResult<T>> Type Parameters Name Description T Operation result value type. Constructors CacheResult(T) Initializes a new instance of the CacheResult<T> struct with a specified value and sets success flag to true. Declaration public CacheResult(T value) Parameters Type Name Description T value The value. Properties Success Gets a value indicating whether the operation completed successfully. Declaration public bool Success { get; } Property Value Type Description System.Boolean Value Gets the cache value. Declaration public T Value { get; } Property Value Type Description T Methods Equals(CacheResult<T>) Determines whether the specified System.Object , is equal to this instance. Declaration public bool Equals(CacheResult<T> other) Parameters Type Name Description CacheResult <T> other The System.Object to compare with this instance. Returns Type Description System.Boolean true if the specified System.Object is equal to this instance; otherwise, false . Equals(Object) Determines whether the specified System.Object , is equal to this instance. Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj The System.Object to compare with this instance. Returns Type Description System.Boolean true if the specified System.Object is equal to this instance; otherwise, false . Overrides System.ValueType.Equals(System.Object) GetHashCode() Returns a hash code for this instance. Declaration public override int GetHashCode() Returns Type Description System.Int32 A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Overrides System.ValueType.GetHashCode() Operators Equality(CacheResult<T>, CacheResult<T>) Implements the operator ==. Declaration public static bool operator ==(CacheResult<T> left, CacheResult<T> right) Parameters Type Name Description CacheResult <T> left The left. CacheResult <T> right The right. Returns Type Description System.Boolean The result of the operator. Inequality(CacheResult<T>, CacheResult<T>) Implements the operator !=. Declaration public static bool operator !=(CacheResult<T> left, CacheResult<T> right) Parameters Type Name Description CacheResult <T> left The left. CacheResult <T> right The right. Returns Type Description System.Boolean The result of the operator. Implements System.IEquatable<T>"
  },
  "api/Apache.Ignite.Core.Cache.Configuration.DataPageEvictionMode.html": {
    "href": "api/Apache.Ignite.Core.Cache.Configuration.DataPageEvictionMode.html",
    "title": "Enum DataPageEvictionMode | Apache Ignite.NET",
    "keywords": "Enum DataPageEvictionMode Memory page eviction mode. Only data pages, that store key-value entries, are eligible for eviction. The other types of pages, like index or system pages, are not evictable. Namespace : Apache.Ignite.Core.Cache.Configuration Assembly : Apache.Ignite.Core.dll Syntax [Obsolete(\"Use Apache.Ignite.Core.Configuration.DataPageEvictionMode\")] public enum DataPageEvictionMode Fields Name Description Disabled Eviction is disabled. Random2Lru Activates Random-2-LRU algorithm which is a scan resistant version of Random-LRU. This algorithm differs from Random-LRU only in a way that two latest access timestamps are stored for every data page. At the eviction time, a minimum between two latest timestamps is taken for further comparison with minimums of other pages that might be evicted. LRU-2 outperforms LRU by resolving \"one-hit wonder\" problem - if a data page is accessed rarely, but accidentally accessed once, its protected from eviction for a long time. RandomLru Random-LRU algorithm. Once a memory region defined by a memory policy is configured, an off-heap array is allocated to track last usage timestamp for every individual data page. The size of the array equals to MaxSize / PageSize . When a data page is accessed, its timestamp gets updated in the tracking array. The page index in the tracking array equals to pageAddress / MaxSize . When some pages need to be evicted, the algorithm randomly chooses 5 indexes from the tracking array and evicts a page with the latest timestamp. If some of the indexes point to non-data pages (index or system pages) then the algorithm picks other pages."
  },
  "api/Apache.Ignite.Core.Cache.Configuration.QueryIndex.html": {
    "href": "api/Apache.Ignite.Core.Cache.Configuration.QueryIndex.html",
    "title": "Class QueryIndex | Apache Ignite.NET",
    "keywords": "Class QueryIndex Represents cache query index configuration. Inheritance System.Object QueryIndex Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Configuration Assembly : Apache.Ignite.Core.dll Syntax public class QueryIndex Constructors QueryIndex() Initializes a new instance of the QueryIndex class. Declaration public QueryIndex() QueryIndex(QueryIndexField[]) Initializes a new instance of the QueryIndex class. Declaration public QueryIndex(params QueryIndexField[] fields) Parameters Type Name Description QueryIndexField [] fields The fields. QueryIndex(Boolean, QueryIndexType, String[]) Initializes a new instance of the QueryIndex class. Declaration public QueryIndex(bool isDescending, QueryIndexType indexType, params string[] fieldNames) Parameters Type Name Description System.Boolean isDescending Sort direction. QueryIndexType indexType Type of the index. System.String [] fieldNames Names of the fields to index. QueryIndex(Boolean, String[]) Initializes a new instance of the QueryIndex class. Declaration public QueryIndex(bool isDescending, params string[] fieldNames) Parameters Type Name Description System.Boolean isDescending Sort direction. System.String [] fieldNames Names of the fields to index. QueryIndex(String[]) Initializes a new instance of the QueryIndex class. Declaration public QueryIndex(params string[] fieldNames) Parameters Type Name Description System.String [] fieldNames Names of the fields to index. Fields DefaultInlineSize Default value for InlineSize . Declaration public const int DefaultInlineSize = -1 Field Value Type Description System.Int32 Properties Fields Gets or sets a collection of fields to be indexed. Declaration public ICollection<QueryIndexField> Fields { get; set; } Property Value Type Description System.Collections.Generic.ICollection < QueryIndexField > IndexType Gets or sets the type of the index. Declaration public QueryIndexType IndexType { get; set; } Property Value Type Description QueryIndexType InlineSize Gets index inline size in bytes. When enabled part of indexed value will be placed directly to index pages, thus minimizing data page accesses and increasing query performance. Allowed values: -1 (default) - determine inline size automatically(see below) 0 - index inline is disabled(not recommended) positive value - fixed index inline When set to -1 , Ignite will try to detect inline size automatically. It will be no more than SqlIndexMaxInlineSize . Index inline will be enabled for all fixed-length types, but will not be enabled for System.String . Declaration public int InlineSize { get; set; } Property Value Type Description System.Int32 Name Gets or sets the index name. Will be set automatically if not specified. Declaration public string Name { get; set; } Property Value Type Description System.String"
  },
  "api/Apache.Ignite.Core.Cache.Eviction.EvictionPolicyBase.html": {
    "href": "api/Apache.Ignite.Core.Cache.Eviction.EvictionPolicyBase.html",
    "title": "Class EvictionPolicyBase | Apache Ignite.NET",
    "keywords": "Class EvictionPolicyBase Base class for predefined eviction policies. Inheritance System.Object EvictionPolicyBase FifoEvictionPolicy LruEvictionPolicy Implements IEvictionPolicy Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Eviction Assembly : Apache.Ignite.Core.dll Syntax public abstract class EvictionPolicyBase : IEvictionPolicy Fields DefaultBatchSize Default batch cache size. Declaration public const int DefaultBatchSize = 1 Field Value Type Description System.Int32 DefaultMaxMemorySize Default max cache size in bytes. Declaration public const long DefaultMaxMemorySize = 0L Field Value Type Description System.Int64 DefaultMaxSize Default max cache size. Declaration public const int DefaultMaxSize = 100000 Field Value Type Description System.Int32 Properties BatchSize Gets or sets the size of the eviction batch. Batch eviction is enabled only if maximum memory limit isn't set ( MaxMemorySize == 0). Declaration public int BatchSize { get; set; } Property Value Type Description System.Int32 MaxMemorySize Gets or sets the maximum allowed cache size in bytes. 0 for unlimited. Declaration public long MaxMemorySize { get; set; } Property Value Type Description System.Int64 MaxSize Gets or sets the maximum allowed cache size (entry count). 0 for unlimited. Declaration public int MaxSize { get; set; } Property Value Type Description System.Int32 Implements IEvictionPolicy"
  },
  "api/Apache.Ignite.Core.Cache.Expiry.html": {
    "href": "api/Apache.Ignite.Core.Cache.Expiry.html",
    "title": "Namespace Apache.Ignite.Core.Cache.Expiry | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Cache.Expiry Classes ExpiryPolicy Default expiry policy implementation with all durations defined explicitly. Interfaces IExpiryPolicy Defines functions to determine when cache entries will expire based on creation, access and modification operations."
  },
  "api/Apache.Ignite.Core.Cache.ICache-2.html": {
    "href": "api/Apache.Ignite.Core.Cache.ICache-2.html",
    "title": "Interface ICache<TK, TV> | Apache Ignite.NET",
    "keywords": "Interface ICache<TK, TV> Main entry point for Ignite cache APIs. You can get a named cache by calling GetCache<TK, TV>(String) method. Cache API supports distributed transactions. All Get(...) , Put(...) , Replace(...) , and Remove(...) operations are transactional and will participate in an ongoing transaction, if any. Other methods like Peek(...) or various Contains(...) methods may be transaction-aware, i.e. check in-transaction entries first, but will not affect the current state of transaction. See ITransaction documentation for more information about transactions. Neither null keys or values are allowed to be stored in cache. If a null value happens to be in cache (e.g. after invalidation or remove), then cache will treat this case as there is no value at all. Note that cache is generic and you can only work with provided key and value types. If cache also contains keys or values of other types, any attempt to retrieve them will result in System.InvalidCastException . Use ICache<TK, TV> in order to work with entries of arbitrary types. All members are thread-safe and may be used concurrently from multiple threads. Inherited Members System.Collections.Generic.IEnumerable<Apache.Ignite.Core.Cache.ICacheEntry<TK, TV>>.GetEnumerator() System.Collections.IEnumerable.GetEnumerator() Namespace : Apache.Ignite.Core.Cache Assembly : Apache.Ignite.Core.dll Syntax public interface ICache<TK, TV> : IEnumerable<ICacheEntry<TK, TV>>, IEnumerable Type Parameters Name Description TK Key type. TV Value type. Properties Ignite Ignite hosting this cache. Declaration IIgnite Ignite { get; } Property Value Type Description IIgnite IsAllowAtomicOpsInTx Gets a value indicating whether to allow use atomic operations in transactions. Declaration [Obsolete(\"Not supported, will be removed in future releases.\")] bool IsAllowAtomicOpsInTx { get; } Property Value Type Description System.Boolean IsKeepBinary Gets a value indicating whether to keep values in binary form. Declaration bool IsKeepBinary { get; } Property Value Type Description System.Boolean Item[TK] Gets or sets a cache value with the specified key. Shortcut to Get(TK) and Put(TK, TV) Declaration TV this[TK key] { get; set; } Parameters Type Name Description TK key Key. Property Value Type Description TV Cache value with the specified key. Exceptions Type Condition System.Collections.Generic.KeyNotFoundException If the key is not present in the cache. Name Name of this cache ( null for default cache). Declaration string Name { get; } Property Value Type Description System.String Methods Clear() Clears the contents of the cache, without notifying listeners or CacheWriters. Declaration void Clear() Clear(TK) Clear entry from the cache and swap storage, without notifying listeners or CacheWriters. Entry is cleared only if it is not currently locked, and is not participating in a transaction. Declaration void Clear(TK key) Parameters Type Name Description TK key Key to clear. ClearAll(IEnumerable<TK>) Clear entries from the cache and swap storage, without notifying listeners or CacheWriters. Entry is cleared only if it is not currently locked, and is not participating in a transaction. Declaration void ClearAll(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys to clear. ClearAllAsync(IEnumerable<TK>) Clear entries from the cache and swap storage, without notifying listeners or CacheWriters. Entry is cleared only if it is not currently locked, and is not participating in a transaction. Declaration Task ClearAllAsync(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys to clear. Returns Type Description System.Threading.Tasks.Task ClearAsync() Clears the contents of the cache, without notifying listeners or CacheWriters. Declaration Task ClearAsync() Returns Type Description System.Threading.Tasks.Task ClearAsync(TK) Clear entry from the cache and swap storage, without notifying listeners or CacheWriters. Entry is cleared only if it is not currently locked, and is not participating in a transaction. Declaration Task ClearAsync(TK key) Parameters Type Name Description TK key Key to clear. Returns Type Description System.Threading.Tasks.Task ClearStatistics() Clears cluster statistics for this cache. Declaration void ClearStatistics() ContainsKey(TK) Check if cache contains mapping for this key. Declaration bool ContainsKey(TK key) Parameters Type Name Description TK key Key. Returns Type Description System.Boolean True if cache contains mapping for this key. ContainsKeyAsync(TK) Check if cache contains mapping for this key. Declaration Task<bool> ContainsKeyAsync(TK key) Parameters Type Name Description TK key Key. Returns Type Description System.Threading.Tasks.Task < System.Boolean > True if cache contains mapping for this key. ContainsKeys(IEnumerable<TK>) Check if cache contains mapping for these keys. Declaration bool ContainsKeys(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys. Returns Type Description System.Boolean True if cache contains mapping for all these keys. ContainsKeysAsync(IEnumerable<TK>) Check if cache contains mapping for these keys. Declaration Task<bool> ContainsKeysAsync(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys. Returns Type Description System.Threading.Tasks.Task < System.Boolean > True if cache contains mapping for all these keys. EnableStatistics(Boolean) Sets statistics (metrics) enabled flag cluster wide for this cache. Declaration void EnableStatistics(bool enabled) Parameters Type Name Description System.Boolean enabled Enabled flag Get(TK) Retrieves value mapped to the specified key from cache. If the value is not present in cache, then it will be looked up from swap storage. If it's not present in swap, or if swap is disable, and if read-through is allowed, value will be loaded from persistent store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration TV Get(TK key) Parameters Type Name Description TK key Key. Returns Type Description TV Value. Exceptions Type Condition System.Collections.Generic.KeyNotFoundException If the key is not present in the cache. GetAll(IEnumerable<TK>) Retrieves values mapped to the specified keys from cache. If some value is not present in cache, then it will be looked up from swap storage. If it's not present in swap, or if swap is disabled, and if read-through is allowed, value will be loaded from persistent store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration ICollection<ICacheEntry<TK, TV>> GetAll(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys. Returns Type Description System.Collections.Generic.ICollection < ICacheEntry <TK, TV>> Map of key-value pairs. GetAllAsync(IEnumerable<TK>) Retrieves values mapped to the specified keys from cache. If some value is not present in cache, then it will be looked up from swap storage. If it's not present in swap, or if swap is disabled, and if read-through is allowed, value will be loaded from persistent store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration Task<ICollection<ICacheEntry<TK, TV>>> GetAllAsync(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys. Returns Type Description System.Threading.Tasks.Task < System.Collections.Generic.ICollection < ICacheEntry <TK, TV>>> Map of key-value pairs. GetAndPut(TK, TV) Associates the specified value with the specified key in this cache, returning an existing value if one existed. Declaration CacheResult<TV> GetAndPut(TK key, TV val) Parameters Type Name Description TK key Key with which the specified value is to be associated. TV val Value to be associated with the specified key. Returns Type Description CacheResult <TV> The value associated with the key at the start of the operation. GetAndPutAsync(TK, TV) Associates the specified value with the specified key in this cache, returning an existing value if one existed. Declaration Task<CacheResult<TV>> GetAndPutAsync(TK key, TV val) Parameters Type Name Description TK key Key with which the specified value is to be associated. TV val Value to be associated with the specified key. Returns Type Description System.Threading.Tasks.Task < CacheResult <TV>> The value associated with the key at the start of the operation. GetAndPutIfAbsent(TK, TV) Stores given key-value pair in cache only if cache had no previous mapping for it. If cache previously contained value for the given key, then this value is returned. In case of PARTITIONED or REPLICATED caches, the value will be loaded from the primary node, which in its turn may load the value from the swap storage, and consecutively, if it's not in swap, from the underlying persistent storage. If the returned value is not needed, method putxIfAbsent() should be used instead of this one to avoid the overhead associated with returning of the previous value. If write-through is enabled, the stored value will be persisted to store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration CacheResult<TV> GetAndPutIfAbsent(TK key, TV val) Parameters Type Name Description TK key Key to store in cache. TV val Value to be associated with the given key. Returns Type Description CacheResult <TV> Previously contained value regardless of whether put happened or not. GetAndPutIfAbsentAsync(TK, TV) Stores given key-value pair in cache only if cache had no previous mapping for it. If cache previously contained value for the given key, then this value is returned. In case of PARTITIONED or REPLICATED caches, the value will be loaded from the primary node, which in its turn may load the value from the swap storage, and consecutively, if it's not in swap, from the underlying persistent storage. If the returned value is not needed, method putxIfAbsent() should be used instead of this one to avoid the overhead associated with returning of the previous value. If write-through is enabled, the stored value will be persisted to store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration Task<CacheResult<TV>> GetAndPutIfAbsentAsync(TK key, TV val) Parameters Type Name Description TK key Key to store in cache. TV val Value to be associated with the given key. Returns Type Description System.Threading.Tasks.Task < CacheResult <TV>> Previously contained value regardless of whether put happened or not. GetAndRemove(TK) Atomically removes the entry for a key only if currently mapped to some value. Declaration CacheResult<TV> GetAndRemove(TK key) Parameters Type Name Description TK key Key with which the specified value is associated. Returns Type Description CacheResult <TV> The value if one existed. GetAndRemoveAsync(TK) Atomically removes the entry for a key only if currently mapped to some value. Declaration Task<CacheResult<TV>> GetAndRemoveAsync(TK key) Parameters Type Name Description TK key Key with which the specified value is associated. Returns Type Description System.Threading.Tasks.Task < CacheResult <TV>> The value if one existed. GetAndReplace(TK, TV) Atomically replaces the value for a given key if and only if there is a value currently mapped by the key. Declaration CacheResult<TV> GetAndReplace(TK key, TV val) Parameters Type Name Description TK key Key with which the specified value is to be associated. TV val Value to be associated with the specified key. Returns Type Description CacheResult <TV> The previous value associated with the specified key. GetAndReplaceAsync(TK, TV) Atomically replaces the value for a given key if and only if there is a value currently mapped by the key. Declaration Task<CacheResult<TV>> GetAndReplaceAsync(TK key, TV val) Parameters Type Name Description TK key Key with which the specified value is to be associated. TV val Value to be associated with the specified key. Returns Type Description System.Threading.Tasks.Task < CacheResult <TV>> The previous value associated with the specified key. GetAsync(TK) Retrieves value mapped to the specified key from cache. If the value is not present in cache, then it will be looked up from swap storage. If it's not present in swap, or if swap is disable, and if read-through is allowed, value will be loaded from persistent store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration Task<TV> GetAsync(TK key) Parameters Type Name Description TK key Key. Returns Type Description System.Threading.Tasks.Task <TV> Value. Exceptions Type Condition System.Collections.Generic.KeyNotFoundException If the key is not present in the cache. GetConfiguration() Gets the cache configuration. Declaration CacheConfiguration GetConfiguration() Returns Type Description CacheConfiguration GetLocalEntries(CachePeekMode[]) Get local cache entries. Declaration IEnumerable<ICacheEntry<TK, TV>> GetLocalEntries(params CachePeekMode[] peekModes) Parameters Type Name Description CachePeekMode [] peekModes Peek modes. Returns Type Description System.Collections.Generic.IEnumerable < ICacheEntry <TK, TV>> Enumerable instance. GetLocalMetrics() Gets local snapshot metrics (statistics) for this cache. Declaration ICacheMetrics GetLocalMetrics() Returns Type Description ICacheMetrics Cache metrics. GetLocalSize(CachePeekMode[]) Gets the number of all entries cached on this node. Declaration int GetLocalSize(params CachePeekMode[] modes) Parameters Type Name Description CachePeekMode [] modes Optional peek modes. If not provided, then total cache size is returned. Returns Type Description System.Int32 Cache size on this node. GetLocalSizeLong(CachePeekMode[]) Gets the number of all entries cached on this node as long value. Declaration long GetLocalSizeLong(params CachePeekMode[] modes) Parameters Type Name Description CachePeekMode [] modes Optional peek modes. If not provided, then total cache size is returned. Returns Type Description System.Int64 Cache size on this node. GetLocalSizeLong(Int32, CachePeekMode[]) Gets the number of all entries in a partition cached on this node as long value. Declaration long GetLocalSizeLong(int partition, params CachePeekMode[] modes) Parameters Type Name Description System.Int32 partition Cache partition. CachePeekMode [] modes Optional peek modes. If not provided, then total cache size is returned. Returns Type Description System.Int64 Partition cache size on this node. GetLostPartitions() Gets lost partitions IDs. See also PartitionLossPolicy and ResetLostPartitions(IEnumerable<String>) . Declaration ICollection<int> GetLostPartitions() Returns Type Description System.Collections.Generic.ICollection < System.Int32 > GetMetrics() Gets global (whole cluster) snapshot metrics (statistics) for this cache. Declaration ICacheMetrics GetMetrics() Returns Type Description ICacheMetrics Cache metrics. GetMetrics(IClusterGroup) Gets global (whole cluster group) snapshot metrics (statistics) for this cache. Declaration ICacheMetrics GetMetrics(IClusterGroup clusterGroup) Parameters Type Name Description IClusterGroup clusterGroup The cluster group to get metrics for. Returns Type Description ICacheMetrics GetQueryMetrics() Gets query metrics. Declaration IQueryMetrics GetQueryMetrics() Returns Type Description IQueryMetrics Query metrics. GetSize(CachePeekMode[]) Gets the number of all entries cached across all nodes. NOTE: this operation is distributed and will query all participating nodes for their cache sizes. Declaration int GetSize(params CachePeekMode[] modes) Parameters Type Name Description CachePeekMode [] modes Optional peek modes. If not provided, then total cache size is returned. Returns Type Description System.Int32 Cache size across all nodes. GetSizeAsync(CachePeekMode[]) Gets the number of all entries cached across all nodes. NOTE: this operation is distributed and will query all participating nodes for their cache sizes. Declaration Task<int> GetSizeAsync(params CachePeekMode[] modes) Parameters Type Name Description CachePeekMode [] modes Optional peek modes. If not provided, then total cache size is returned. Returns Type Description System.Threading.Tasks.Task < System.Int32 > Cache size across all nodes. GetSizeLong(CachePeekMode[]) Gets the number of all entries cached across all nodes as long value. NOTE: this operation is distributed and will query all participating nodes for their cache sizes. Declaration long GetSizeLong(params CachePeekMode[] modes) Parameters Type Name Description CachePeekMode [] modes Optional peek modes. If not provided, then total cache size is returned. Returns Type Description System.Int64 Cache size across all nodes. GetSizeLong(Int32, CachePeekMode[]) Gets the number of all entries in partition cached across all nodes as long value. NOTE: this operation is distributed and will query all participating nodes for their cache sizes. Declaration long GetSizeLong(int partition, params CachePeekMode[] modes) Parameters Type Name Description System.Int32 partition Cache partition. CachePeekMode [] modes Optional peek modes. If not provided, then total cache size is returned. Returns Type Description System.Int64 Partition cache size across all nodes. GetSizeLongAsync(CachePeekMode[]) Gets the number of all entries cached across all nodes as long value. NOTE: this operation is distributed and will query all participating nodes for their cache sizes. Declaration Task<long> GetSizeLongAsync(params CachePeekMode[] modes) Parameters Type Name Description CachePeekMode [] modes Optional peek modes. If not provided, then total cache size is returned. Returns Type Description System.Threading.Tasks.Task < System.Int64 > Cache size across all nodes. GetSizeLongAsync(Int32, CachePeekMode[]) Gets the number of all entries in a partition cached across all nodes as long value. NOTE: this operation is distributed and will query all participating nodes for their cache sizes. Declaration Task<long> GetSizeLongAsync(int partition, params CachePeekMode[] modes) Parameters Type Name Description System.Int32 partition Cache partition. CachePeekMode [] modes Optional peek modes. If not provided, then total cache size is returned. Returns Type Description System.Threading.Tasks.Task < System.Int64 > Partition cache size across all nodes. Invoke<TArg, TRes>(TK, ICacheEntryProcessor<TK, TV, TArg, TRes>, TArg) Invokes an ICacheEntryProcessor<TK, TV, TArg, TRes> against the IMutableCacheEntry<TK, TV> specified by the provided key. If an entry does not exist for the specified key, an attempt is made to load it (if a loader is configured) or a surrogate entry, consisting of the key with a null value is used instead. Declaration TRes Invoke<TArg, TRes>(TK key, ICacheEntryProcessor<TK, TV, TArg, TRes> processor, TArg arg) Parameters Type Name Description TK key The key. ICacheEntryProcessor <TK, TV, TArg, TRes> processor The processor. TArg arg The argument. Returns Type Description TRes Result of the processing. Type Parameters Name Description TArg The type of the argument. TRes The type of the result. Exceptions Type Condition CacheEntryProcessorException If an exception has occured during processing. InvokeAll<TArg, TRes>(IEnumerable<TK>, ICacheEntryProcessor<TK, TV, TArg, TRes>, TArg) Invokes an ICacheEntryProcessor<TK, TV, TArg, TRes> against a set of keys. If an entry does not exist for the specified key, an attempt is made to load it (if a loader is configured) or a surrogate entry, consisting of the key with a null value is used instead. The order that the entries for the keys are processed is undefined. Implementations may choose to process the entries in any order, including concurrently. Furthermore there is no guarantee implementations will use the same processor instance to process each entry, as the case may be in a non-local cache topology. Keys are locked in the order in which they are enumerated. It is caller's responsibility to make sure keys always follow same order, such as by using System.Collections.Generic.SortedSet`1 . Using unordered collection, such as System.Collections.Generic.HashSet`1 , while calling this method in parallel will lead to deadlock . Declaration ICollection<ICacheEntryProcessorResult<TK, TRes>> InvokeAll<TArg, TRes>(IEnumerable<TK> keys, ICacheEntryProcessor<TK, TV, TArg, TRes> processor, TArg arg) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys The keys. ICacheEntryProcessor <TK, TV, TArg, TRes> processor The processor. TArg arg The argument. Returns Type Description System.Collections.Generic.ICollection < ICacheEntryProcessorResult <TK, TRes>> Map of ICacheEntryProcessorResult<TK, T> of the processing per key, if any, defined by the ICacheEntryProcessor<TK, TV, TArg, TRes> implementation. No mappings will be returned for processors that return a null value for a key. Type Parameters Name Description TArg The type of the argument. TRes The type of the result. Exceptions Type Condition CacheEntryProcessorException If an exception has occured during processing. InvokeAllAsync<TArg, TRes>(IEnumerable<TK>, ICacheEntryProcessor<TK, TV, TArg, TRes>, TArg) Invokes an ICacheEntryProcessor<TK, TV, TArg, TRes> against a set of keys. If an entry does not exist for the specified key, an attempt is made to load it (if a loader is configured) or a surrogate entry, consisting of the key with a null value is used instead. The order that the entries for the keys are processed is undefined. Implementations may choose to process the entries in any order, including concurrently. Furthermore there is no guarantee implementations will use the same processor instance to process each entry, as the case may be in a non-local cache topology. Keys are locked in the order in which they are enumerated. It is caller's responsibility to make sure keys always follow same order, such as by using System.Collections.Generic.SortedSet`1 . Using unordered collection, such as System.Collections.Generic.HashSet`1 , while calling this method in parallel will lead to deadlock . Declaration Task<ICollection<ICacheEntryProcessorResult<TK, TRes>>> InvokeAllAsync<TArg, TRes>(IEnumerable<TK> keys, ICacheEntryProcessor<TK, TV, TArg, TRes> processor, TArg arg) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys The keys. ICacheEntryProcessor <TK, TV, TArg, TRes> processor The processor. TArg arg The argument. Returns Type Description System.Threading.Tasks.Task < System.Collections.Generic.ICollection < ICacheEntryProcessorResult <TK, TRes>>> Map of ICacheEntryProcessorResult<TK, T> of the processing per key, if any, defined by the ICacheEntryProcessor<TK, TV, TArg, TRes> implementation. No mappings will be returned for processors that return a null value for a key. Type Parameters Name Description TArg The type of the argument. TRes The type of the result. Exceptions Type Condition CacheEntryProcessorException If an exception has occured during processing. InvokeAsync<TArg, TRes>(TK, ICacheEntryProcessor<TK, TV, TArg, TRes>, TArg) Invokes an ICacheEntryProcessor<TK, TV, TArg, TRes> against the IMutableCacheEntry<TK, TV> specified by the provided key. If an entry does not exist for the specified key, an attempt is made to load it (if a loader is configured) or a surrogate entry, consisting of the key with a null value is used instead. Declaration Task<TRes> InvokeAsync<TArg, TRes>(TK key, ICacheEntryProcessor<TK, TV, TArg, TRes> processor, TArg arg) Parameters Type Name Description TK key The key. ICacheEntryProcessor <TK, TV, TArg, TRes> processor The processor. TArg arg The argument. Returns Type Description System.Threading.Tasks.Task <TRes> Result of the processing. Type Parameters Name Description TArg The type of the argument. TRes The type of the result. Exceptions Type Condition CacheEntryProcessorException If an exception has occured during processing. IsEmpty() Checks whether this cache contains no key-value mappings. Semantically equals to ICache.Size(CachePeekMode.PRIMARY) == 0 . Declaration bool IsEmpty() Returns Type Description System.Boolean IsLocalLocked(TK, Boolean) Checks if specified key is locked. This is a local operation and does not involve any network trips or access to persistent storage in any way. Declaration bool IsLocalLocked(TK key, bool byCurrentThread) Parameters Type Name Description TK key Key to check. System.Boolean byCurrentThread If true, checks that current thread owns a lock on this key; otherwise, checks that any thread on any node owns a lock on this key. Returns Type Description System.Boolean True if specified key is locked; otherwise, false. LoadAll(IEnumerable<TK>, Boolean) Loads the specified entries into the cache using the configured ICacheStore > for the given keys. If an entry for a key already exists in the cache, a value will be loaded if and only if replaceExistingValues is true. If no loader is configured for the cache, no objects will be loaded. Declaration void LoadAll(IEnumerable<TK> keys, bool replaceExistingValues) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys The keys to load. System.Boolean replaceExistingValues if set to true , existing cache values will be replaced by those loaded from a cache store. LoadAllAsync(IEnumerable<TK>, Boolean) Asynchronously loads the specified entries into the cache using the configured ICacheStore > for the given keys. If an entry for a key already exists in the cache, a value will be loaded if and only if replaceExistingValues is true. If no loader is configured for the cache, no objects will be loaded. Declaration Task LoadAllAsync(IEnumerable<TK> keys, bool replaceExistingValues) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys The keys to load. System.Boolean replaceExistingValues if set to true , existing cache values will be replaced by those loaded from a cache store. Returns Type Description System.Threading.Tasks.Task LoadCache(ICacheEntryFilter<TK, TV>, Object[]) Executes LocalLoadCache(ICacheEntryFilter<TK, TV>, Object[]) on all cache nodes. Declaration void LoadCache(ICacheEntryFilter<TK, TV> p, params object[] args) Parameters Type Name Description ICacheEntryFilter <TK, TV> p Optional predicate. If provided, will be used to filter values to be put into cache. System.Object [] args Optional user arguments to be passed into LoadCache(Action<TK, TV>, Object[]) . LoadCacheAsync(ICacheEntryFilter<TK, TV>, Object[]) Executes LocalLoadCache(ICacheEntryFilter<TK, TV>, Object[]) on all cache nodes. Declaration Task LoadCacheAsync(ICacheEntryFilter<TK, TV> p, params object[] args) Parameters Type Name Description ICacheEntryFilter <TK, TV> p Optional predicate. If provided, will be used to filter values to be put into cache. System.Object [] args Optional user arguments to be passed into LoadCache(Action<TK, TV>, Object[]) . Returns Type Description System.Threading.Tasks.Task LocalClear(TK) Clear entry from the cache and swap storage, without notifying listeners or CacheWriters. Entry is cleared only if it is not currently locked, and is not participating in a transaction. Note that this operation is local as it merely clears an entry from local cache, it does not remove entries from remote caches. Declaration void LocalClear(TK key) Parameters Type Name Description TK key Key to clear. LocalClearAll(IEnumerable<TK>) Clear entries from the cache and swap storage, without notifying listeners or CacheWriters. Entry is cleared only if it is not currently locked, and is not participating in a transaction. Note that this operation is local as it merely clears entries from local cache, it does not remove entries from remote caches. Declaration void LocalClearAll(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys to clear. LocalEvict(IEnumerable<TK>) Attempts to evict all entries associated with keys. Note, that entry will be evicted only if it's not used (not participating in any locks or transactions). Declaration void LocalEvict(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys to evict from cache. LocalLoadCache(ICacheEntryFilter<TK, TV>, Object[]) Delegates to LoadCache(Action<TK, TV>, Object[]) method to load state from the underlying persistent storage. The loaded values will then be given to the optionally passed in predicate, and, if the predicate returns true, will be stored in cache. If predicate is null, then all loaded values will be stored in cache. Declaration void LocalLoadCache(ICacheEntryFilter<TK, TV> p, params object[] args) Parameters Type Name Description ICacheEntryFilter <TK, TV> p Optional predicate. If provided, will be used to filter values to be put into cache. System.Object [] args Optional user arguments to be passed into LoadCache(Action<TK, TV>, Object[]) . LocalLoadCacheAsync(ICacheEntryFilter<TK, TV>, Object[]) Delegates to LoadCache(Action<TK, TV>, Object[]) method to load state from the underlying persistent storage. The loaded values will then be given to the optionally passed in predicate, and, if the predicate returns true, will be stored in cache. If predicate is null, then all loaded values will be stored in cache. Declaration Task LocalLoadCacheAsync(ICacheEntryFilter<TK, TV> p, params object[] args) Parameters Type Name Description ICacheEntryFilter <TK, TV> p Optional predicate. If provided, will be used to filter values to be put into cache. System.Object [] args Optional user arguments to be passed into LoadCache(Action<TK, TV>, Object[]) . Returns Type Description System.Threading.Tasks.Task LocalPeek(TK, CachePeekMode[]) Peeks at cached value using optional set of peek modes. This method will sequentially iterate over given peek modes, and try to peek at value using each peek mode. Once a non-null value is found, it will be immediately returned. This method does not participate in any transactions, however, it may peek at transactional value depending on the peek modes used. If key is not present in cache, KeyNotFoundException will be thrown. Declaration TV LocalPeek(TK key, params CachePeekMode[] modes) Parameters Type Name Description TK key Key. CachePeekMode [] modes Peek modes. Returns Type Description TV Peeked value. LocalPreloadPartition(Int32) Efficiently preloads cache partition into page memory if it exists on the local node. This is useful for fast iteration over cache partition data if persistence is enabled and the data is \"cold\". Preload will reduce available amount of page memory for subsequent operations and may lead to earlier page replacement. This method is irrelevant for in-memory caches. Declaration bool LocalPreloadPartition(int partition) Parameters Type Name Description System.Int32 partition Partition number. Returns Type Description System.Boolean True if partition was preloaded, False if it doesn't belong to local node. Lock(TK) Creates an ICacheLock instance associated with passed key. This method does not acquire lock immediately, you have to call appropriate method on returned instance. Declaration ICacheLock Lock(TK key) Parameters Type Name Description TK key Key for lock. Returns Type Description ICacheLock New ICacheLock instance associated with passed key. LockAll(IEnumerable<TK>) Creates an ICacheLock instance associated with passed keys. This method does not acquire lock immediately, you have to call appropriate method on returned instance. Declaration ICacheLock LockAll(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys for lock. Returns Type Description ICacheLock New ICacheLock instance associated with passed keys. PreloadPartition(Int32) Efficiently preloads cache partition into page memory. This is useful for fast iteration over cache partition data if persistence is enabled and the data is \"cold\". Preload will reduce available amount of page memory for subsequent operations and may lead to earlier page replacement. This method is irrelevant for in-memory caches. Calling this method on an in-memory cache will result in exception. Declaration void PreloadPartition(int partition) Parameters Type Name Description System.Int32 partition Partition number. PreloadPartitionAsync(Int32) Efficiently preloads cache partition into page memory asynchronously. This is useful for fast iteration over cache partition data if persistence is enabled and the data is \"cold\". Preload will reduce available amount of page memory for subsequent operations and may lead to earlier page replacement. This method is irrelevant for in-memory caches. Calling this method on an in-memory cache will result in exception. Declaration Task PreloadPartitionAsync(int partition) Parameters Type Name Description System.Int32 partition Partition number. Returns Type Description System.Threading.Tasks.Task Task. Put(TK, TV) Associates the specified value with the specified key in the cache. If the cache previously contained a mapping for the key, the old value is replaced by the specified value. Declaration void Put(TK key, TV val) Parameters Type Name Description TK key Key with which the specified value is to be associated. TV val Value to be associated with the specified key. PutAll(IEnumerable<KeyValuePair<TK, TV>>) Stores given key-value pairs in cache. If write-through is enabled, the stored values will be persisted to store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Keys are locked in the order in which they are enumerated. It is caller's responsibility to make sure keys always follow same order, such as by using System.Collections.Generic.SortedDictionary`2 . Using unordered dictionary, such as System.Collections.Generic.Dictionary`2 , while calling this method in parallel will lead to deadlock . Declaration void PutAll(IEnumerable<KeyValuePair<TK, TV>> vals) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair <TK, TV>> vals Key-value pairs to store in cache. PutAllAsync(IEnumerable<KeyValuePair<TK, TV>>) Stores given key-value pairs in cache. If write-through is enabled, the stored values will be persisted to store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Keys are locked in the order in which they are enumerated. It is caller's responsibility to make sure keys always follow same order, such as by using System.Collections.Generic.SortedDictionary`2 . Using unordered dictionary, such as System.Collections.Generic.Dictionary`2 , while calling this method in parallel will lead to deadlock . Declaration Task PutAllAsync(IEnumerable<KeyValuePair<TK, TV>> vals) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair <TK, TV>> vals Key-value pairs to store in cache. Returns Type Description System.Threading.Tasks.Task PutAsync(TK, TV) Associates the specified value with the specified key in the cache. If the cache previously contained a mapping for the key, the old value is replaced by the specified value. Declaration Task PutAsync(TK key, TV val) Parameters Type Name Description TK key Key with which the specified value is to be associated. TV val Value to be associated with the specified key. Returns Type Description System.Threading.Tasks.Task PutIfAbsent(TK, TV) Atomically associates the specified key with the given value if it is not already associated with a value. Declaration bool PutIfAbsent(TK key, TV val) Parameters Type Name Description TK key Key with which the specified value is to be associated. TV val Value to be associated with the specified key. Returns Type Description System.Boolean True if a value was set. PutIfAbsentAsync(TK, TV) Atomically associates the specified key with the given value if it is not already associated with a value. Declaration Task<bool> PutIfAbsentAsync(TK key, TV val) Parameters Type Name Description TK key Key with which the specified value is to be associated. TV val Value to be associated with the specified key. Returns Type Description System.Threading.Tasks.Task < System.Boolean > True if a value was set. Query(QueryBase) Queries cache. Declaration IQueryCursor<ICacheEntry<TK, TV>> Query(QueryBase qry) Parameters Type Name Description QueryBase qry Query. Returns Type Description IQueryCursor < ICacheEntry <TK, TV>> Cursor. Query(SqlFieldsQuery) Queries separate entry fields. Declaration IFieldsQueryCursor Query(SqlFieldsQuery qry) Parameters Type Name Description SqlFieldsQuery qry SQL fields query. Returns Type Description IFieldsQueryCursor Cursor. QueryContinuous(ContinuousQuery<TK, TV>) Start continuous query execution. Declaration IContinuousQueryHandle QueryContinuous(ContinuousQuery<TK, TV> qry) Parameters Type Name Description ContinuousQuery <TK, TV> qry Continuous query. Returns Type Description IContinuousQueryHandle Handle to stop query execution. QueryContinuous(ContinuousQuery<TK, TV>, QueryBase) Start continuous query execution. Declaration IContinuousQueryHandle<ICacheEntry<TK, TV>> QueryContinuous(ContinuousQuery<TK, TV> qry, QueryBase initialQry) Parameters Type Name Description ContinuousQuery <TK, TV> qry Continuous query. QueryBase initialQry The initial query. This query will be executed before continuous listener is registered which allows to iterate through entries which have already existed at the time continuous query is executed. Returns Type Description IContinuousQueryHandle < ICacheEntry <TK, TV>> Handle to get initial query cursor or stop query execution. QueryContinuous(ContinuousQuery<TK, TV>, SqlFieldsQuery) Start continuous query execution. Declaration IContinuousQueryHandleFields QueryContinuous(ContinuousQuery<TK, TV> qry, SqlFieldsQuery initialQry) Parameters Type Name Description ContinuousQuery <TK, TV> qry Continuous query. SqlFieldsQuery initialQry The initial fields query. This query will be executed before continuous listener is registered which allows to iterate through entries which have already existed at the time continuous query is executed. Returns Type Description IContinuousQueryHandleFields Handle to get initial query cursor or stop query execution. QueryFields(SqlFieldsQuery) Queries separate entry fields. Declaration [Obsolete(\"Use Query(SqlFieldsQuery qry) instead.\")] IQueryCursor<IList> QueryFields(SqlFieldsQuery qry) Parameters Type Name Description SqlFieldsQuery qry SQL fields query. Returns Type Description IQueryCursor < System.Collections.IList > Cursor. Rebalance() Rebalances cache partitions. This method is usually used when rebalanceDelay configuration parameter has non-zero value. When many nodes are started or stopped almost concurrently, it is more efficient to delay rebalancing until the node topology is stable to make sure that no redundant re-partitioning happens. In case of partitioned caches, for better efficiency user should usually make sure that new nodes get placed on the same place of consistent hash ring as the left nodes, and that nodes are restarted before rebalanceDelay expires. Declaration Task Rebalance() Returns Type Description System.Threading.Tasks.Task Task that will be completed when rebalancing is finished. Remove(TK) Removes given key mapping from cache. If cache previously contained value for the given key, then this value is returned. In case of PARTITIONED or REPLICATED caches, the value will be loaded from the primary node, which in its turn may load the value from the disk-based swap storage, and consecutively, if it's not in swap, from the underlying persistent storage. If the returned value is not needed, method removex() should always be used instead of this one to avoid the overhead associated with returning of the previous value. If write-through is enabled, the value will be removed from store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration bool Remove(TK key) Parameters Type Name Description TK key Key whose mapping is to be removed from cache. Returns Type Description System.Boolean False if there was no matching key. Remove(TK, TV) Removes given key mapping from cache if one exists and value is equal to the passed in value. If write-through is enabled, the value will be removed from store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration bool Remove(TK key, TV val) Parameters Type Name Description TK key Key whose mapping is to be removed from cache. TV val Value to match against currently cached value. Returns Type Description System.Boolean True if entry was removed, false otherwise. RemoveAll() Removes all mappings from cache. If write-through is enabled, the value will be removed from store. This method is not transactional. Declaration void RemoveAll() RemoveAll(IEnumerable<TK>) Removes given key mappings from cache. If write-through is enabled, the value will be removed from store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Keys are locked in the order in which they are enumerated. It is caller's responsibility to make sure keys always follow same order, such as by using System.Collections.Generic.SortedSet`1 . Using unordered collection, such as System.Collections.Generic.HashSet`1 , while calling this method in parallel will lead to deadlock . Declaration void RemoveAll(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys whose mappings are to be removed from cache. RemoveAllAsync() Removes all mappings from cache. If write-through is enabled, the value will be removed from store. This method is not transactional. Declaration Task RemoveAllAsync() Returns Type Description System.Threading.Tasks.Task RemoveAllAsync(IEnumerable<TK>) Removes given key mappings from cache. If write-through is enabled, the value will be removed from store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Keys are locked in the order in which they are enumerated. It is caller's responsibility to make sure keys always follow same order, such as by using System.Collections.Generic.SortedSet`1 . Using unordered collection, such as System.Collections.Generic.HashSet`1 , while calling this method in parallel will lead to deadlock . Declaration Task RemoveAllAsync(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys whose mappings are to be removed from cache. Returns Type Description System.Threading.Tasks.Task RemoveAsync(TK) Removes given key mapping from cache. If cache previously contained value for the given key, then this value is returned. In case of PARTITIONED or REPLICATED caches, the value will be loaded from the primary node, which in its turn may load the value from the disk-based swap storage, and consecutively, if it's not in swap, from the underlying persistent storage. If the returned value is not needed, method removex() should always be used instead of this one to avoid the overhead associated with returning of the previous value. If write-through is enabled, the value will be removed from store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration Task<bool> RemoveAsync(TK key) Parameters Type Name Description TK key Key whose mapping is to be removed from cache. Returns Type Description System.Threading.Tasks.Task < System.Boolean > False if there was no matching key. RemoveAsync(TK, TV) Removes given key mapping from cache if one exists and value is equal to the passed in value. If write-through is enabled, the value will be removed from store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration Task<bool> RemoveAsync(TK key, TV val) Parameters Type Name Description TK key Key whose mapping is to be removed from cache. TV val Value to match against currently cached value. Returns Type Description System.Threading.Tasks.Task < System.Boolean > True if entry was removed, false otherwise. Replace(TK, TV) Stores given key-value pair in cache only if there is a previous mapping for it. If cache previously contained value for the given key, then this value is returned. In case of PARTITIONED or REPLICATED caches, the value will be loaded from the primary node, which in its turn may load the value from the swap storage, and consecutively, if it's not in swap, rom the underlying persistent storage. If write-through is enabled, the stored value will be persisted to store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration bool Replace(TK key, TV val) Parameters Type Name Description TK key Key to store in cache. TV val Value to be associated with the given key. Returns Type Description System.Boolean True if the value was replaced. Replace(TK, TV, TV) Stores given key-value pair in cache only if only if the previous value is equal to the old value passed as argument. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration bool Replace(TK key, TV oldVal, TV newVal) Parameters Type Name Description TK key Key to store in cache. TV oldVal Old value to match. TV newVal Value to be associated with the given key. Returns Type Description System.Boolean True if replace happened, false otherwise. ReplaceAsync(TK, TV) Stores given key-value pair in cache only if there is a previous mapping for it. If cache previously contained value for the given key, then this value is returned. In case of PARTITIONED or REPLICATED caches, the value will be loaded from the primary node, which in its turn may load the value from the swap storage, and consecutively, if it's not in swap, rom the underlying persistent storage. If write-through is enabled, the stored value will be persisted to store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration Task<bool> ReplaceAsync(TK key, TV val) Parameters Type Name Description TK key Key to store in cache. TV val Value to be associated with the given key. Returns Type Description System.Threading.Tasks.Task < System.Boolean > True if the value was replaced. ReplaceAsync(TK, TV, TV) Stores given key-value pair in cache only if only if the previous value is equal to the old value passed as argument. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration Task<bool> ReplaceAsync(TK key, TV oldVal, TV newVal) Parameters Type Name Description TK key Key to store in cache. TV oldVal Old value to match. TV newVal Value to be associated with the given key. Returns Type Description System.Threading.Tasks.Task < System.Boolean > True if replace happened, false otherwise. ResetQueryMetrics() Reset query metrics. Declaration void ResetQueryMetrics() TryGet(TK, out TV) Retrieves value mapped to the specified key from cache. If the value is not present in cache, then it will be looked up from swap storage. If it's not present in swap, or if swap is disable, and if read-through is allowed, value will be loaded from persistent store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration bool TryGet(TK key, out TV value) Parameters Type Name Description TK key Key. TV value When this method returns, the value associated with the specified key, if the key is found; otherwise, the default value for the type of the value parameter. This parameter is passed uninitialized. Returns Type Description System.Boolean true if the cache contains an element with the specified key; otherwise, false. TryGetAsync(TK) Retrieves value mapped to the specified key from cache. If the value is not present in cache, then it will be looked up from swap storage. If it's not present in swap, or if swap is disable, and if read-through is allowed, value will be loaded from persistent store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration Task<CacheResult<TV>> TryGetAsync(TK key) Parameters Type Name Description TK key Key. Returns Type Description System.Threading.Tasks.Task < CacheResult <TV>> CacheResult<T> containing a bool success flag and a value. TryLocalPeek(TK, out TV, CachePeekMode[]) Peeks at cached value using optional set of peek modes. This method will sequentially iterate over given peek modes, and try to peek at value using each peek mode. Once a non-null value is found, it will be immediately returned. This method does not participate in any transactions, however, it may peek at transactional value depending on the peek modes used. Declaration bool TryLocalPeek(TK key, out TV value, params CachePeekMode[] modes) Parameters Type Name Description TK key Key. TV value When this method returns, the value associated with the specified key, if the key is found; otherwise, the default value for the type of the value parameter. This parameter is passed uninitialized. CachePeekMode [] modes Peek modes. Returns Type Description System.Boolean true if the cache contains an element with the specified key; otherwise, false. WithAllowAtomicOpsInTx() Get another cache instance with operations allowed in transactions. Only atomic caches need this. Transactional caches already available for transactions. Declaration [Obsolete(\"Not supported, will be removed in future releases.\")] ICache<TK, TV> WithAllowAtomicOpsInTx() Returns Type Description ICache <TK, TV> Cache allowed to use in transactions. WithExpiryPolicy(IExpiryPolicy) Returns cache with the specified expired policy set. This policy will be used for each operation invoked on the returned cache. Expiry durations for each operation are calculated only once and then used as constants. Please consider this when implementing custom expiry policy implementations. Declaration ICache<TK, TV> WithExpiryPolicy(IExpiryPolicy plc) Parameters Type Name Description IExpiryPolicy plc Expiry policy to use. Returns Type Description ICache <TK, TV> Cache instance with the specified expiry policy set. WithKeepBinary<TK1, TV1>() Gets cache with KeepBinary mode enabled, changing key and/or value types if necessary. You can only change key/value types when transitioning from non-binary to binary cache; Changing type of binary cache is not allowed and will throw an System.InvalidOperationException Declaration ICache<TK1, TV1> WithKeepBinary<TK1, TV1>() Returns Type Description ICache <TK1, TV1> Cache instance with binary mode enabled. Type Parameters Name Description TK1 Key type in binary mode. TV1 Value type in binary mode. WithNoRetries() Get another cache instance with no-retries behavior enabled. Declaration ICache<TK, TV> WithNoRetries() Returns Type Description ICache <TK, TV> Cache with no-retries behavior enabled. WithPartitionRecover() Gets an instance of cache that will be allowed to execute cache operations (read, write) regardless of partition loss policy. Declaration ICache<TK, TV> WithPartitionRecover() Returns Type Description ICache <TK, TV> Cache without partition loss protection. WithSkipStore() Get another cache instance with read-through and write-through behavior disabled. Declaration ICache<TK, TV> WithSkipStore() Returns Type Description ICache <TK, TV> Cache with read-through and write-through behavior disabled. Extension Methods CacheLinqExtensions.AsCacheQueryable<TKey, TValue>(ICache<TKey, TValue>) CacheLinqExtensions.AsCacheQueryable<TKey, TValue>(ICache<TKey, TValue>, Boolean) CacheLinqExtensions.AsCacheQueryable<TKey, TValue>(ICache<TKey, TValue>, Boolean, String) CacheLinqExtensions.AsCacheQueryable<TKey, TValue>(ICache<TKey, TValue>, QueryOptions)"
  },
  "api/Apache.Ignite.Core.Cache.Query.IQueryCursorField.html": {
    "href": "api/Apache.Ignite.Core.Cache.Query.IQueryCursorField.html",
    "title": "Interface IQueryCursorField | Apache Ignite.NET",
    "keywords": "Interface IQueryCursorField Query field descriptor. This descriptor is used to provide metadata about fields returned in query result. Namespace : Apache.Ignite.Core.Cache.Query Assembly : Apache.Ignite.Core.dll Syntax public interface IQueryCursorField Properties JavaTypeName Gets the name of Java type for this field. Declaration string JavaTypeName { get; } Property Value Type Description System.String Name Gets the field name. Declaration string Name { get; } Property Value Type Description System.String Type Gets the field type. Declaration Type Type { get; } Property Value Type Description System.Type"
  },
  "api/Apache.Ignite.Core.Cache.Query.QueryBase.html": {
    "href": "api/Apache.Ignite.Core.Cache.Query.QueryBase.html",
    "title": "Class QueryBase | Apache Ignite.NET",
    "keywords": "Class QueryBase Base class for all Ignite cache entry queries. Inheritance System.Object QueryBase ScanQuery<TK, TV> SqlQuery TextQuery Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Query Assembly : Apache.Ignite.Core.dll Syntax public abstract class QueryBase : IQueryBaseInternal Constructors QueryBase() Initializes a new instance of the QueryBase class. Declaration protected QueryBase() Fields DefaultPageSize Default page size. Declaration public const int DefaultPageSize = 1024 Field Value Type Description System.Int32 Properties Local Local flag. When set query will be executed only on local node, so only local entries will be returned as query result. Defaults to false . Declaration public bool Local { get; set; } Property Value Type Description System.Boolean PageSize Optional page size. If set to 0 , then CacheQueryConfiguration.pageSize is used. Declaration public int PageSize { get; set; } Property Value Type Description System.Int32"
  },
  "api/Apache.Ignite.Core.Client.ClientStatusCode.html": {
    "href": "api/Apache.Ignite.Core.Client.ClientStatusCode.html",
    "title": "Enum ClientStatusCode | Apache Ignite.NET",
    "keywords": "Enum ClientStatusCode Client status codes (see StatusCode ). Namespace : Apache.Ignite.Core.Client Assembly : Apache.Ignite.Core.dll Syntax public enum ClientStatusCode Fields Name Description AuthenticationFailed Authentication failed. CacheDoesNotExist Specified cache does not exist. CacheExists Cache already exists. Fail Operation failed (general-purpose code). InvalidOpCode Invalid request operation code. ResourceDoesNotExist Resource does not exist. SecurityViolation Authorization failure. Success Operation succeeded. TooManyComputeTasks Too many compute tasks (see MaxActiveComputeTasksPerConnection ). TooManyCursors Too many cursors (see MaxOpenCursorsPerConnection )."
  },
  "api/Apache.Ignite.Core.Client.Compute.IComputeClient.html": {
    "href": "api/Apache.Ignite.Core.Client.Compute.IComputeClient.html",
    "title": "Interface IComputeClient | Apache Ignite.NET",
    "keywords": "Interface IComputeClient Client Compute API. See GetCompute() and GetCompute() . Namespace : Apache.Ignite.Core.Client.Compute Assembly : Apache.Ignite.Core.dll Syntax public interface IComputeClient Methods ExecuteJavaTask<TRes>(String, Object) Executes Java task by class name. Declaration TRes ExecuteJavaTask<TRes>(string taskName, object taskArg) Parameters Type Name Description System.String taskName Java task name. System.Object taskArg Optional argument of task execution, can be null. Returns Type Description TRes Task result. Type Parameters Name Description TRes Type of task result. ExecuteJavaTaskAsync<TRes>(String, Object) Executes Java task by class name. Declaration Task<TRes> ExecuteJavaTaskAsync<TRes>(string taskName, object taskArg) Parameters Type Name Description System.String taskName Java task name. System.Object taskArg Optional argument of task execution, can be null. Returns Type Description System.Threading.Tasks.Task <TRes> Task result. Type Parameters Name Description TRes Type of task result. ExecuteJavaTaskAsync<TRes>(String, Object, CancellationToken) Executes Java task by class name. Declaration Task<TRes> ExecuteJavaTaskAsync<TRes>(string taskName, object taskArg, CancellationToken cancellationToken) Parameters Type Name Description System.String taskName Java task name. System.Object taskArg Optional argument of task execution, can be null. System.Threading.CancellationToken cancellationToken Cancellation token. Returns Type Description System.Threading.Tasks.Task <TRes> Task result. Type Parameters Name Description TRes Type of task result. WithKeepBinary() Returns a new instance of IComputeClient with binary mode enabled: Java task argument (on server side) and result (on client side) won't be deserialized. Declaration IComputeClient WithKeepBinary() Returns Type Description IComputeClient New Compute instance with binary mode enabled. WithNoFailover() Returns a new instance of IComputeClient with disabled failover. When failover is disabled, compute jobs won't be retried in case of node crashes. Declaration IComputeClient WithNoFailover() Returns Type Description IComputeClient New Compute instance with disabled failover. WithNoResultCache() Returns a new instance of IComputeClient with disabled result cache. Declaration IComputeClient WithNoResultCache() Returns Type Description IComputeClient New Compute instance with disabled result cache. WithTimeout(TimeSpan) Returns a new instance of IComputeClient with a timeout for all task executions. Declaration IComputeClient WithTimeout(TimeSpan timeout) Parameters Type Name Description System.TimeSpan timeout Timeout. Returns Type Description IComputeClient New Compute instance with timeout."
  },
  "api/Apache.Ignite.Core.Cluster.IClusterNode.html": {
    "href": "api/Apache.Ignite.Core.Cluster.IClusterNode.html",
    "title": "Interface IClusterNode | Apache Ignite.NET",
    "keywords": "Interface IClusterNode Interface representing a single cluster node. Use GetAttribute<T>(String) or GetMetrics() to get static and dynamic information about remote nodes. You can get a list of all nodes in grid by calling GetNodes() on IIgnite instance. You can use Ignite node attributes to provide static information about a node. This information is initialized once within grid, during node startup, and remains the same throughout the lifetime of a node. All members are thread-safe and may be used concurrently from multiple threads. Inherited Members IBaselineNode.ConsistentId IBaselineNode.Attributes Namespace : Apache.Ignite.Core.Cluster Assembly : Apache.Ignite.Core.dll Syntax public interface IClusterNode : IBaselineNode Properties Addresses Collection of addresses this node is known by. Declaration ICollection<string> Addresses { get; } Property Value Type Description System.Collections.Generic.ICollection < System.String > Collection of addresses. HostNames Collection of host names this node is known by. Declaration ICollection<string> HostNames { get; } Property Value Type Description System.Collections.Generic.ICollection < System.String > Collection of host names. Id Globally unique node ID. A new ID is generated every time a node restarts. Declaration Guid Id { get; } Property Value Type Description System.Guid IsClient Gets a value indicating whether or not this node is connected to cluster as a client. Do not confuse client in terms of discovery and client in terms of cache. Cache clients cannot carry data, while topology clients connect to the topology in a different way. Declaration bool IsClient { get; } Property Value Type Description System.Boolean true if this node is a client node, false otherwise. . IsDaemon Tests whether or not this node is a daemon. Daemon nodes are the usual Ignite nodes that participate in topology but not visible on the main APIs, i.e. they are not part of any projections. Daemon nodes are used primarily for management and monitoring functionality that is build on Ignite and needs to participate in the topology but should be excluded from \"normal\" topology so that it won't participate in task execution or in-memory database. Application code should never use daemon nodes. Declaration bool IsDaemon { get; } Property Value Type Description System.Boolean IsLocal Tests whether or not this node is a local node. Declaration bool IsLocal { get; } Property Value Type Description System.Boolean Order Node order within grid topology. Discovery SPIs that support node ordering will assign a proper order to each node and will guarantee that discovery event notifications for new nodes will come in proper order. All other SPIs not supporting ordering may choose to return node startup time here. Declaration long Order { get; } Property Value Type Description System.Int64 Version Gets an Ignite node version. Declaration IgniteProductVersion Version { get; } Property Value Type Description IgniteProductVersion Methods GetAttribute<T>(String) Gets node's attribute. Attributes are assigned to nodes at startup. Note that attributes cannot be changed at runtime. Declaration T GetAttribute<T>(string name) Parameters Type Name Description System.String name Attribute name. Returns Type Description T Attribute value. Type Parameters Name Description T GetAttributes() Gets all node attributes. Attributes are assigned to nodes at startup. Note that attributes cannot be changed at runtime. Declaration [Obsolete(\"Use Attributes property.\")] IDictionary<string, object> GetAttributes() Returns Type Description System.Collections.Generic.IDictionary < System.String , System.Object > All node attributes. GetMetrics() Gets metrics snapshot for this node. Note that node metrics are constantly updated and provide up to date information about nodes. For example, you can get an idea about CPU load on remote node via CurrentCpuLoad . Node metrics are updated with some delay which is directly related to heartbeat frequency. For example, when used with default GridTcpDiscoverySpi the update will happen every 2 seconds. Declaration IClusterMetrics GetMetrics() Returns Type Description IClusterMetrics Runtime metrics snapshot for this node. TryGetAttribute<T>(String, out T) Try getting node's attribute. Attributes are assigned to nodes at startup. Note that attributes cannot be changed at runtime. Declaration bool TryGetAttribute<T>(string name, out T attr) Parameters Type Name Description System.String name Attribute name. T attr Attribute value. Returns Type Description System.Boolean true in case such attribute exists. Type Parameters Name Description T"
  },
  "api/Apache.Ignite.Core.Cluster.IClusterNodeFilter.html": {
    "href": "api/Apache.Ignite.Core.Cluster.IClusterNodeFilter.html",
    "title": "Interface IClusterNodeFilter | Apache Ignite.NET",
    "keywords": "Interface IClusterNodeFilter Represents cluster node filter. Namespace : Apache.Ignite.Core.Cluster Assembly : Apache.Ignite.Core.dll Syntax public interface IClusterNodeFilter Methods Invoke(IClusterNode) Returns a value indicating whether provided node satisfies this predicate. Declaration bool Invoke(IClusterNode node) Parameters Type Name Description IClusterNode node Cluster node. Returns Type Description System.Boolean Value indicating whether provided node satisfies this predicate."
  },
  "api/index.html": {
    "href": "api/index.html",
    "title": "Apache Ignite.NET API Documentation | Apache Ignite.NET",
    "keywords": "Apache Ignite.NET API Documentation Click namespaces on the left to browse the API, or use the search box on top of the page. Ignition class is the API entry point, see various Start overloads."
  },
  "index.html": {
    "href": "index.html",
    "title": "Apache Ignite.NET | Apache Ignite.NET",
    "keywords": "Apache Ignite.NET Apache Ignite is a memory-centric distributed database, caching , and processing platform for transactional, analytical, and streaming workloads, delivering in-memory speeds at petabyte scale. API Documentation Gettting Started"
  },
  "api/Apache.Ignite.Core.Binary.BinaryObjectException.html": {
    "href": "api/Apache.Ignite.Core.Binary.BinaryObjectException.html",
    "title": "Class BinaryObjectException | Apache Ignite.NET",
    "keywords": "Class BinaryObjectException Indicates an error during binarization. Inheritance System.Object System.Exception IgniteException BinaryObjectException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Binary Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class BinaryObjectException : IgniteException, ISerializable, _Exception Constructors BinaryObjectException() Constructs an exception. Declaration public BinaryObjectException() BinaryObjectException(SerializationInfo, StreamingContext) Constructs an exception. Declaration protected BinaryObjectException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization info. System.Runtime.Serialization.StreamingContext ctx Streaming context. BinaryObjectException(String) Initializes a new instance of the BinaryObjectException class. Declaration public BinaryObjectException(string message) Parameters Type Name Description System.String message The message that describes the error. BinaryObjectException(String, Exception) Initializes a new instance of the BinaryObjectException class. Declaration public BinaryObjectException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Binary.IBinaryNameMapper.html": {
    "href": "api/Apache.Ignite.Core.Binary.IBinaryNameMapper.html",
    "title": "Interface IBinaryNameMapper | Apache Ignite.NET",
    "keywords": "Interface IBinaryNameMapper Maps type and field names to different names. Namespace : Apache.Ignite.Core.Binary Assembly : Apache.Ignite.Core.dll Syntax public interface IBinaryNameMapper Methods GetFieldName(String) Gets the field name. Declaration string GetFieldName(string name) Parameters Type Name Description System.String name The name. Returns Type Description System.String Field name. GetTypeName(String) Gets the type name. Declaration string GetTypeName(string name) Parameters Type Name Description System.String name The name. Returns Type Description System.String Type name."
  },
  "api/Apache.Ignite.Core.Binary.IBinaryObjectBuilder.html": {
    "href": "api/Apache.Ignite.Core.Binary.IBinaryObjectBuilder.html",
    "title": "Interface IBinaryObjectBuilder | Apache Ignite.NET",
    "keywords": "Interface IBinaryObjectBuilder binary object builder. Provides ability to build binary objects dynamically without having class definitions. Note that type ID is required in order to build binary object. Usually it is enough to provide a simple type name and Ignite will generate the type ID automatically. Namespace : Apache.Ignite.Core.Binary Assembly : Apache.Ignite.Core.dll Syntax public interface IBinaryObjectBuilder Methods Build() Build the object. Declaration IBinaryObject Build() Returns Type Description IBinaryObject Resulting binary object. GetField<T>(String) Get object field value. If value is another binary object, then builder for this object will be returned. If value is a container for other objects (array, ICollection, IDictionary), then container will be returned with primitive types in deserialized form and binary objects as builders. Any change in builder or collection returned through this method will be reflected in the resulting binary object after build. Declaration T GetField<T>(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description T Field value. Type Parameters Name Description T RemoveField(String) Remove object field. Declaration IBinaryObjectBuilder RemoveField(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description IBinaryObjectBuilder Current builder instance. SetArrayField<T>(String, T[]) Sets the array field. Declaration IBinaryObjectBuilder SetArrayField<T>(string fieldName, T[] val) Parameters Type Name Description System.String fieldName Name of the field. T[] val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. Type Parameters Name Description T SetBooleanArrayField(String, Boolean[]) Sets the boolean array field. Declaration IBinaryObjectBuilder SetBooleanArrayField(string fieldName, bool[] val) Parameters Type Name Description System.String fieldName Name of the field. System.Boolean [] val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetBooleanField(String, Boolean) Sets the boolean field. Declaration IBinaryObjectBuilder SetBooleanField(string fieldName, bool val) Parameters Type Name Description System.String fieldName Name of the field. System.Boolean val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetByteArrayField(String, Byte[]) Sets the byte array field. Declaration IBinaryObjectBuilder SetByteArrayField(string fieldName, byte[] val) Parameters Type Name Description System.String fieldName Name of the field. System.Byte [] val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetByteField(String, Byte) Sets the byte field. Declaration IBinaryObjectBuilder SetByteField(string fieldName, byte val) Parameters Type Name Description System.String fieldName Name of the field. System.Byte val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetCharArrayField(String, Char[]) Sets the char array field. Declaration IBinaryObjectBuilder SetCharArrayField(string fieldName, char[] val) Parameters Type Name Description System.String fieldName Name of the field. System.Char [] val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetCharField(String, Char) Sets the char field. Declaration IBinaryObjectBuilder SetCharField(string fieldName, char val) Parameters Type Name Description System.String fieldName Name of the field. System.Char val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetCollectionField(String, ICollection) Sets the collection field. Declaration IBinaryObjectBuilder SetCollectionField(string fieldName, ICollection val) Parameters Type Name Description System.String fieldName Name of the field. System.Collections.ICollection val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetDecimalArrayField(String, Nullable<Decimal>[]) Sets the decimal array field. Declaration IBinaryObjectBuilder SetDecimalArrayField(string fieldName, decimal ? [] val) Parameters Type Name Description System.String fieldName Name of the field. System.Nullable < System.Decimal >[] val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetDecimalField(String, Nullable<Decimal>) Sets the decimal field. Declaration IBinaryObjectBuilder SetDecimalField(string fieldName, decimal ? val) Parameters Type Name Description System.String fieldName Name of the field. System.Nullable < System.Decimal > val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetDictionaryField(String, IDictionary) Sets the dictionary field. Declaration IBinaryObjectBuilder SetDictionaryField(string fieldName, IDictionary val) Parameters Type Name Description System.String fieldName Name of the field. System.Collections.IDictionary val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetDoubleArrayField(String, Double[]) Sets the double array field. Declaration IBinaryObjectBuilder SetDoubleArrayField(string fieldName, double[] val) Parameters Type Name Description System.String fieldName Name of the field. System.Double [] val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetDoubleField(String, Double) Sets the double field. Declaration IBinaryObjectBuilder SetDoubleField(string fieldName, double val) Parameters Type Name Description System.String fieldName Name of the field. System.Double val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetEnumArrayField<T>(String, T[]) Sets the enum array field. Declaration IBinaryObjectBuilder SetEnumArrayField<T>(string fieldName, T[] val) Parameters Type Name Description System.String fieldName Name of the field. T[] val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. Type Parameters Name Description T SetEnumField<T>(String, T) Sets the enum field. Declaration IBinaryObjectBuilder SetEnumField<T>(string fieldName, T val) Parameters Type Name Description System.String fieldName Name of the field. T val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. Type Parameters Name Description T SetField<T>(String, T) Set object field value. Value can be of any type including other IBinaryObject and other builders. Value type for metadata is determined as typeof(T) ; use SetField<T>(String, T, Type) overload to override. Declaration IBinaryObjectBuilder SetField<T>(string fieldName, T val) Parameters Type Name Description System.String fieldName Field name. T val Field value. Returns Type Description IBinaryObjectBuilder Current builder instance. Type Parameters Name Description T SetField<T>(String, T, Type) Set object field value. Value can be of any type including other IBinaryObject and other builders. Declaration IBinaryObjectBuilder SetField<T>(string fieldName, T val, Type valType) Parameters Type Name Description System.String fieldName Field name. T val Field value. System.Type valType Field value type for metadata (see also GetFieldTypeName(String) ). Returns Type Description IBinaryObjectBuilder Current builder instance. Type Parameters Name Description T SetFloatArrayField(String, Single[]) Sets the float array field. Declaration IBinaryObjectBuilder SetFloatArrayField(string fieldName, float[] val) Parameters Type Name Description System.String fieldName Name of the field. System.Single [] val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetFloatField(String, Single) Sets the float field. Declaration IBinaryObjectBuilder SetFloatField(string fieldName, float val) Parameters Type Name Description System.String fieldName Name of the field. System.Single val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetGuidArrayField(String, Nullable<Guid>[]) Sets the guid array field. Declaration IBinaryObjectBuilder SetGuidArrayField(string fieldName, Guid? [] val) Parameters Type Name Description System.String fieldName Name of the field. System.Nullable < System.Guid >[] val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetGuidField(String, Nullable<Guid>) Sets the guid field. Declaration IBinaryObjectBuilder SetGuidField(string fieldName, Guid? val) Parameters Type Name Description System.String fieldName Name of the field. System.Nullable < System.Guid > val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetIntArrayField(String, Int32[]) Sets the int array field. Declaration IBinaryObjectBuilder SetIntArrayField(string fieldName, int[] val) Parameters Type Name Description System.String fieldName Name of the field. System.Int32 [] val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetIntField(String, Int32) Sets the int field. Declaration IBinaryObjectBuilder SetIntField(string fieldName, int val) Parameters Type Name Description System.String fieldName Name of the field. System.Int32 val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetLongArrayField(String, Int64[]) Sets the long array field. Declaration IBinaryObjectBuilder SetLongArrayField(string fieldName, long[] val) Parameters Type Name Description System.String fieldName Name of the field. System.Int64 [] val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetLongField(String, Int64) Sets the long field. Declaration IBinaryObjectBuilder SetLongField(string fieldName, long val) Parameters Type Name Description System.String fieldName Name of the field. System.Int64 val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetShortArrayField(String, Int16[]) Sets the short array field. Declaration IBinaryObjectBuilder SetShortArrayField(string fieldName, short[] val) Parameters Type Name Description System.String fieldName Name of the field. System.Int16 [] val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetShortField(String, Int16) Sets the short field. Declaration IBinaryObjectBuilder SetShortField(string fieldName, short val) Parameters Type Name Description System.String fieldName Name of the field. System.Int16 val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetStringArrayField(String, String[]) Sets the string array field. Declaration IBinaryObjectBuilder SetStringArrayField(string fieldName, string[] val) Parameters Type Name Description System.String fieldName Name of the field. System.String [] val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetStringField(String, String) Sets the string field. Declaration IBinaryObjectBuilder SetStringField(string fieldName, string val) Parameters Type Name Description System.String fieldName Name of the field. System.String val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetTimestampArrayField(String, Nullable<DateTime>[]) Sets the timestamp array field. Declaration IBinaryObjectBuilder SetTimestampArrayField(string fieldName, DateTime? [] val) Parameters Type Name Description System.String fieldName Name of the field. System.Nullable < System.DateTime >[] val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetTimestampField(String, Nullable<DateTime>) Sets the timestamp field. Declaration IBinaryObjectBuilder SetTimestampField(string fieldName, DateTime? val) Parameters Type Name Description System.String fieldName Name of the field. System.Nullable < System.DateTime > val The value. Returns Type Description IBinaryObjectBuilder Current builder instance."
  },
  "api/Apache.Ignite.Core.Binary.html": {
    "href": "api/Apache.Ignite.Core.Binary.html",
    "title": "Namespace Apache.Ignite.Core.Binary | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Binary Classes BinaryBasicNameMapper Base binary name mapper implementation. BinaryConfiguration Binary type configuration. BinaryObjectException Indicates an error during binarization. BinaryReflectiveSerializer Binary serializer which reflectively writes all fields except of ones with System.NonSerializedAttribute . Note that Java platform stores dates as a difference between current time and predefined absolute UTC date. Therefore, this difference is always the same for all time zones. .NET, in contrast, stores dates as a difference between current time and some predefined date relative to the current time zone. It means that this difference will be different as you change time zones. To overcome this discrepancy Ignite always converts .Net date to UTC form before serializing and allows user to decide whether to deserialize them in UTC or local form using ReadTimestamp(..., true/false) methods in IBinaryReader and IBinaryRawReader . This serializer always read dates in UTC form. It means that if you have local date in any field/property, it will be implicitly converted to UTC form after the first serialization-deserialization cycle. BinaryTypeConfiguration Binary type configuration. BinaryTypeNames Binary type name constants. TimestampAttribute Instructs the serializer to write DateTime fields and properties in Timestamp format, which is interoperable with other platforms and works in SQL, but does not allow non-UTC values. When applied to a struct or a class, changes behavior for all fields and properties. Normally serializer uses WriteObject<T>(String, T) for DateTime fields. This attribute changes the behavior to WriteTimestamp(String, Nullable<DateTime>) . See also ForceTimestamp . Interfaces IBinarizable Interface to implement custom serialization logic. IBinary Defines binary objects functionality. With binary objects you are able to: Seamlessly interoperate between Java, .NET, and C++. Make any object binary with zero code change to your existing code. Nest binary objects within each other. Automatically handle circular or null references. Automatically convert collections and maps between Java, .NET, and C++. Optionally avoid deserialization of objects on the server side. Avoid need to have concrete class definitions on the server side. Dynamically change structure of the classes without having to restart the cluster. Index into binary objects for querying purposes. IBinaryIdMapper Maps class name and class field names to integer identifiers. IBinaryNameMapper Maps type and field names to different names. IBinaryObject Wrapper for serialized objects. IBinaryObjectBuilder binary object builder. Provides ability to build binary objects dynamically without having class definitions. Note that type ID is required in order to build binary object. Usually it is enough to provide a simple type name and Ignite will generate the type ID automatically. IBinaryRawReader Raw reader for binary objects. IBinaryRawWriter Raw writer for binary objects. IBinaryReader Reader for binary objects. IBinarySerializer Binary serializer. IBinaryType Binary type metadata. IBinaryWriter Writer for binary objects."
  },
  "api/Apache.Ignite.Core.Cache.Affinity.html": {
    "href": "api/Apache.Ignite.Core.Cache.Affinity.html",
    "title": "Namespace Apache.Ignite.Core.Cache.Affinity | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Cache.Affinity Classes AffinityFunctionBase Base class for predefined affinity functions. AffinityFunctionContext Affinity function context. AffinityKeyMappedAttribute Specifies cache key field to be used to determine a node on which given cache key will be stored. Only one field or property can be marked with this attribute. This attribute is an alternative to AffinityKeyFieldName setting. This attribute has lower priority than AffinityKeyFieldName setting. One of the major use cases for this attribute is the routing of grid computations to the nodes where the data for this computation is cached, the concept otherwise known as Colocation Of Computations And Data. For example, if a Person object is always accessed together with a Company object for which this person is an employee, then for better performance and scalability it makes sense to colocate Person objects together with their Company object when storing them in cache. To achieve that, cache key used to cache Person objects should have a field or property marked with AffinityKeyMappedAttribute attribute, which will provide the value of the company key for which that person works. Structs AffinityKey Optional wrapper for cache keys to provide support for custom affinity mapping. The value returned by Affinity will be used for key-to-node affinity. AffinityTopologyVersion Affinity topology version. Interfaces IAffinityFunction Represents a function that maps cache keys to cluster nodes. Predefined implementations: RendezvousAffinityFunction ."
  },
  "api/Apache.Ignite.Core.Cache.Configuration.CacheAtomicityMode.html": {
    "href": "api/Apache.Ignite.Core.Cache.Configuration.CacheAtomicityMode.html",
    "title": "Enum CacheAtomicityMode | Apache Ignite.NET",
    "keywords": "Enum CacheAtomicityMode Cache atomicity mode. Namespace : Apache.Ignite.Core.Cache.Configuration Assembly : Apache.Ignite.Core.dll Syntax public enum CacheAtomicityMode Fields Name Description Atomic Specifies atomic-only cache behaviour. In this mode distributed transactions and distributed locking are not supported. Disabling transactions and locking allows to achieve much higher performance and throughput ratios. In addition to transactions and locking, one of the main differences to Atomic mode is that bulk writes, such as PutAll(IEnumerable<KeyValuePair<TK, TV>>) and RemoveAll(IEnumerable<TK>) methods, become simple batch operations which can partially fail. In case of partial failure, CachePartialUpdateException will be thrown which will contain a list of keys for which the update failed. It is recommended that bulk writes are used whenever multiple keys need to be inserted or updated in cache, as they reduce number of network trips and provide better performance. Note that even without locking and transactions, Atomic mode still provides full consistency guarantees across all cache nodes. Also note that all data modifications in Atomic mode are guaranteed to be atomic and consistent with writes to the underlying persistent store, if one is configured. Transactional Specifies fully ACID-compliant transactional cache behavior. Note! In this mode, transactional consistency is guaranteed for key-value API operations only. To enable ACID capabilities for SQL transactions, use TRANSACTIONAL_SNAPSHOT mode. Note! This atomicity mode is not compatible with the other atomicity modes within the same transaction. If a transaction is executed over multiple caches, all caches must have the same atomicity mode, either TRANSACTIONAL_SNAPSHOT or TRANSACTIONAL. TransactionalSnapshot This is an experimental feature. Transactional SQL is currently in a beta status. Specifies fully ACID-compliant transactional cache behavior for both key-value API and SQL transactions. This atomicity mode enables multiversion concurrency control (MVCC) for the cache. In MVCC-enabled caches, when a transaction updates a row, it creates a new version of that row instead of overwriting it. Other users continue to see the old version of the row until the transaction is committed. In this way, readers and writers do not conflict with each other and always work with a consistent dataset. The old version of data is cleaned up when it's no longer accessed by anyone. With this mode enabled, one node is elected as an MVCC coordinator. This node tracks all in-flight transactions and queries executed in the cluster. Each transaction or query executed over the cache with TRANSACTIONAL_SNAPSHOT mode works with a current snapshot of data generated for this transaction or query by the coordinator. This snapshot ensures that the transaction works with a consistent database state during its execution period. Note! This atomicity mode is not compatible with the other atomicity modes within the same transaction. If a transaction is executed over multiple caches, all caches must have the same atomicity mode, either TRANSACTIONAL_SNAPSHOT or TRANSACTIONAL."
  },
  "api/Apache.Ignite.Core.Cache.Configuration.CacheWriteSynchronizationMode.html": {
    "href": "api/Apache.Ignite.Core.Cache.Configuration.CacheWriteSynchronizationMode.html",
    "title": "Enum CacheWriteSynchronizationMode | Apache Ignite.NET",
    "keywords": "Enum CacheWriteSynchronizationMode Mode indicating how Ignite should wait for write replies from other nodes. Namespace : Apache.Ignite.Core.Cache.Configuration Assembly : Apache.Ignite.Core.dll Syntax public enum CacheWriteSynchronizationMode Fields Name Description FullAsync Flag indicating that Ignite will not wait for write or commit responses from participating nodes, which means that remote nodes may get their state updated a bit after any of the cache write methods complete, or after {@link Transaction#commit()} method completes. FullSync Mode indicating that Ignite should wait for write or commit replies from all nodes. This behavior guarantees that whenever any of the atomic or transactional writes complete, all other participating nodes which cache the written data have been updated. PrimarySync This flag only makes sense for {@link CacheMode#PARTITIONED} mode. When enabled, Ignite will wait for write or commit to complete on primary node, but will not wait for backups to be updated."
  },
  "api/Apache.Ignite.Core.Cache.Configuration.QueryEntity.html": {
    "href": "api/Apache.Ignite.Core.Cache.Configuration.QueryEntity.html",
    "title": "Class QueryEntity | Apache Ignite.NET",
    "keywords": "Class QueryEntity Query entity is a description of cache entry (composed of key and value) in a way of how it must be indexed and can be queried. Inheritance System.Object QueryEntity Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Configuration Assembly : Apache.Ignite.Core.dll Syntax public sealed class QueryEntity : IQueryEntityInternal, IBinaryRawWriteAware, IBinaryRawWriteAware<IBinaryRawWriter> Constructors QueryEntity() Initializes a new instance of the QueryEntity class. Declaration public QueryEntity() QueryEntity(Type) Initializes a new instance of the QueryEntity class. Declaration public QueryEntity(Type valueType) Parameters Type Name Description System.Type valueType Type of the cache entry value. QueryEntity(Type, Type) Initializes a new instance of the QueryEntity class. Declaration public QueryEntity(Type keyType, Type valueType) Parameters Type Name Description System.Type keyType Type of the key. System.Type valueType Type of the value. Properties Aliases Gets or sets 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\"}. Declaration public ICollection<QueryAlias> Aliases { get; set; } Property Value Type Description System.Collections.Generic.ICollection < QueryAlias > Fields Gets or sets 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. Declaration public ICollection<QueryField> Fields { get; set; } Property Value Type Description System.Collections.Generic.ICollection < QueryField > Indexes Gets or sets the query indexes. Declaration public ICollection<QueryIndex> Indexes { get; set; } Property Value Type Description System.Collections.Generic.ICollection < QueryIndex > KeyFieldName Gets or sets the name of the field that is used to denote the entire key. By default, entite key can be accessed with a special \"_key\" field name. Declaration public string KeyFieldName { get; set; } Property Value Type Description System.String KeyType Gets or sets the type of the key. This is a shortcut for KeyTypeName . Getter will return null for non-primitive types. Setting this property will overwrite Fields and Indexes according to QuerySqlFieldAttribute , if any. Declaration public Type KeyType { get; set; } Property Value Type Description System.Type KeyTypeName Gets or sets key Java type name. Declaration public string KeyTypeName { get; set; } Property Value Type Description System.String TableName Gets or sets the name of the SQL table. When not set, value type name is used. Declaration public string TableName { get; set; } Property Value Type Description System.String ValueFieldName Gets or sets the name of the field that is used to denote the entire value. By default, entite value can be accessed with a special \"_val\" field name. Declaration public string ValueFieldName { get; set; } Property Value Type Description System.String ValueType Gets or sets the type of the value. This is a shortcut for ValueTypeName . Getter will return null for non-primitive types. Setting this property will overwrite Fields and Indexes according to QuerySqlFieldAttribute , if any. Declaration public Type ValueType { get; set; } Property Value Type Description System.Type ValueTypeName Gets or sets value Java type name. Declaration public string ValueTypeName { get; set; } Property Value Type Description System.String"
  },
  "api/Apache.Ignite.Core.Cache.Event.ICacheEntryEvent-2.html": {
    "href": "api/Apache.Ignite.Core.Cache.Event.ICacheEntryEvent-2.html",
    "title": "Interface ICacheEntryEvent<TK, TV> | Apache Ignite.NET",
    "keywords": "Interface ICacheEntryEvent<TK, TV> Cache entry event. Inherited Members ICacheEntry<TK, TV>.Key ICacheEntry<TK, TV>.Value Namespace : Apache.Ignite.Core.Cache.Event Assembly : Apache.Ignite.Core.dll Syntax public interface ICacheEntryEvent<out TK, out TV> : ICacheEntry<TK, TV> Type Parameters Name Description TK TV Properties EventType Event type. Declaration CacheEntryEventType EventType { get; } Property Value Type Description CacheEntryEventType HasOldValue Whether old value exists. Declaration bool HasOldValue { get; } Property Value Type Description System.Boolean HasValue Whether value exists. Declaration bool HasValue { get; } Property Value Type Description System.Boolean OldValue Gets old the value. Declaration TV OldValue { get; } Property Value Type Description TV"
  },
  "api/Apache.Ignite.Core.Cache.Event.ICacheEntryEventFilter-2.html": {
    "href": "api/Apache.Ignite.Core.Cache.Event.ICacheEntryEventFilter-2.html",
    "title": "Interface ICacheEntryEventFilter<TK, TV> | Apache Ignite.NET",
    "keywords": "Interface ICacheEntryEventFilter<TK, TV> Cache entry event filter. Namespace : Apache.Ignite.Core.Cache.Event Assembly : Apache.Ignite.Core.dll Syntax public interface ICacheEntryEventFilter<TK, TV> Type Parameters Name Description TK TV Methods Evaluate(ICacheEntryEvent<TK, TV>) Evaluates cache entry event. Declaration bool Evaluate(ICacheEntryEvent<TK, TV> evt) Parameters Type Name Description ICacheEntryEvent <TK, TV> evt Event. Returns Type Description System.Boolean"
  },
  "api/Apache.Ignite.Core.Cache.ICacheLock.html": {
    "href": "api/Apache.Ignite.Core.Cache.ICacheLock.html",
    "title": "Interface ICacheLock | Apache Ignite.NET",
    "keywords": "Interface ICacheLock Cache locking interface. All members are thread-safe and may be used concurrently from multiple threads. Inherited Members System.IDisposable.Dispose() Namespace : Apache.Ignite.Core.Cache Assembly : Apache.Ignite.Core.dll Syntax public interface ICacheLock : IDisposable Methods Enter() Acquires an exclusive lock. Declaration void Enter() Exit() Releases an exclusive lock on the specified object. System.IDisposable.Dispose() does not call this method and will throw System.Threading.SynchronizationLockException if this lock is acquired. Declaration void Exit() TryEnter() Acquires an exclusive lock only if it is free at the time of invocation. Declaration bool TryEnter() Returns Type Description System.Boolean True if the current thread acquires the lock; otherwise, false. TryEnter(TimeSpan) Attempts, for the specified amount of time, to acquire an exclusive lock. Declaration bool TryEnter(TimeSpan timeout) Parameters Type Name Description System.TimeSpan timeout A System.TimeSpan representing the amount of time to wait for the lock. A value of -1 millisecond specifies an infinite wait. Returns Type Description System.Boolean True if the current thread acquires the lock; otherwise, false."
  },
  "api/Apache.Ignite.Core.Cache.ICacheMetrics.html": {
    "href": "api/Apache.Ignite.Core.Cache.ICacheMetrics.html",
    "title": "Interface ICacheMetrics | Apache Ignite.NET",
    "keywords": "Interface ICacheMetrics Cache metrics used to obtain statistics on cache itself. Namespace : Apache.Ignite.Core.Cache Assembly : Apache.Ignite.Core.dll Syntax public interface ICacheMetrics Properties AverageGetTime The mean time to execute gets. Declaration float AverageGetTime { get; } Property Value Type Description System.Single The time in ms. AveragePutTime The mean time to execute puts. Declaration float AveragePutTime { get; } Property Value Type Description System.Single The time in s. AverageRemoveTime The mean time to execute removes. Declaration float AverageRemoveTime { get; } Property Value Type Description System.Single The time in ms. AverageTxCommitTime The mean time to execute tx commit. Declaration float AverageTxCommitTime { get; } Property Value Type Description System.Single The time in ms. AverageTxRollbackTime The mean time to execute tx rollbacks. Declaration float AverageTxRollbackTime { get; } Property Value Type Description System.Single Number of transaction rollbacks. CacheEvictions The total number of evictions from the cache. An eviction is a removal initiated by the cache itself to free up space. An eviction is not treated as a removal and does not appear in the removal counts. Declaration long CacheEvictions { get; } Property Value Type Description System.Int64 The number of evictions. CacheGets The total number of requests to the cache. This will be equal to the sum of the hits and misses. Declaration long CacheGets { get; } Property Value Type Description System.Int64 The number of gets. CacheHitPercentage This is a measure of cache efficiency. Declaration float CacheHitPercentage { get; } Property Value Type Description System.Single The percentage of successful hits, as a decimal e.g 75. CacheHits The number of get requests that were satisfied by the cache. Declaration long CacheHits { get; } Property Value Type Description System.Int64 The number of hits. CacheMisses A miss is a get request that is not satisfied. Declaration long CacheMisses { get; } Property Value Type Description System.Int64 The number of misses. CacheMissPercentage Returns the percentage of cache accesses that did not find a requested entry in the cache. Declaration float CacheMissPercentage { get; } Property Value Type Description System.Single The percentage of accesses that failed to find anything. CacheName Gets cache name. Declaration string CacheName { get; } Property Value Type Description System.String Cache name. CachePuts The total number of puts to the cache. Declaration long CachePuts { get; } Property Value Type Description System.Int64 The number of puts. CacheRemovals The total number of removals from the cache. This does not include evictions, where the cache itself initiates the removal to make space. Declaration long CacheRemovals { get; } Property Value Type Description System.Int64 The number of removals. CacheSize Gets number of non-null values in the cache. Declaration long CacheSize { get; } Property Value Type Description System.Int64 Number of non-null values in the cache. CacheTxCommits Gets total number of transaction commits. Declaration long CacheTxCommits { get; } Property Value Type Description System.Int64 Number of transaction commits. CacheTxRollbacks Gets total number of transaction rollbacks. Declaration long CacheTxRollbacks { get; } Property Value Type Description System.Int64 Number of transaction rollbacks. DhtEvictQueueCurrentSize Gets current size of evict queue used to batch up evictions. Declaration int DhtEvictQueueCurrentSize { get; } Property Value Type Description System.Int32 Current size of evict queue. EntryProcessorAverageInvocationTime The mean time to execute cache invokes. Declaration float EntryProcessorAverageInvocationTime { get; } Property Value Type Description System.Single The time in µs. EntryProcessorHitPercentage The percentage of invocations on keys, which exist in cache. Declaration float EntryProcessorHitPercentage { get; } Property Value Type Description System.Single The percentage of successful invocation hits. EntryProcessorHits The total number of invocations on keys, which exist in cache. Declaration long EntryProcessorHits { get; } Property Value Type Description System.Int64 The number of cache invocation hits. EntryProcessorInvocations The total number of cache invocations. Declaration long EntryProcessorInvocations { get; } Property Value Type Description System.Int64 The number of cache invocations. EntryProcessorMaxInvocationTime So far, the maximum time to execute cache invokes. Declaration float EntryProcessorMaxInvocationTime { get; } Property Value Type Description System.Single The time in µs. EntryProcessorMinInvocationTime So far, the minimum time to execute cache invokes. Declaration float EntryProcessorMinInvocationTime { get; } Property Value Type Description System.Single The time in µs. EntryProcessorMisses The total number of invocations on keys, which don't exist in cache. Declaration long EntryProcessorMisses { get; } Property Value Type Description System.Int64 The number of cache invocation misses. EntryProcessorMissPercentage The percentage of invocations on keys, which don't exist in cache. Declaration float EntryProcessorMissPercentage { get; } Property Value Type Description System.Single The percentage of invocation misses. EntryProcessorPuts The total number of cache invocations, caused update. Declaration long EntryProcessorPuts { get; } Property Value Type Description System.Int64 The number of invocation updates. EntryProcessorReadOnlyInvocations The total number of cache invocations, caused no updates. Declaration long EntryProcessorReadOnlyInvocations { get; } Property Value Type Description System.Int64 The number of read-only invocations. EntryProcessorRemovals The total number of cache invocations, caused removal. Declaration long EntryProcessorRemovals { get; } Property Value Type Description System.Int64 The number of invocation removals. EstimatedRebalancingFinishTime Gets estimated rebalancing finish time. entries in onheap cache and near entries. Declaration long EstimatedRebalancingFinishTime { get; } Property Value Type Description System.Int64 Estimated rebalancing finish time. EstimatedRebalancingKeys Gets number of estimated keys to rebalance. need to be cleared before actual rebalance start. Declaration long EstimatedRebalancingKeys { get; } Property Value Type Description System.Int64 Number of estimated keys to rebalance. HeapEntriesCount Gets the number of cache entries in heap memory, including entries held by active transactions, entries in onheap cache and near entries. Declaration long HeapEntriesCount { get; } Property Value Type Description System.Int64 Number of entries in heap memory. IsEmpty Returns true if this cache is empty. Declaration bool IsEmpty { get; } Property Value Type Description System.Boolean True if this cache is empty. IsManagementEnabled Checks whether management is enabled on this cache. The default value is false. Declaration bool IsManagementEnabled { get; } Property Value Type Description System.Boolean True if management is enabled. IsReadThrough Determines if a cache should operate in read-through mode. The default value is false Declaration bool IsReadThrough { get; } Property Value Type Description System.Boolean True when a cache is in \"read-through\" mode. IsStatisticsEnabled Checks whether statistics collection is enabled in this cache. The default value is false. Declaration bool IsStatisticsEnabled { get; } Property Value Type Description System.Boolean True if statistics collection is enabled. IsStoreByValue Whether storeByValue true or storeByReference false. When true, both keys and values are stored by value. When false, both keys and values are stored by reference. Caches stored by reference are capable of mutation by any threads holding the reference. The effects are: if the key is mutated, then the key may not be retrievable or removable if the value is mutated, then all threads in the JVM can potentially observe those mutations, subject to the normal Java Memory Model rules. Storage by reference only applies to the local heap. If an entry is moved off heap it will need to be transformed into a representation. Any mutations that occur after transformation may not be reflected in the cache. When a cache is storeByValue, any mutation to the key or value does not affect the key of value stored in the cache. The default value is true. Declaration bool IsStoreByValue { get; } Property Value Type Description System.Boolean True if the cache is store by value. IsValidForReading Checks whether cache topology is valid for read operations. Declaration bool IsValidForReading { get; } Property Value Type Description System.Boolean True when cache topology is valid for reading. IsValidForWriting Checks whether cache topology is valid for write operations. Declaration bool IsValidForWriting { get; } Property Value Type Description System.Boolean True when cache topology is valid for writing. IsWriteBehindEnabled Returns true if write-behind is enabled. Declaration bool IsWriteBehindEnabled { get; } Property Value Type Description System.Boolean True if write-behind is enabled. IsWriteThrough Determines if a cache should operate in \"write-through\" mode. Will appropriately cause the configured CacheWriter to be invoked. The default value is false Declaration bool IsWriteThrough { get; } Property Value Type Description System.Boolean True when a cache is in \"write-through\" mode. KeySize Gets number of keys in the cache, possibly with null values. Declaration int KeySize { get; } Property Value Type Description System.Int32 Number of keys in the cache. KeysToRebalanceLeft Gets estimated number of keys to be rebalanced on current node. Declaration long KeysToRebalanceLeft { get; } Property Value Type Description System.Int64 Estimated number of keys to be rebalanced on current node. KeyType Determines the required type of keys for this cache, if any. Declaration string KeyType { get; } Property Value Type Description System.String The fully qualified class name of the key type, or \"java.lang.Object\" if the type is undefined. OffHeapAllocatedSize Gets memory size allocated in off-heap. Declaration long OffHeapAllocatedSize { get; } Property Value Type Description System.Int64 Memory size allocated in off-heap. OffHeapBackupEntriesCount Gets number of backup entries stored in off-heap memory. Declaration long OffHeapBackupEntriesCount { get; } Property Value Type Description System.Int64 Number of backup entries stored in off-heap memory. OffHeapEntriesCount Gets number of entries stored in off-heap memory. Declaration long OffHeapEntriesCount { get; } Property Value Type Description System.Int64 Number of entries stored in off-heap memory. OffHeapEvictions The total number of evictions from the off-heap memory. Declaration long OffHeapEvictions { get; } Property Value Type Description System.Int64 The number of evictions. OffHeapGets The total number of get requests to the off-heap memory. Declaration long OffHeapGets { get; } Property Value Type Description System.Int64 The number of gets. OffHeapHitPercentage Gets the percentage of hits on off-heap memory. Declaration float OffHeapHitPercentage { get; } Property Value Type Description System.Single The percentage of hits on off-heap memory. OffHeapHits The number of get requests that were satisfied by the off-heap memory. Declaration long OffHeapHits { get; } Property Value Type Description System.Int64 The off-heap hits number. OffHeapMisses A miss is a get request that is not satisfied by off-heap memory. Declaration long OffHeapMisses { get; } Property Value Type Description System.Int64 The off-heap misses number. OffHeapMissPercentage Gets the percentage of misses on off-heap memory. Declaration float OffHeapMissPercentage { get; } Property Value Type Description System.Single The percentage of misses on off-heap memory. OffHeapPrimaryEntriesCount Gets the number of primary entries stored in off-heap memory. Declaration long OffHeapPrimaryEntriesCount { get; } Property Value Type Description System.Int64 Number of primary entries stored in off-heap memory. OffHeapPuts The total number of put requests to the off-heap memory. Declaration long OffHeapPuts { get; } Property Value Type Description System.Int64 The number of puts. OffHeapRemovals The total number of removals from the off-heap memory. This does not include evictions. Declaration long OffHeapRemovals { get; } Property Value Type Description System.Int64 The number of removals. RebalanceClearingPartitionsLeft Gets number of partitions. need to be cleared before actual rebalance start. Declaration long RebalanceClearingPartitionsLeft { get; } Property Value Type Description System.Int64 Number of clearing partitions for rebalance. RebalancedKeys Gets number of already rebalanced keys. need to be cleared before actual rebalance start. Declaration long RebalancedKeys { get; } Property Value Type Description System.Int64 Number of already rebalanced keys. RebalancingBytesRate Gets estimated rebalancing speed in bytes. Declaration long RebalancingBytesRate { get; } Property Value Type Description System.Int64 Estimated rebalancing speed in bytes. RebalancingKeysRate Gets estimated rebalancing speed in keys. Declaration long RebalancingKeysRate { get; } Property Value Type Description System.Int64 Estimated rebalancing speed in keys. RebalancingPartitionsCount Gets number of currently rebalancing partitions on current node. Declaration int RebalancingPartitionsCount { get; } Property Value Type Description System.Int32 Number of currently rebalancing partitions on current node. RebalancingStartTime Gets rebalancing start time. entries in onheap cache and near entries. Declaration long RebalancingStartTime { get; } Property Value Type Description System.Int64 Rebalancing start time. Size Gets number of non-null values in the cache. Declaration int Size { get; } Property Value Type Description System.Int32 Number of non-null values in the cache. TotalPartitionsCount Gets total number of partitions on current node. Declaration int TotalPartitionsCount { get; } Property Value Type Description System.Int32 Total number of partitions on current node. TxCommitQueueSize Gets committed transaction queue size. Declaration int TxCommitQueueSize { get; } Property Value Type Description System.Int32 Committed transaction queue size. TxCommittedVersionsSize Gets number of cached committed transaction IDs. Declaration int TxCommittedVersionsSize { get; } Property Value Type Description System.Int32 Number of cached committed transaction IDs. TxDhtCommitQueueSize Gets committed DHT transaction queue size. Declaration int TxDhtCommitQueueSize { get; } Property Value Type Description System.Int32 Committed DHT transaction queue size. TxDhtCommittedVersionsSize Gets number of cached committed DHT transaction IDs. Declaration int TxDhtCommittedVersionsSize { get; } Property Value Type Description System.Int32 Number of cached committed DHT transaction IDs. TxDhtPrepareQueueSize Gets prepared DHT transaction queue size. Declaration int TxDhtPrepareQueueSize { get; } Property Value Type Description System.Int32 Prepared DHT transaction queue size. TxDhtRolledbackVersionsSize Gets number of cached rolled back DHT transaction IDs. Declaration int TxDhtRolledbackVersionsSize { get; } Property Value Type Description System.Int32 Number of cached rolled back DHT transaction IDs. TxDhtStartVersionCountsSize Gets DHT start version counts map size. Declaration int TxDhtStartVersionCountsSize { get; } Property Value Type Description System.Int32 DHT start version counts map size. TxDhtThreadMapSize Gets transaction DHT per-thread map size. Declaration int TxDhtThreadMapSize { get; } Property Value Type Description System.Int32 DHT thread map size. TxDhtXidMapSize Gets transaction DHT per-Xid map size. Declaration int TxDhtXidMapSize { get; } Property Value Type Description System.Int32 Transaction DHT per-Xid map size. TxPrepareQueueSize Gets prepared transaction queue size. Declaration int TxPrepareQueueSize { get; } Property Value Type Description System.Int32 Prepared transaction queue size. TxRolledbackVersionsSize Gets number of cached rolled back transaction IDs. Declaration int TxRolledbackVersionsSize { get; } Property Value Type Description System.Int32 Number of cached rolled back transaction IDs. TxStartVersionCountsSize Gets start version counts map size. Declaration int TxStartVersionCountsSize { get; } Property Value Type Description System.Int32 Start version counts map size. TxThreadMapSize Gets transaction per-thread map size. Declaration int TxThreadMapSize { get; } Property Value Type Description System.Int32 Thread map size. TxXidMapSize Gets transaction per-Xid map size. Declaration int TxXidMapSize { get; } Property Value Type Description System.Int32 Transaction per-Xid map size. ValueType Determines the required type of values for this cache, if any. Declaration string ValueType { get; } Property Value Type Description System.String The fully qualified class name of the value type, or \"java.lang.Object\" if the type is undefined. WriteBehindBufferSize Gets count of entries that were processed by the write-behind store and have not been flushed to the underlying store yet. Declaration int WriteBehindBufferSize { get; } Property Value Type Description System.Int32 Total count of entries in cache store internal buffer. WriteBehindCriticalOverflowCount Gets count of write buffer overflow events in progress at the moment. Each overflow event causes the ongoing flush operation to be performed synchronously. Declaration int WriteBehindCriticalOverflowCount { get; } Property Value Type Description System.Int32 Count of cache overflow events since start. WriteBehindErrorRetryCount Gets count of cache entries that are in a store-retry state. An entry is assigned a store-retry state when underlying store failed due some reason and cache has enough space to retain this entry till the next try. Declaration int WriteBehindErrorRetryCount { get; } Property Value Type Description System.Int32 Count of entries in store-retry state. WriteBehindFlushFrequency Gets the cache flush frequency. All pending operations on the underlying store will be performed within time interval not less then this value. If this value is 0, then flush is performed only when buffer size exceeds flush size. Declaration long WriteBehindFlushFrequency { get; } Property Value Type Description System.Int64 Flush frequency in milliseconds. WriteBehindFlushSize Gets the maximum size of the write-behind buffer. When the count of unique keys in write buffer exceeds this value, the buffer is scheduled for write to the underlying store. If this value is 0, then flush is performed only on time-elapsing basis. Declaration int WriteBehindFlushSize { get; } Property Value Type Description System.Int32 Buffer size that triggers flush procedure. WriteBehindFlushThreadCount Gets the number of flush threads that will perform store update operations. Declaration int WriteBehindFlushThreadCount { get; } Property Value Type Description System.Int32 Count of worker threads. WriteBehindStoreBatchSize Gets the maximum count of similar (put or remove) operations that can be grouped to a single batch. Declaration int WriteBehindStoreBatchSize { get; } Property Value Type Description System.Int32 Maximum size of batch. WriteBehindTotalCriticalOverflowCount Gets count of write buffer overflow events since initialization. Each overflow event causes the ongoing flush operation to be performed synchronously. Declaration int WriteBehindTotalCriticalOverflowCount { get; } Property Value Type Description System.Int32 Count of cache overflow events since start."
  },
  "api/Apache.Ignite.Core.Cache.Query.ScanQuery-2.html": {
    "href": "api/Apache.Ignite.Core.Cache.Query.ScanQuery-2.html",
    "title": "Class ScanQuery<TK, TV> | Apache Ignite.NET",
    "keywords": "Class ScanQuery<TK, TV> Scan query over cache entries. Will accept all the entries if no predicate was set. Inheritance System.Object QueryBase ScanQuery<TK, TV> Inherited Members QueryBase.DefaultPageSize QueryBase.Local QueryBase.PageSize System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Query Assembly : Apache.Ignite.Core.dll Syntax public class ScanQuery<TK, TV> : QueryBase, IQueryBaseInternal Type Parameters Name Description TK TV Constructors ScanQuery(ICacheEntryFilter<TK, TV>) Initializes a new instance of the ScanQuery<TK, TV> class. Declaration public ScanQuery(ICacheEntryFilter<TK, TV> filter = null) Parameters Type Name Description ICacheEntryFilter <TK, TV> filter The filter. Properties Filter Gets or sets the predicate. Declaration public ICacheEntryFilter<TK, TV> Filter { get; set; } Property Value Type Description ICacheEntryFilter <TK, TV> Partition Gets or sets partition number over which this query should iterate. If null, query will iterate over all partitions in the cache. Must be in the range [0, N) where N is partition number in the cache. Declaration public int ? Partition { get; set; } Property Value Type Description System.Nullable < System.Int32 >"
  },
  "api/Apache.Ignite.Core.Cache.Query.SqlFieldsQuery.html": {
    "href": "api/Apache.Ignite.Core.Cache.Query.SqlFieldsQuery.html",
    "title": "Class SqlFieldsQuery | Apache Ignite.NET",
    "keywords": "Class SqlFieldsQuery SQL fields query. Inheritance System.Object SqlFieldsQuery Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Query Assembly : Apache.Ignite.Core.dll Syntax public class SqlFieldsQuery : IQueryBaseInternal Constructors SqlFieldsQuery(String, Boolean, Object[]) Constructor, Declaration public SqlFieldsQuery(string sql, bool loc, params object[] args) Parameters Type Name Description System.String sql SQL. System.Boolean loc Whether query should be executed locally. System.Object [] args Arguments. SqlFieldsQuery(String, Object[]) Constructor. Declaration public SqlFieldsQuery(string sql, params object[] args) Parameters Type Name Description System.String sql SQL. System.Object [] args Arguments. Fields DefaultPageSize Default page size. Declaration public const int DefaultPageSize = 1024 Field Value Type Description System.Int32 Properties Arguments Arguments. Declaration public object[] Arguments { get; set; } Property Value Type Description System.Object [] Colocated Gets or sets a value indicating whether this query operates on colocated data. Whenever Ignite executes a distributed query, it sends sub-queries to individual cluster members. If you know in advance that the elements of your query selection are colocated together on the same node and you group by colocated key (primary or affinity key), then Ignite can make significant performance and network optimizations by grouping data on remote nodes. Declaration public bool Colocated { get; set; } Property Value Type Description System.Boolean EnableDistributedJoins Gets or sets a value indicating whether distributed joins should be enabled for this query. When disabled, join results will only contain colocated data (joins work locally). When enabled, joins work as expected, no matter how the data is distributed. Declaration public bool EnableDistributedJoins { get; set; } Property Value Type Description System.Boolean true if enable distributed joins should be enabled; otherwise, false . EnforceJoinOrder Gets or sets a value indicating whether join order of tables should be enforced. When true, query optimizer will not reorder tables in join. It is not recommended to enable this property until you are sure that your indexes and the query itself are correct and tuned as much as possible but query optimizer still produces wrong join order. Declaration public bool EnforceJoinOrder { get; set; } Property Value Type Description System.Boolean true if join order should be enforced; otherwise, false . Lazy Gets or sets a value indicating whether this SqlFieldsQuery is lazy. By default Ignite attempts to fetch the whole query result set to memory and send it to the client. For small and medium result sets this provides optimal performance and minimize duration of internal database locks, thus increasing concurrency. If result set is too big to fit in available memory this could lead to excessive GC pauses and even OutOfMemoryError. Use this flag as a hint for Ignite to fetch result set lazily, thus minimizing memory consumption at the cost of moderate performance hit. Declaration public bool Lazy { get; set; } Property Value Type Description System.Boolean Local Local flag. When set query will be executed only on local node, so only local entries will be returned as query result. Defaults to false . Declaration public bool Local { get; set; } Property Value Type Description System.Boolean PageSize Optional page size. Defaults to DefaultPageSize . Declaration public int PageSize { get; set; } Property Value Type Description System.Int32 ReplicatedOnly Gets or sets a value indicating whether this query contains only replicated tables. This is a hint for potentially more effective execution. Declaration [Obsolete(\"No longer used as of Apache Ignite 2.8.\")] public bool ReplicatedOnly { get; set; } Property Value Type Description System.Boolean Schema Gets or sets the default schema name for the query. If not set, current cache name is used, which means you can omit schema name for tables within the current cache. Declaration public string Schema { get; set; } Property Value Type Description System.String Sql SQL. Declaration public string Sql { get; set; } Property Value Type Description System.String Timeout Gets or sets the query timeout. Query will be automatically cancelled if the execution timeout is exceeded. Default is System.TimeSpan.Zero , which means no timeout. Declaration public TimeSpan Timeout { get; set; } Property Value Type Description System.TimeSpan Methods ToString() Returns a System.String that represents this instance. Declaration public override string ToString() Returns Type Description System.String A System.String that represents this instance. Overrides System.Object.ToString()"
  },
  "api/Apache.Ignite.Core.Client.IClientConnection.html": {
    "href": "api/Apache.Ignite.Core.Client.IClientConnection.html",
    "title": "Interface IClientConnection | Apache Ignite.NET",
    "keywords": "Interface IClientConnection Represents Ignite client connection. Namespace : Apache.Ignite.Core.Client Assembly : Apache.Ignite.Core.dll Syntax public interface IClientConnection Properties LocalEndPoint Gets the local EndPoint. Declaration EndPoint LocalEndPoint { get; } Property Value Type Description System.Net.EndPoint NodeId Gets the server node id. Declaration Guid NodeId { get; } Property Value Type Description System.Guid RemoteEndPoint Gets the remote EndPoint. Declaration EndPoint RemoteEndPoint { get; } Property Value Type Description System.Net.EndPoint"
  },
  "api/Apache.Ignite.Core.Client.IgniteClientConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Client.IgniteClientConfiguration.html",
    "title": "Class IgniteClientConfiguration | Apache Ignite.NET",
    "keywords": "Class IgniteClientConfiguration Ignite thin client configuration. Ignite thin client connects to a specific Ignite node with a socket and does not start JVM in process. This configuration should correspond to ClientConnectorConfiguration on a target node. Inheritance System.Object IgniteClientConfiguration Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Client Assembly : Apache.Ignite.Core.dll Syntax public class IgniteClientConfiguration Constructors IgniteClientConfiguration() Initializes a new instance of the IgniteClientConfiguration class. Declaration public IgniteClientConfiguration() IgniteClientConfiguration(IgniteClientConfiguration) Initializes a new instance of the IgniteClientConfiguration class. Declaration public IgniteClientConfiguration(IgniteClientConfiguration cfg) Parameters Type Name Description IgniteClientConfiguration cfg The configuration to copy. IgniteClientConfiguration(String) Initializes a new instance of the IgniteClientConfiguration class. Declaration public IgniteClientConfiguration(string host) Parameters Type Name Description System.String host The host to connect to. Fields DefaultPort Default port. Declaration public const int DefaultPort = 10800 Field Value Type Description System.Int32 DefaultSocketBufferSize Default socket buffer size. Declaration public const int DefaultSocketBufferSize = 0 Field Value Type Description System.Int32 DefaultSocketTimeout Default socket timeout. Declaration public static readonly TimeSpan DefaultSocketTimeout Field Value Type Description System.TimeSpan DefaultTcpNoDelay Default value of TcpNoDelay property. Declaration public const bool DefaultTcpNoDelay = true Field Value Type Description System.Boolean Properties BinaryConfiguration Gets or sets the binary configuration. Declaration public BinaryConfiguration BinaryConfiguration { get; set; } Property Value Type Description BinaryConfiguration EnablePartitionAwareness Gets or sets a value indicating whether partition awareness should be enabled. Default is false: only one connection is established at a given moment to a random server node. When true: for cache operations, Ignite client attempts to send the request directly to the primary node for the given cache key. To do so, connection is established to every known server node at all times. Declaration public bool EnablePartitionAwareness { get; set; } Property Value Type Description System.Boolean Endpoints Gets or sets endpoints to connect to. Examples of supported formats: 192.168.1.25 (default port is used, see DefaultPort ). 192.168.1.25:780 (custom port) 192.168.1.25:780..787 (custom port range) my-host.com (default port is used, see DefaultPort ). my-host.com:780 (custom port) my-host.com:780..787 (custom port range) When multiple endpoints are specified, failover and load-balancing mechanism is enabled: Ignite picks random endpoint and connects to it. On disconnect, next endpoint is picked from the list (. Declaration public ICollection<string> Endpoints { get; set; } Property Value Type Description System.Collections.Generic.ICollection < System.String > Host Gets or sets the host. Should not be null. Declaration [Obsolete(\"Use Endpoints instead\")] public string Host { get; set; } Property Value Type Description System.String Logger Gets or sets the logger. Default is ConsoleLogger . Set to null to disable logging. Declaration public ILogger Logger { get; set; } Property Value Type Description ILogger Password Password to be used to connect to secured cluster. Declaration public string Password { get; set; } Property Value Type Description System.String Port Gets or sets the port. Declaration [Obsolete(\"Use Endpoints instead\")] public int Port { get; set; } Property Value Type Description System.Int32 ReconnectDisabled Gets or sets a value indicating whether automatic reconnect is disabled. Declaration public bool ReconnectDisabled { get; set; } Property Value Type Description System.Boolean SocketReceiveBufferSize Gets or sets the size of the socket receive buffer. When set to 0, operating system default is used. Declaration public int SocketReceiveBufferSize { get; set; } Property Value Type Description System.Int32 SocketSendBufferSize Gets or sets the size of the socket send buffer. When set to 0, operating system default is used. Declaration public int SocketSendBufferSize { get; set; } Property Value Type Description System.Int32 SocketTimeout Gets or sets the socket operation timeout. Zero or negative means infinite timeout. Declaration public TimeSpan SocketTimeout { get; set; } Property Value Type Description System.TimeSpan SslStreamFactory Gets or sets the SSL stream factory. When not null, secure socket connection will be established. Declaration public ISslStreamFactory SslStreamFactory { get; set; } Property Value Type Description ISslStreamFactory TcpNoDelay Gets or sets the value for TCP_NODELAY socket option. Each socket will be opened using provided value. Setting this option to true disables Nagle's algorithm for socket decreasing latency and delivery time for small messages. For systems that work under heavy network load it is advisable to set this value to false . Declaration public bool TcpNoDelay { get; set; } Property Value Type Description System.Boolean UserName Username to be used to connect to secured cluster. Declaration public string UserName { get; set; } Property Value Type Description System.String Methods FromXml(String) Deserializes IgniteClientConfiguration from the XML string. Declaration public static IgniteClientConfiguration FromXml(string xml) Parameters Type Name Description System.String xml Xml string. Returns Type Description IgniteClientConfiguration Deserialized instance. FromXml(XmlReader) Deserializes IgniteClientConfiguration from the XML reader. Declaration public static IgniteClientConfiguration FromXml(XmlReader reader) Parameters Type Name Description System.Xml.XmlReader reader The reader. Returns Type Description IgniteClientConfiguration Deserialized instance. ToXml() Serializes this instance to an XML string. Declaration public string ToXml() Returns Type Description System.String ToXml(XmlWriter, String) Serializes this instance to the specified XML writer. Declaration public void ToXml(XmlWriter writer, string rootElementName) Parameters Type Name Description System.Xml.XmlWriter writer The writer. System.String rootElementName Name of the root element."
  },
  "api/Apache.Ignite.Core.Common.IgniteFutureCancelledException.html": {
    "href": "api/Apache.Ignite.Core.Common.IgniteFutureCancelledException.html",
    "title": "Class IgniteFutureCancelledException | Apache Ignite.NET",
    "keywords": "Class IgniteFutureCancelledException Indicates future cancellation within Ignite. Inheritance System.Object System.Exception IgniteException IgniteFutureCancelledException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Common Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class IgniteFutureCancelledException : IgniteException, ISerializable, _Exception Constructors IgniteFutureCancelledException() Initializes a new instance of the IgniteFutureCancelledException class. Declaration public IgniteFutureCancelledException() IgniteFutureCancelledException(SerializationInfo, StreamingContext) Initializes a new instance of the IgniteFutureCancelledException class. Declaration protected IgniteFutureCancelledException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. IgniteFutureCancelledException(String) Initializes a new instance of the IgniteFutureCancelledException class. Declaration public IgniteFutureCancelledException(string message) Parameters Type Name Description System.String message The message that describes the error. IgniteFutureCancelledException(String, Exception) Initializes a new instance of the IgniteFutureCancelledException class. Declaration public IgniteFutureCancelledException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Common.IgniteGuid.html": {
    "href": "api/Apache.Ignite.Core.Common.IgniteGuid.html",
    "title": "Struct IgniteGuid | Apache Ignite.NET",
    "keywords": "Struct IgniteGuid Ignite guid with additional local ID. Implements System.IEquatable < IgniteGuid > Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() Namespace : Apache.Ignite.Core.Common Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public struct IgniteGuid : IEquatable<IgniteGuid>, IBinaryWriteAware Constructors IgniteGuid(Guid, Int64) Initializes a new instance of the IgniteGuid struct. Declaration public IgniteGuid(Guid globalId, long localId) Parameters Type Name Description System.Guid globalId The global id. System.Int64 localId The local id. Properties GlobalId Gets the global id. Declaration public Guid GlobalId { get; } Property Value Type Description System.Guid LocalId Gets the local id. Declaration public long LocalId { get; } Property Value Type Description System.Int64 Methods Equals(IgniteGuid) Indicates whether the current object is equal to another object of the same type. Declaration public bool Equals(IgniteGuid other) Parameters Type Name Description IgniteGuid other An object to compare with this object. Returns Type Description System.Boolean true if the current object is equal to the other parameter; otherwise, false. Equals(Object) Determines whether the specified System.Object , is equal to this instance. Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj The System.Object to compare with this instance. Returns Type Description System.Boolean true if the specified System.Object is equal to this instance; otherwise, false . Overrides System.ValueType.Equals(System.Object) GetHashCode() Returns a hash code for this instance. Declaration public override int GetHashCode() Returns Type Description System.Int32 A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Overrides System.ValueType.GetHashCode() ToString() Returns a System.String that represents this instance. Declaration public override string ToString() Returns Type Description System.String A System.String that represents this instance. Overrides System.ValueType.ToString() Operators Equality(IgniteGuid, IgniteGuid) Implements the operator ==. Declaration public static bool operator ==(IgniteGuid a, IgniteGuid b) Parameters Type Name Description IgniteGuid a First item. IgniteGuid b Second item. Returns Type Description System.Boolean The result of the operator. Inequality(IgniteGuid, IgniteGuid) Implements the operator !=. Declaration public static bool operator !=(IgniteGuid a, IgniteGuid b) Parameters Type Name Description IgniteGuid a First item. IgniteGuid b Second item. Returns Type Description System.Boolean The result of the operator. Implements System.IEquatable<T>"
  },
  "api/Apache.Ignite.Core.Compute.ComputeTaskNoResultCacheAttribute.html": {
    "href": "api/Apache.Ignite.Core.Compute.ComputeTaskNoResultCacheAttribute.html",
    "title": "Class ComputeTaskNoResultCacheAttribute | Apache Ignite.NET",
    "keywords": "Class ComputeTaskNoResultCacheAttribute This attribute disables caching of task results when attached to IComputeTask<TArg, TJobRes, TRes> instance. Use it when number of jobs within task grows too big, or jobs themselves are too large to keep in memory throughout task execution. By default all results are cached and passed into OnResult(IComputeJobResult<TJobRes>, IList<IComputeJobResult<TJobRes>>) and Reduce(IList<IComputeJobResult<TJobRes>>) methods. When this attribute is attached to a task class, then this list of job results will always be empty. Inheritance System.Object System.Attribute ComputeTaskNoResultCacheAttribute Implements System.Runtime.InteropServices._Attribute Inherited Members System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Boolean) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Boolean) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Module) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.IsDefined(System.Reflection.Module, System.Type) System.Attribute.IsDefined(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Boolean) System.Attribute.IsDefined(System.Reflection.Assembly, System.Type) System.Attribute.IsDefined(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.Equals(System.Object) System.Attribute.GetHashCode() System.Attribute.Match(System.Object) System.Attribute.IsDefaultAttribute() System.Attribute.System.Runtime.InteropServices._Attribute.GetTypeInfoCount(System.UInt32) System.Attribute.System.Runtime.InteropServices._Attribute.GetTypeInfo(System.UInt32, System.UInt32, System.IntPtr) System.Attribute.System.Runtime.InteropServices._Attribute.GetIDsOfNames(System.Guid, System.IntPtr, System.UInt32, System.UInt32, System.IntPtr) System.Attribute.System.Runtime.InteropServices._Attribute.Invoke(System.UInt32, System.Guid, System.UInt32, System.Int16, System.IntPtr, System.IntPtr, System.IntPtr, System.IntPtr) System.Attribute.TypeId System.Object.ToString() System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Compute Assembly : Apache.Ignite.Core.dll Syntax [AttributeUsage(AttributeTargets.Class | AttributeTargets.Interface)] public sealed class ComputeTaskNoResultCacheAttribute : Attribute, _Attribute Implements System.Runtime.InteropServices._Attribute"
  },
  "api/Apache.Ignite.Core.Compute.ComputeTaskSplitAdapter-3.html": {
    "href": "api/Apache.Ignite.Core.Compute.ComputeTaskSplitAdapter-3.html",
    "title": "Class ComputeTaskSplitAdapter<TArg, TJobRes, TTaskRes> | Apache Ignite.NET",
    "keywords": "Class ComputeTaskSplitAdapter<TArg, TJobRes, TTaskRes> This class defines simplified adapter for IComputeTask<TArg, TJobRes, TRes> . This adapter can be used when jobs can be randomly assigned to available Ignite nodes. This adapter is sufficient in most homogeneous environments where all nodes are equally suitable for executing grid job, see Split(Int32, TArg) method for more details. Inheritance System.Object ComputeTaskAdapter <TArg, TJobRes, TTaskRes> ComputeTaskSplitAdapter<TArg, TJobRes, TTaskRes> Implements IComputeTask <TArg, TJobRes, TTaskRes> Inherited Members ComputeTaskAdapter<TArg, TJobRes, TTaskRes>.OnResult(IComputeJobResult<TJobRes>, IList<IComputeJobResult<TJobRes>>) ComputeTaskAdapter<TArg, TJobRes, TTaskRes>.Map(IList<IClusterNode>, TArg) ComputeTaskAdapter<TArg, TJobRes, TTaskRes>.Reduce(IList<IComputeJobResult<TJobRes>>) System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Compute Assembly : Apache.Ignite.Core.dll Syntax public abstract class ComputeTaskSplitAdapter<TArg, TJobRes, TTaskRes> : ComputeTaskAdapter<TArg, TJobRes, TTaskRes>, IComputeTask<TArg, TJobRes, TTaskRes> Type Parameters Name Description TArg TJobRes TTaskRes Methods Map(IList<IClusterNode>, TArg) This method is called to map or split Ignite task into multiple Ignite jobs. This is the first method that gets called when task execution starts. Declaration public override IDictionary<IComputeJob<TJobRes>, IClusterNode> Map(IList<IClusterNode> subgrid, TArg arg) Parameters Type Name Description System.Collections.Generic.IList < IClusterNode > subgrid Nodes available for this task execution. Note that order of nodes is guaranteed to be randomized by container. This ensures that every time you simply iterate through Ignite nodes, the order of nodes will be random which over time should result into all nodes being used equally. TArg arg Task execution argument. Can be null . This is the same argument as the one passed into ICompute.Execute() methods. Returns Type Description System.Collections.Generic.IDictionary < IComputeJob <TJobRes>, IClusterNode > Map of Ignite jobs assigned to subgrid node. If null or empty map is returned, exception will be thrown. Overrides Apache.Ignite.Core.Compute.ComputeTaskAdapter<TArg, TJobRes, TTaskRes>.Map(System.Collections.Generic.IList<Apache.Ignite.Core.Cluster.IClusterNode>, TArg) Exceptions Type Condition IgniteException Split returned no jobs. Split(Int32, TArg) This is a simplified version of Map(IList<IClusterNode>, TArg) method. This method basically takes given argument and splits it into a collection of Apache.Ignite.Core.Impl.Compute.IComputeJob using provided grid size as indication of how many node are available. These jobs will be randomly mapped to available Ignite nodes. Note that if number of jobs is greater than number of Ignite nodes (i.e, grid size), the grid nodes will be reused and some jobs will end up on the same Ignite nodes. Declaration protected abstract ICollection<IComputeJob<TJobRes>> Split(int gridSize, TArg arg) Parameters Type Name Description System.Int32 gridSize Number of available Ignite nodes. Note that returned number of jobs can be less, equal or greater than this grid size. TArg arg Task execution argument. Can be null . Returns Type Description System.Collections.Generic.ICollection < IComputeJob <TJobRes>> Implements IComputeTask<TArg, TJobRes, TRes>"
  },
  "api/Apache.Ignite.Core.Configuration.SqlConnectorConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Configuration.SqlConnectorConfiguration.html",
    "title": "Class SqlConnectorConfiguration | Apache Ignite.NET",
    "keywords": "Class SqlConnectorConfiguration SQL connector configuration (for ODBC and JDBC). Inheritance System.Object SqlConnectorConfiguration Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Configuration Assembly : Apache.Ignite.Core.dll Syntax [Obsolete(\"Use ClientConnectorConfiguration instead.\")] public class SqlConnectorConfiguration Constructors SqlConnectorConfiguration() Initializes a new instance of the SqlConnectorConfiguration class. Declaration public SqlConnectorConfiguration() Fields DefaultMaxOpenCursorsPerConnection Default maximum number of open cursors per connection. Declaration public const int DefaultMaxOpenCursorsPerConnection = 128 Field Value Type Description System.Int32 DefaultPort Default port. Declaration public const int DefaultPort = 10800 Field Value Type Description System.Int32 DefaultPortRange Default port range. Declaration public const int DefaultPortRange = 100 Field Value Type Description System.Int32 DefaultSocketBufferSize Default socket buffer size. Declaration public const int DefaultSocketBufferSize = 0 Field Value Type Description System.Int32 DefaultTcpNoDelay Default value of TcpNoDelay property. Declaration public const bool DefaultTcpNoDelay = true Field Value Type Description System.Boolean DefaultThreadPoolSize Default SQL connector thread pool size. Declaration public static readonly int DefaultThreadPoolSize Field Value Type Description System.Int32 Properties Host Gets or sets the host. Declaration public string Host { get; set; } Property Value Type Description System.String MaxOpenCursorsPerConnection Gets or sets the maximum open cursors per connection. Declaration public int MaxOpenCursorsPerConnection { get; set; } Property Value Type Description System.Int32 Port Gets or sets the port. Declaration public int Port { get; set; } Property Value Type Description System.Int32 PortRange Gets or sets the port range. Declaration public int PortRange { get; set; } Property Value Type Description System.Int32 SocketReceiveBufferSize Gets or sets the size of the socket receive buffer. When set to 0, operating system default is used. Declaration public int SocketReceiveBufferSize { get; set; } Property Value Type Description System.Int32 SocketSendBufferSize Gets or sets the size of the socket send buffer. When set to 0, operating system default is used. Declaration public int SocketSendBufferSize { get; set; } Property Value Type Description System.Int32 TcpNoDelay Gets or sets the value for TCP_NODELAY socket option. Each socket will be opened using provided value. Setting this option to true disables Nagle's algorithm for socket decreasing latency and delivery time for small messages. For systems that work under heavy network load it is advisable to set this value to false . Declaration public bool TcpNoDelay { get; set; } Property Value Type Description System.Boolean ThreadPoolSize Gets or sets the size of the thread pool. Declaration public int ThreadPoolSize { get; set; } Property Value Type Description System.Int32"
  },
  "api/Apache.Ignite.Core.Configuration.ThinClientConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Configuration.ThinClientConfiguration.html",
    "title": "Class ThinClientConfiguration | Apache Ignite.NET",
    "keywords": "Class ThinClientConfiguration Server-side thin client specific configuration. Inheritance System.Object ThinClientConfiguration Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Configuration Assembly : Apache.Ignite.Core.dll Syntax public class ThinClientConfiguration Constructors ThinClientConfiguration() Initializes a new instance of the ThinClientConfiguration class. Declaration public ThinClientConfiguration() Fields DefaultMaxActiveComputeTasksPerConnection Default limit of active compute tasks per connection. Declaration public const int DefaultMaxActiveComputeTasksPerConnection = 0 Field Value Type Description System.Int32 DefaultMaxActiveTxPerConnection Default limit of active transactions count per connection. Declaration public const int DefaultMaxActiveTxPerConnection = 100 Field Value Type Description System.Int32 Properties MaxActiveComputeTasksPerConnection Gets or sets active compute tasks per connection limit. Value 0 means that compute grid functionality is disabled for thin clients. Declaration public int MaxActiveComputeTasksPerConnection { get; set; } Property Value Type Description System.Int32 MaxActiveTxPerConnection Gets or sets active transactions count per connection limit. Declaration public int MaxActiveTxPerConnection { get; set; } Property Value Type Description System.Int32"
  },
  "api/Apache.Ignite.Core.Discovery.IDiscoverySpi.html": {
    "href": "api/Apache.Ignite.Core.Discovery.IDiscoverySpi.html",
    "title": "Interface IDiscoverySpi | Apache Ignite.NET",
    "keywords": "Interface IDiscoverySpi Represents a discovery service provider interface. Only predefined implementation is supported now: TcpDiscoverySpi . Namespace : Apache.Ignite.Core.Discovery Assembly : Apache.Ignite.Core.dll Syntax public interface IDiscoverySpi"
  },
  "api/Apache.Ignite.Core.Discovery.Tcp.ITcpDiscoveryIpFinder.html": {
    "href": "api/Apache.Ignite.Core.Discovery.Tcp.ITcpDiscoveryIpFinder.html",
    "title": "Interface ITcpDiscoveryIpFinder | Apache Ignite.NET",
    "keywords": "Interface ITcpDiscoveryIpFinder Represents an IP finder for TcpDiscoverySpi . Only predefined implementations are supported now: TcpDiscoveryStaticIpFinder , TcpDiscoveryMulticastIpFinder . Namespace : Apache.Ignite.Core.Discovery.Tcp Assembly : Apache.Ignite.Core.dll Syntax public interface ITcpDiscoveryIpFinder"
  },
  "api/Apache.Ignite.Core.Events.CacheEvent.html": {
    "href": "api/Apache.Ignite.Core.Events.CacheEvent.html",
    "title": "Class CacheEvent | Apache Ignite.NET",
    "keywords": "Class CacheEvent In-memory database (cache) event. Inheritance System.Object EventBase CacheEvent Implements IEvent System.IEquatable < EventBase > Inherited Members EventBase.Id EventBase.LocalOrder EventBase.Node EventBase.Message EventBase.Type EventBase.Name EventBase.Timestamp EventBase.Equals(EventBase) EventBase.Equals(Object) EventBase.GetHashCode() EventBase.ToString() EventBase.ReadNode(IBinaryRawReader) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Events Assembly : Apache.Ignite.Core.dll Syntax public sealed class CacheEvent : EventBase, IEvent, IEquatable<EventBase> Properties CacheName Gets cache name. Declaration public string CacheName { get; } Property Value Type Description System.String ClosureClassName Gets closure class name (applicable only for TRANSFORM operations). Declaration public string ClosureClassName { get; } Property Value Type Description System.String EventNode Gets node which initiated cache operation or null if that node is not available. Declaration public IClusterNode EventNode { get; } Property Value Type Description IClusterNode HasNewValue Gets flag indicating whether cache entry has new value in case if we only have new value in serialized form in which case NewValue will return null. Declaration public bool HasNewValue { get; } Property Value Type Description System.Boolean HasOldValue Gets flag indicating whether cache entry has old value in case if we only have old value in serialized form in which case OldValue will return null. Declaration public bool HasOldValue { get; } Property Value Type Description System.Boolean IsNear Gets flag indicating whether event happened on near or partitioned cache. Declaration public bool IsNear { get; } Property Value Type Description System.Boolean Key Gets cache entry associated with event. Declaration public object Key { get; } Property Value Type Description System.Object NewValue Gets new value for this event. Declaration public object NewValue { get; } Property Value Type Description System.Object OldValue Gets old value associated with this event. Declaration public object OldValue { get; } Property Value Type Description System.Object Partition Gets partition for the event which is the partition the key belongs to. Declaration public int Partition { get; } Property Value Type Description System.Int32 SubjectId Gets security subject ID initiated this cache event, if available. This property is available only for CacheObjectPut , CacheObjectRemoved and CacheObjectRead cache events. Subject ID will be set either to nodeId initiated cache update or read or client ID initiated cache update or read. Declaration public Guid? SubjectId { get; } Property Value Type Description System.Nullable < System.Guid > TaskName Gets task name if cache event was caused by an operation initiated within task execution. Declaration public string TaskName { get; } Property Value Type Description System.String Xid ID of surrounding cache cache transaction or null if there is no surrounding transaction. Declaration public IgniteGuid? Xid { get; } Property Value Type Description System.Nullable < IgniteGuid > Methods ToShortString() Gets shortened version of ToString result. Declaration public override string ToShortString() Returns Type Description System.String Overrides EventBase.ToShortString() Implements IEvent System.IEquatable<T>"
  },
  "api/Apache.Ignite.Core.Events.CacheQueryExecutedEvent.html": {
    "href": "api/Apache.Ignite.Core.Events.CacheQueryExecutedEvent.html",
    "title": "Class CacheQueryExecutedEvent | Apache Ignite.NET",
    "keywords": "Class CacheQueryExecutedEvent Cache query execution event. Inheritance System.Object EventBase CacheQueryExecutedEvent Implements IEvent System.IEquatable < EventBase > Inherited Members EventBase.Id EventBase.LocalOrder EventBase.Node EventBase.Message EventBase.Type EventBase.Name EventBase.Timestamp EventBase.Equals(EventBase) EventBase.Equals(Object) EventBase.GetHashCode() EventBase.ToString() EventBase.ReadNode(IBinaryRawReader) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Events Assembly : Apache.Ignite.Core.dll Syntax public sealed class CacheQueryExecutedEvent : EventBase, IEvent, IEquatable<EventBase> Properties CacheName Gets cache name on which query was executed. Declaration public string CacheName { get; } Property Value Type Description System.String ClassName Gets queried class name. Applicable for SQL and full text queries. Declaration public string ClassName { get; } Property Value Type Description System.String Clause Gets query clause. Applicable for SQL, SQL fields and full text queries. Declaration public string Clause { get; } Property Value Type Description System.String QueryType Gets query type. Declaration public string QueryType { get; } Property Value Type Description System.String SubjectId Gets security subject ID. Declaration public Guid? SubjectId { get; } Property Value Type Description System.Nullable < System.Guid > TaskName Gets the name of the task that executed the query (if any). Declaration public string TaskName { get; } Property Value Type Description System.String Methods ToShortString() Gets shortened version of ToString result. Declaration public override string ToShortString() Returns Type Description System.String Overrides EventBase.ToShortString() Implements IEvent System.IEquatable<T>"
  },
  "api/Apache.Ignite.Core.Events.CacheQueryReadEvent.html": {
    "href": "api/Apache.Ignite.Core.Events.CacheQueryReadEvent.html",
    "title": "Class CacheQueryReadEvent | Apache Ignite.NET",
    "keywords": "Class CacheQueryReadEvent Cache query read event. Inheritance System.Object EventBase CacheQueryReadEvent Implements IEvent System.IEquatable < EventBase > Inherited Members EventBase.Id EventBase.LocalOrder EventBase.Node EventBase.Message EventBase.Type EventBase.Name EventBase.Timestamp EventBase.Equals(EventBase) EventBase.Equals(Object) EventBase.GetHashCode() EventBase.ToString() EventBase.ReadNode(IBinaryRawReader) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Events Assembly : Apache.Ignite.Core.dll Syntax public sealed class CacheQueryReadEvent : EventBase, IEvent, IEquatable<EventBase> Properties CacheName Gets cache name on which query was executed. Declaration public string CacheName { get; } Property Value Type Description System.String ClassName Gets queried class name. Applicable for SQL and full text queries. Declaration public string ClassName { get; } Property Value Type Description System.String Clause Gets query clause. Applicable for SQL, SQL fields and full text queries. Declaration public string Clause { get; } Property Value Type Description System.String Key Gets read entry key. Declaration public object Key { get; } Property Value Type Description System.Object OldValue Gets read entry old value (applicable for continuous queries). Declaration public object OldValue { get; } Property Value Type Description System.Object QueryType Gets query type. Declaration public string QueryType { get; } Property Value Type Description System.String Row Gets read results set row. Declaration public object Row { get; } Property Value Type Description System.Object SubjectId Gets security subject ID. Declaration public Guid? SubjectId { get; } Property Value Type Description System.Nullable < System.Guid > TaskName Gets the name of the task that executed the query (if any). Declaration public string TaskName { get; } Property Value Type Description System.String Value Gets read entry value. Declaration public object Value { get; } Property Value Type Description System.Object Methods ToShortString() Gets shortened version of ToString result. Declaration public override string ToShortString() Returns Type Description System.String Overrides EventBase.ToShortString() Implements IEvent System.IEquatable<T>"
  },
  "api/Apache.Ignite.Core.Communication.Tcp.html": {
    "href": "api/Apache.Ignite.Core.Communication.Tcp.html",
    "title": "Namespace Apache.Ignite.Core.Communication.Tcp | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Communication.Tcp Classes TcpCommunicationSpi TcpCommunicationSpi is default communication SPI which uses TCP/IP protocol and Java NIO to communicate with other nodes. At startup, this SPI tries to start listening to local port specified by LocalPort property. If local port is occupied, then SPI will automatically increment the port number until it can successfully bind for listening. LocalPortRange configuration parameter controls maximum number of ports that SPI will try before it fails. Port range comes very handy when starting multiple grid nodes on the same machine or even in the same VM. In this case all nodes can be brought up without a single change in configuration."
  },
  "api/Apache.Ignite.Core.Communication.html": {
    "href": "api/Apache.Ignite.Core.Communication.html",
    "title": "Namespace Apache.Ignite.Core.Communication | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Communication Interfaces ICommunicationSpi Communication SPI is responsible for data exchange between nodes. Communication SPI is one of the most important SPIs in Ignite. It is used heavily throughout the system and provides means for all data exchanges between nodes, such as internal implementation details and user driven messages. Only predefined implementation is supported now: TcpCommunicationSpi ."
  },
  "api/Apache.Ignite.Core.Compute.IComputeReducer-2.html": {
    "href": "api/Apache.Ignite.Core.Compute.IComputeReducer-2.html",
    "title": "Interface IComputeReducer<TRes, TReduceRes> | Apache Ignite.NET",
    "keywords": "Interface IComputeReducer<TRes, TReduceRes> Compute reducer which is capable of result collecting and reducing. Namespace : Apache.Ignite.Core.Compute Assembly : Apache.Ignite.Core.dll Syntax public interface IComputeReducer<in TRes, out TReduceRes> Type Parameters Name Description TRes Type of results passed for reducing. TReduceRes Type of reduced result. Methods Collect(TRes) Collect closure execution result. Declaration bool Collect(TRes res) Parameters Type Name Description TRes res Result. Returns Type Description System.Boolean True to continue collecting results until all closures are finished, false to start reducing. Reduce() Reduce closure execution results collected earlier. Declaration TReduceRes Reduce() Returns Type Description TReduceRes Reduce result."
  },
  "api/Apache.Ignite.Core.Compute.IComputeTask-2.html": {
    "href": "api/Apache.Ignite.Core.Compute.IComputeTask-2.html",
    "title": "Interface IComputeTask<TJobRes, TReduceRes> | Apache Ignite.NET",
    "keywords": "Interface IComputeTask<TJobRes, TReduceRes> IComputeTask without an argument. Inherited Members IComputeTask<Object, TJobRes, TReduceRes>.Map(IList<IClusterNode>, Object) IComputeTask<Object, TJobRes, TReduceRes>.OnResult(IComputeJobResult<TJobRes>, IList<IComputeJobResult<TJobRes>>) IComputeTask<Object, TJobRes, TReduceRes>.Reduce(IList<IComputeJobResult<TJobRes>>) Namespace : Apache.Ignite.Core.Compute Assembly : Apache.Ignite.Core.dll Syntax public interface IComputeTask<TJobRes, out TReduceRes> : IComputeTask<object, TJobRes, TReduceRes> Type Parameters Name Description TJobRes TReduceRes"
  },
  "api/Apache.Ignite.Core.Datastream.IStreamReceiver-2.html": {
    "href": "api/Apache.Ignite.Core.Datastream.IStreamReceiver-2.html",
    "title": "Interface IStreamReceiver<TK, TV> | Apache Ignite.NET",
    "keywords": "Interface IStreamReceiver<TK, TV> Updates cache with batch of entries. Usually it is enough to configure AllowOverwrite property and appropriate internal cache receiver will be chosen automatically. But in some cases custom implementation may help to achieve better performance. Namespace : Apache.Ignite.Core.Datastream Assembly : Apache.Ignite.Core.dll Syntax public interface IStreamReceiver<TK, TV> Type Parameters Name Description TK TV Methods Receive(ICache<TK, TV>, ICollection<ICacheEntry<TK, TV>>) Updates cache with batch of entries. Declaration void Receive(ICache<TK, TV> cache, ICollection<ICacheEntry<TK, TV>> entries) Parameters Type Name Description ICache <TK, TV> cache Cache. System.Collections.Generic.ICollection < ICacheEntry <TK, TV>> entries Entries."
  },
  "api/Apache.Ignite.Core.Datastream.StreamTransformer-4.html": {
    "href": "api/Apache.Ignite.Core.Datastream.StreamTransformer-4.html",
    "title": "Class StreamTransformer<TK, TV, TArg, TRes> | Apache Ignite.NET",
    "keywords": "Class StreamTransformer<TK, TV, TArg, TRes> Convenience adapter to transform update existing values in streaming cache based on the previously cached value. Inheritance System.Object StreamTransformer<TK, TV, TArg, TRes> Implements IStreamReceiver <TK, TV> Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Datastream Assembly : Apache.Ignite.Core.dll Syntax public sealed class StreamTransformer<TK, TV, TArg, TRes> : IStreamReceiver<TK, TV>, IBinaryWriteAware Type Parameters Name Description TK Key type. TV Value type. TArg The type of the processor argument. TRes The type of the processor result. Constructors StreamTransformer(ICacheEntryProcessor<TK, TV, TArg, TRes>) Initializes a new instance of the StreamTransformer<TK, TV, TArg, TRes> class. Declaration public StreamTransformer(ICacheEntryProcessor<TK, TV, TArg, TRes> proc) Parameters Type Name Description ICacheEntryProcessor <TK, TV, TArg, TRes> proc Entry processor. Methods Receive(ICache<TK, TV>, ICollection<ICacheEntry<TK, TV>>) Updates cache with batch of entries. Declaration public void Receive(ICache<TK, TV> cache, ICollection<ICacheEntry<TK, TV>> entries) Parameters Type Name Description ICache <TK, TV> cache Cache. System.Collections.Generic.ICollection < ICacheEntry <TK, TV>> entries Entries. Implements IStreamReceiver<TK, TV>"
  },
  "api/Apache.Ignite.Core.Discovery.Tcp.TcpDiscoveryIpFinderBase.html": {
    "href": "api/Apache.Ignite.Core.Discovery.Tcp.TcpDiscoveryIpFinderBase.html",
    "title": "Class TcpDiscoveryIpFinderBase | Apache Ignite.NET",
    "keywords": "Class TcpDiscoveryIpFinderBase Base IpFinder class. Inheritance System.Object TcpDiscoveryIpFinderBase TcpDiscoveryStaticIpFinder Implements ITcpDiscoveryIpFinder Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Discovery.Tcp Assembly : Apache.Ignite.Core.dll Syntax public abstract class TcpDiscoveryIpFinderBase : ITcpDiscoveryIpFinder Constructors TcpDiscoveryIpFinderBase() Initializes a new instance of the TcpDiscoveryIpFinderBase class. Prevents user-defined implementations. Declaration protected TcpDiscoveryIpFinderBase() Fields TypeCodeMulticastIpFinder Declaration protected const byte TypeCodeMulticastIpFinder = 2 Field Value Type Description System.Byte TypeCodeVmIpFinder Declaration protected const byte TypeCodeVmIpFinder = 1 Field Value Type Description System.Byte Properties TypeCode Gets the type code to be used in Java to determine ip finder type. Declaration protected abstract byte TypeCode { get; } Property Value Type Description System.Byte Implements ITcpDiscoveryIpFinder"
  },
  "api/Apache.Ignite.Core.Discovery.Tcp.TcpDiscoverySpi.html": {
    "href": "api/Apache.Ignite.Core.Discovery.Tcp.TcpDiscoverySpi.html",
    "title": "Class TcpDiscoverySpi | Apache Ignite.NET",
    "keywords": "Class TcpDiscoverySpi TCP discover service provider. Inheritance System.Object TcpDiscoverySpi Implements IDiscoverySpi Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Discovery.Tcp Assembly : Apache.Ignite.Core.dll Syntax public class TcpDiscoverySpi : IDiscoverySpi Constructors TcpDiscoverySpi() Initializes a new instance of the TcpDiscoverySpi class. Declaration public TcpDiscoverySpi() Fields DefaultAckTimeout Default acknowledgement timeout. Declaration public static readonly TimeSpan DefaultAckTimeout Field Value Type Description System.TimeSpan DefaultIpFinderCleanFrequency Default value for the IpFinderCleanFrequency property. Declaration public static readonly TimeSpan DefaultIpFinderCleanFrequency Field Value Type Description System.TimeSpan DefaultJoinTimeout Default join timeout. Declaration public static readonly TimeSpan DefaultJoinTimeout Field Value Type Description System.TimeSpan DefaultLocalPort Default value for the LocalPort property. Declaration public const int DefaultLocalPort = 47500 Field Value Type Description System.Int32 DefaultLocalPortRange Default value for the LocalPortRange property. Declaration public const int DefaultLocalPortRange = 100 Field Value Type Description System.Int32 DefaultMaxAckTimeout Default maximum acknowledgement timeout. Declaration public static readonly TimeSpan DefaultMaxAckTimeout Field Value Type Description System.TimeSpan DefaultNetworkTimeout Default network timeout. Declaration public static readonly TimeSpan DefaultNetworkTimeout Field Value Type Description System.TimeSpan DefaultReconnectCount Default value for the ReconnectCount property. Declaration public const int DefaultReconnectCount = 10 Field Value Type Description System.Int32 DefaultSocketTimeout Default socket timeout. Declaration public static readonly TimeSpan DefaultSocketTimeout Field Value Type Description System.TimeSpan DefaultThreadPriority Default value for the ThreadPriority property. Declaration public const int DefaultThreadPriority = 10 Field Value Type Description System.Int32 DefaultTopologyHistorySize Default value for the TopologyHistorySize property. Declaration public const int DefaultTopologyHistorySize = 1000 Field Value Type Description System.Int32 Properties AckTimeout Gets or sets the timeout for receiving acknowledgement for sent message. Declaration public TimeSpan AckTimeout { get; set; } Property Value Type Description System.TimeSpan ClientReconnectDisabled Gets or sets a value indicating whether client does not try to reconnect after server detected client node failure. Declaration public bool ClientReconnectDisabled { get; set; } Property Value Type Description System.Boolean ForceServerMode Gets or sets a value indicating whether TcpDiscoverySpi is started in server mode regardless of ClientMode setting. Declaration public bool ForceServerMode { get; set; } Property Value Type Description System.Boolean IpFinder Gets or sets the IP finder which defines how nodes will find each other on the network. Declaration public ITcpDiscoveryIpFinder IpFinder { get; set; } Property Value Type Description ITcpDiscoveryIpFinder IpFinderCleanFrequency Gets or sets the IP finder clean frequency. Declaration public TimeSpan IpFinderCleanFrequency { get; set; } Property Value Type Description System.TimeSpan JoinTimeout Gets or sets the join timeout. Declaration public TimeSpan JoinTimeout { get; set; } Property Value Type Description System.TimeSpan LocalAddress Gets or sets the local host IP address that discovery SPI uses. Declaration public string LocalAddress { get; set; } Property Value Type Description System.String LocalPort Gets or sets the local port to listen to. Declaration public int LocalPort { get; set; } Property Value Type Description System.Int32 LocalPortRange Gets or sets the range for local ports. Local node will try to bind on first available port starting from LocalPort up until ( LocalPort + LocalPortRange ). Declaration public int LocalPortRange { get; set; } Property Value Type Description System.Int32 MaxAckTimeout Gets or sets the maximum timeout for receiving acknowledgement for sent message. Declaration public TimeSpan MaxAckTimeout { get; set; } Property Value Type Description System.TimeSpan NetworkTimeout Gets or sets the network timeout. Declaration public TimeSpan NetworkTimeout { get; set; } Property Value Type Description System.TimeSpan ReconnectCount Gets or sets the number of times node tries to (re)establish connection to another node. Declaration public int ReconnectCount { get; set; } Property Value Type Description System.Int32 SocketTimeout Gets or sets the socket timeout. Declaration public TimeSpan SocketTimeout { get; set; } Property Value Type Description System.TimeSpan StatisticsPrintFrequency Gets or sets the statistics print frequency. System.TimeSpan.Zero for no statistics. Declaration public TimeSpan StatisticsPrintFrequency { get; set; } Property Value Type Description System.TimeSpan ThreadPriority Sets thread priority, 1 (lowest) to 10 (highest). All threads within SPI will be started with it. Declaration public int ThreadPriority { get; set; } Property Value Type Description System.Int32 TopologyHistorySize Gets or sets the size of topology snapshots history. Declaration public int TopologyHistorySize { get; set; } Property Value Type Description System.Int32 Implements IDiscoverySpi"
  },
  "api/Apache.Ignite.Core.Events.IEvent.html": {
    "href": "api/Apache.Ignite.Core.Events.IEvent.html",
    "title": "Interface IEvent | Apache Ignite.NET",
    "keywords": "Interface IEvent Represents a Ignite event. Namespace : Apache.Ignite.Core.Events Assembly : Apache.Ignite.Core.dll Syntax public interface IEvent Properties Id Gets globally unique ID of this event. Declaration IgniteGuid Id { get; } Property Value Type Description IgniteGuid LocalOrder Gets locally unique ID that is atomically incremented for each event. Unlike global Id this local ID can be used for ordering events on this node. Note that for performance considerations Ignite doesn't order events globally. Declaration long LocalOrder { get; } Property Value Type Description System.Int64 Message Gets optional message for this event. Declaration string Message { get; } Property Value Type Description System.String Name Gets name of this event. Declaration string Name { get; } Property Value Type Description System.String Node Node where event occurred and was recorded. Declaration IClusterNode Node { get; } Property Value Type Description IClusterNode Timestamp Gets event timestamp. Timestamp is local to the node on which this event was produced. Note that more than one event can be generated with the same timestamp. For ordering purposes use LocalOrder instead. Declaration DateTime Timestamp { get; } Property Value Type Description System.DateTime Type Gets type of this event. All system event types are defined in EventType Declaration int Type { get; } Property Value Type Description System.Int32 Methods ToShortString() Gets shortened version of ToString result. Declaration string ToShortString() Returns Type Description System.String"
  }
}