{
  "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 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.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 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. 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.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() 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. 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 . 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 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.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 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.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.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.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.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.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.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 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 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 Time interval between MVCC vacuum runs in milliseconds. Declaration public long MvccVacuumFrequency { get; set; } Property Value Type Description System.Int64 MvccVacuumThreadCount 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 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.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.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.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.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.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.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. 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.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 { @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 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.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 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 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.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 public class SqlQuery : QueryBase 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 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.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 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 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.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.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.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 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.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.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 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 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 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.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.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.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.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.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."
  },
  "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.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.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. 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 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.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.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.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.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.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.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.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.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.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.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.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.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 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.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.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 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 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 DefaultSocketBufferSize Default socket buffer size. Declaration public const int DefaultSocketBufferSize = 32768 Field Value Type Description System.Int32 DefaultTcpNoDelay Default value of TcpNoDelay property. Declaration public const bool DefaultTcpNoDelay = true 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 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 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 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 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 Implements ICommunicationSpi"
  },
  "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>(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>(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(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(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. 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 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 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.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.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.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.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.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.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.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.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.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.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.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.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.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 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.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."
  },
  "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.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. GetConfiguration() Gets the configuration. Declaration IgniteClientConfiguration GetConfiguration() Returns Type Description IgniteClientConfiguration 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.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/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.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.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.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.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.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.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.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.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 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.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.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 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.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.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.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.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.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.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.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.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.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 deinfed explicitly. Interfaces IExpiryPolicy Defines functions to determine when cache entries will expire based on creation, access and modification operations."
  },
  "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.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."
  },
  "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.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. SecurityViolation Authorization failure. Success Operation succeeded. TooManyCursors The too many cursors (see MaxOpenCursorsPerConnection )."
  },
  "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. IgniteFutureCancelledException Indicates future cancellation within Ignite. 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.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.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.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.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.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 checkpointing buffer size in pages. Declaration long CheckpointBufferPages { get; } Property Value Type Description System.Int64 CheckpointBufferSize Gets checkpointing 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 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 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"
  },
  "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 always uses specified category. 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. LoggerExtensions Extension methods for ILogger Interfaces 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.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.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.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"
  },
  "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.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.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.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.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.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.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.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 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.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.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.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.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.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 > 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> 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 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. AffinityTopologyVersion right The right. 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. AffinityTopologyVersion right The right. Returns Type Description System.Boolean The result of the operator. Implements System.IEquatable<T>"
  },
  "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 : IBinaryRawWriteAwareEx<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 = 2L 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 = 2 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 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.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.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.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 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 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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 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 customg 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.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.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 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.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 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.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.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.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.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.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.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.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.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.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.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.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 { @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 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.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 deinfed 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.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.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.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.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 arguemnts 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.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.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.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 the cache store. Declaration T CreateInstance() Returns Type Description T New instance of the cache store."
  },
  "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 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.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.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. SqlConnectorConfiguration SQL connector configuration (for ODBC and JDBC). 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. WalMode Write Ahead Log mode."
  },
  "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.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 method will return ID of 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.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.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.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. 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"
  },
  "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 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 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"
  },
  "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/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."
  },
  "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.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.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.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.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, IBinaryRawWriteAwareEx, IBinaryRawWriteAwareEx<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.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.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.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.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.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.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.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.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.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 const int DefaultConcurrencyLevel = 0 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 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 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.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.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.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.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 settins 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>(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. 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>(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. 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. 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 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.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.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.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.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.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.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.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.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)"
  },
  "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)"
  },
  "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.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.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.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.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.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. 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.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.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.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.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.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.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 >"
  },
  "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.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.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.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.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.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.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.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.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.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.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.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.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"
  }
}