{
  "api/Apache.Ignite.Core.IIgnite.html": {
    "href": "api/Apache.Ignite.Core.IIgnite.html",
    "title": "Interface IIgnite | Apache Ignite.NET",
    "keywords": "Interface IIgnite Main entry point for all Ignite APIs. You can obtain an instance of IIgnite through GetIgnite() , or for named grids you can use GetIgnite(String) . Note that you can have multiple instances of IIgnite running in the same process by giving each instance a different name. All members are thread-safe and may be used concurrently from multiple threads. Inherited Members System.IDisposable.Dispose() Namespace : Apache.Ignite.Core Assembly : Apache.Ignite.Core.dll Syntax public interface IIgnite : IDisposable Properties Logger Gets the logger. See Logger for customization. Declaration ILogger Logger { get; } Property Value Type Description ILogger Name Gets the name of the grid this Ignite instance (and correspondingly its local node) belongs to. Note that single process can have multiple Ignite instances all belonging to different grids. Grid name allows to indicate to what grid this particular Ignite instance (i.e. Ignite runtime and its local node) belongs to. If default Ignite instance is used, then null is returned. Refer to Ignition documentation for information on how to start named grids. Declaration string Name { get; } Property Value Type Description System.String Name of the grid, or null for default grid. Methods AddCacheConfiguration(CacheConfiguration) Adds cache configuration template. Name should contain *. Template settings are applied to a cache created with CreateCache<TK, TV>(String) if specified name matches the template name. Declaration void AddCacheConfiguration(CacheConfiguration configuration) Parameters Type Name Description CacheConfiguration configuration Configuration. CreateCache<TK, TV>(CacheConfiguration) Dynamically starts new cache using provided configuration. Declaration ICache<TK, TV> CreateCache<TK, TV>(CacheConfiguration configuration) Parameters Type Name Description CacheConfiguration configuration Cache configuration. Returns Type Description ICache <TK, TV> Existing or newly created cache. Type Parameters Name Description TK Cache key type. TV Cache value type. CreateCache<TK, TV>(CacheConfiguration, NearCacheConfiguration) Dynamically starts new cache using provided configuration. Declaration ICache<TK, TV> CreateCache<TK, TV>(CacheConfiguration configuration, NearCacheConfiguration nearConfiguration) Parameters Type Name Description CacheConfiguration configuration Cache configuration. NearCacheConfiguration nearConfiguration Near cache configuration for client. Returns Type Description ICache <TK, TV> Existing or newly created cache. Type Parameters Name Description TK Cache key type. TV Cache value type. CreateCache<TK, TV>(CacheConfiguration, NearCacheConfiguration, PlatformCacheConfiguration) Dynamically starts new cache using provided configuration. Declaration ICache<TK, TV> CreateCache<TK, TV>(CacheConfiguration configuration, NearCacheConfiguration nearConfiguration, PlatformCacheConfiguration platformCacheConfiguration) Parameters Type Name Description CacheConfiguration configuration Cache configuration. NearCacheConfiguration nearConfiguration Near cache configuration for client. PlatformCacheConfiguration platformCacheConfiguration Platform cache configuration. Can be null. When not null, native .NET cache is created additionally. Returns Type Description ICache <TK, TV> Existing or newly created cache. Type Parameters Name Description TK Cache key type. TV Cache value type. CreateCache<TK, TV>(String) Dynamically starts new cache using template configuration. Declaration ICache<TK, TV> CreateCache<TK, TV>(string name) Parameters Type Name Description System.String name Cache name. Returns Type Description ICache <TK, TV> Existing or newly created cache. Type Parameters Name Description TK Cache key type. TV Cache value type. CreateNearCache<TK, TV>(String, NearCacheConfiguration) Starts a near cache on local client node if cache with specified was previously started. This method does not work on server nodes. Declaration ICache<TK, TV> CreateNearCache<TK, TV>(string name, NearCacheConfiguration configuration) Parameters Type Name Description System.String name The name. NearCacheConfiguration configuration The configuration. Returns Type Description ICache <TK, TV> Near cache instance. Type Parameters Name Description TK Cache key type. TV Cache value type. CreateNearCache<TK, TV>(String, NearCacheConfiguration, PlatformCacheConfiguration) Starts a near cache on local client node if cache with specified was previously started. This method does not work on server nodes. Declaration ICache<TK, TV> CreateNearCache<TK, TV>(string name, NearCacheConfiguration configuration, PlatformCacheConfiguration platformConfiguration) Parameters Type Name Description System.String name The name. NearCacheConfiguration configuration The configuration. PlatformCacheConfiguration platformConfiguration Platform cache configuration. Can be null. When not null, native .NET cache is created additionally. Returns Type Description ICache <TK, TV> Near cache instance. Type Parameters Name Description TK Cache key type. TV Cache value type. DestroyCache(String) Destroys dynamically created (with CreateCache<TK, TV>(String) or GetOrCreateCache<TK, TV>(String) ) cache. Declaration void DestroyCache(string name) Parameters Type Name Description System.String name The name of the cache to stop. GetAffinity(String) Gets affinity service to provide information about data partitioning and distribution. Declaration ICacheAffinity GetAffinity(string name) Parameters Type Name Description System.String name Cache name. Returns Type Description ICacheAffinity Cache data affinity service. GetAtomicLong(String, Int64, Boolean) Gets an atomic long with specified name from cache. Creates new atomic long in cache if it does not exist and create is true. Declaration IAtomicLong GetAtomicLong(string name, long initialValue, bool create) Parameters Type Name Description System.String name Name of the atomic long. System.Int64 initialValue Initial value for the atomic long. Ignored if create is false. System.Boolean create Flag indicating whether atomic long should be created if it does not exist. Returns Type Description IAtomicLong Atomic long instance with specified name, or null if it does not exist and create flag is not set. Exceptions Type Condition IgniteException If atomic long could not be fetched or created. GetAtomicReference<T>(String, T, Boolean) Gets an atomic reference with specified name from cache. Creates new atomic reference in cache if it does not exist and create is true. Declaration IAtomicReference<T> GetAtomicReference<T>(string name, T initialValue, bool create) Parameters Type Name Description System.String name Name of the atomic reference. T initialValue Initial value for the atomic reference. Ignored if create is false. System.Boolean create Flag indicating whether atomic reference should be created if it does not exist. Returns Type Description IAtomicReference <T> Atomic reference instance with specified name, or null if it does not exist and create flag is not set. Type Parameters Name Description T Exceptions Type Condition IgniteException If atomic reference could not be fetched or created. GetAtomicSequence(String, Int64, Boolean) Gets an atomic sequence with specified name from cache. Creates new atomic sequence in cache if it does not exist and create is true. Declaration IAtomicSequence GetAtomicSequence(string name, long initialValue, bool create) Parameters Type Name Description System.String name Name of the atomic sequence. System.Int64 initialValue Initial value for the atomic sequence. Ignored if create is false. System.Boolean create Flag indicating whether atomic sequence should be created if it does not exist. Returns Type Description IAtomicSequence Atomic sequence instance with specified name, or null if it does not exist and create flag is not set. Exceptions Type Condition IgniteException If atomic sequence could not be fetched or created. GetBinary() Gets an instance of IBinary interface. Declaration IBinary GetBinary() Returns Type Description IBinary Instance of IBinary interface GetCache<TK, TV>(String) Gets the cache instance for the given name to work with keys and values of specified types. You can get instances of ICache of the same name, but with different key/value types. These will use the same named cache, but only allow working with entries of specified types. Attempt to retrieve an entry of incompatible type will result in System.InvalidCastException . Use GetCache<TK, TV>(String) in order to work with entries of arbitrary types. Declaration ICache<TK, TV> GetCache<TK, TV>(string name) Parameters Type Name Description System.String name Cache name. Returns Type Description ICache <TK, TV> Cache instance for given name. Type Parameters Name Description TK Cache key type. TV Cache value type. GetCacheNames() Gets the collection of names of currently available caches, or empty collection if there are no caches. Declaration ICollection<string> GetCacheNames() Returns Type Description System.Collections.Generic.ICollection < System.String > Collection of names of currently available caches. GetCluster() Gets an instance of ICluster interface. Declaration ICluster GetCluster() Returns Type Description ICluster GetCompute() Gets compute functionality over this grid projection. All operations on the returned ICompute instance will only include nodes from this projection. Declaration ICompute GetCompute() Returns Type Description ICompute Compute instance over this grid projection. GetConfiguration() Gets the configuration of this Ignite instance. Declaration IgniteConfiguration GetConfiguration() Returns Type Description IgniteConfiguration GetDataRegionMetrics() Gets a collection of memory metrics, one for each DataRegionConfigurations . Metrics should be enabled with MetricsEnabled . Declaration ICollection<IDataRegionMetrics> GetDataRegionMetrics() Returns Type Description System.Collections.Generic.ICollection < IDataRegionMetrics > GetDataRegionMetrics(String) Gets the memory metrics for the specified data region. To get metrics for the default memory region, use DefaultDataRegionName . Declaration IDataRegionMetrics GetDataRegionMetrics(string dataRegionName) Parameters Type Name Description System.String dataRegionName Name of the data region. Returns Type Description IDataRegionMetrics GetDataStorageMetrics() Gets the persistent store metrics. To enable metrics set MetricsEnabled property in DataStorageConfiguration . Declaration IDataStorageMetrics GetDataStorageMetrics() Returns Type Description IDataStorageMetrics GetDataStreamer<TK, TV>(String) Gets a new instance of data streamer associated with given cache name. Data streamer is responsible for loading external data into Ignite. For more information refer to IDataStreamer<TK, TV> documentation. Declaration IDataStreamer<TK, TV> GetDataStreamer<TK, TV>(string cacheName) Parameters Type Name Description System.String cacheName Cache name ( null for default cache). Returns Type Description IDataStreamer <TK, TV> Data streamer. Type Parameters Name Description TK TV GetEvents() Gets events facade over all cluster nodes. Declaration IEvents GetEvents() Returns Type Description IEvents Events facade over all cluster nodes. GetMemoryMetrics() Gets a collection of memory metrics, one for each MemoryPolicies . Memory metrics should be enabled with MetricsEnabled . Obsolete, use GetDataRegionMetrics() . Declaration [Obsolete(\"Use GetDataRegionMetrics.\")] ICollection<IMemoryMetrics> GetMemoryMetrics() Returns Type Description System.Collections.Generic.ICollection < IMemoryMetrics > GetMemoryMetrics(String) Gets the memory metrics for the specified memory policy. To get metrics for the default memory region, use DefaultMemoryPolicyName . Obsolete, use GetDataRegionMetrics(String) . Declaration [Obsolete(\"Use GetDataRegionMetrics.\")] IMemoryMetrics GetMemoryMetrics(string memoryPolicyName) Parameters Type Name Description System.String memoryPolicyName Name of the memory policy. Returns Type Description IMemoryMetrics GetMessaging() Gets messaging facade over all cluster nodes. Declaration IMessaging GetMessaging() Returns Type Description IMessaging Messaging instance over all cluster nodes. GetOrCreateCache<TK, TV>(CacheConfiguration) Gets existing cache with the given name or creates new one using provided configuration. Declaration ICache<TK, TV> GetOrCreateCache<TK, TV>(CacheConfiguration configuration) Parameters Type Name Description CacheConfiguration configuration Cache configuration. Returns Type Description ICache <TK, TV> Existing or newly created cache. Type Parameters Name Description TK Cache key type. TV Cache value type. GetOrCreateCache<TK, TV>(CacheConfiguration, NearCacheConfiguration) Gets existing cache with the given name or creates new one using provided configuration. Declaration ICache<TK, TV> GetOrCreateCache<TK, TV>(CacheConfiguration configuration, NearCacheConfiguration nearConfiguration) Parameters Type Name Description CacheConfiguration configuration Cache configuration. NearCacheConfiguration nearConfiguration Near cache configuration for client. Returns Type Description ICache <TK, TV> Existing or newly created cache. Type Parameters Name Description TK Cache key type. TV Cache value type. GetOrCreateCache<TK, TV>(CacheConfiguration, NearCacheConfiguration, PlatformCacheConfiguration) Gets existing cache with the given name or creates new one using provided configuration. Declaration ICache<TK, TV> GetOrCreateCache<TK, TV>(CacheConfiguration configuration, NearCacheConfiguration nearConfiguration, PlatformCacheConfiguration platformCacheConfiguration) Parameters Type Name Description CacheConfiguration configuration Cache configuration. NearCacheConfiguration nearConfiguration Near cache configuration for client. PlatformCacheConfiguration platformCacheConfiguration Platform cache configuration. Can be null. When not null, native .NET cache is created additionally. Returns Type Description ICache <TK, TV> Existing or newly created cache. Type Parameters Name Description TK Cache key type. TV Cache value type. GetOrCreateCache<TK, TV>(String) Gets existing cache with the given name or creates new one using template configuration. Declaration ICache<TK, TV> GetOrCreateCache<TK, TV>(string name) Parameters Type Name Description System.String name Cache name. Returns Type Description ICache <TK, TV> Existing or newly created cache. Type Parameters Name Description TK Cache key type. TV Cache value type. GetOrCreateLock(LockConfiguration, Boolean) Gets or creates a distributed reentrant lock (monitor). Declaration IIgniteLock GetOrCreateLock(LockConfiguration configuration, bool create) Parameters Type Name Description LockConfiguration configuration Lock configuration. System.Boolean create Whether the lock should be created if it does not exist. Returns Type Description IIgniteLock IIgniteLock GetOrCreateLock(String) Gets or creates a distributed reentrant lock (monitor) with default configuration. Declaration IIgniteLock GetOrCreateLock(string name) Parameters Type Name Description System.String name Lock name. Returns Type Description IIgniteLock IIgniteLock GetOrCreateNearCache<TK, TV>(String, NearCacheConfiguration) Gets existing near cache with the given name or creates a new one. Declaration ICache<TK, TV> GetOrCreateNearCache<TK, TV>(string name, NearCacheConfiguration configuration) Parameters Type Name Description System.String name The name. NearCacheConfiguration configuration The configuration. Returns Type Description ICache <TK, TV> Near cache instance. Type Parameters Name Description TK Cache key type. TV Cache value type. GetOrCreateNearCache<TK, TV>(String, NearCacheConfiguration, PlatformCacheConfiguration) Gets existing near cache with the given name or creates a new one. Declaration ICache<TK, TV> GetOrCreateNearCache<TK, TV>(string name, NearCacheConfiguration configuration, PlatformCacheConfiguration platformConfiguration) Parameters Type Name Description System.String name The name. NearCacheConfiguration configuration The configuration. PlatformCacheConfiguration platformConfiguration Platform cache configuration. Can be null. When not null, native .NET cache is created additionally. Returns Type Description ICache <TK, TV> Near cache instance. Type Parameters Name Description TK Cache key type. TV Cache value type. GetPersistentStoreMetrics() Gets the persistent store metrics. To enable metrics set MetricsEnabled property in PersistentStoreConfiguration . Declaration [Obsolete(\"Use GetDataStorageMetrics.\")] IPersistentStoreMetrics GetPersistentStoreMetrics() Returns Type Description IPersistentStoreMetrics GetPlugin<T>(String) Gets the plugin by name. Declaration T GetPlugin<T>(string name)where T : class Parameters Type Name Description System.String name Plugin name. Returns Type Description T Plugin instance. Type Parameters Name Description T Plugin type Exceptions Type Condition PluginNotFoundException When plugin with specified name has not been found. GetServices() Gets services facade over all cluster nodes. Declaration IServices GetServices() Returns Type Description IServices Services facade over all cluster nodes. GetTransactions() Gets Ignite transactions facade. Declaration ITransactions GetTransactions() Returns Type Description ITransactions GetVersion() Gets Ignite version. Declaration IgniteProductVersion GetVersion() Returns Type Description IgniteProductVersion Ignite node version. IsActive() Determines whether this grid is in active state. Declaration [Obsolete(\"Use GetCluster().IsActive instead.\")] bool IsActive() Returns Type Description System.Boolean true if the grid is active; otherwise, false . ResetLostPartitions(IEnumerable<String>) Clears partitions' lost state and moves caches to a normal mode. Declaration void ResetLostPartitions(IEnumerable<string> cacheNames) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.String > cacheNames Names of caches to reset partitions for. ResetLostPartitions(String[]) Clears partitions' lost state and moves caches to a normal mode. Declaration void ResetLostPartitions(params string[] cacheNames) Parameters Type Name Description System.String [] cacheNames Names of caches to reset partitions for. SetActive(Boolean) Changes Ignite grid state to active or inactive. Declaration [Obsolete(\"Use GetCluster().SetActive instead.\")] void SetActive(bool isActive) Parameters Type Name Description System.Boolean isActive Events ClientDisconnected Occurs when client node disconnects from the cluster. This event can only occur when this instance runs in client mode ( ClientMode ). Declaration event EventHandler ClientDisconnected Event Type Type Description System.EventHandler ClientReconnected Occurs when client node reconnects to the cluster. This event can only occur when this instance runs in client mode ( ClientMode ). Declaration event EventHandler<ClientReconnectEventArgs> ClientReconnected Event Type Type Description System.EventHandler < ClientReconnectEventArgs > Stopped Occurs when node has stopped. Node can't be used at this point. See also: AfterNodeStop . Declaration event EventHandler Stopped Event Type Type Description System.EventHandler Stopping Occurs when node begins to stop. Node is fully functional at this point. See also: BeforeNodeStop . Declaration event EventHandler Stopping Event Type Type Description System.EventHandler"
  },
  "api/Apache.Ignite.Core.IIgniteLock.html": {
    "href": "api/Apache.Ignite.Core.IIgniteLock.html",
    "title": "Interface IIgniteLock | Apache Ignite.NET",
    "keywords": "Interface IIgniteLock Distributed reentrant monitor (lock). The functionality is similar to the standard System.Threading.Monitor class, but works across all cluster nodes. This API corresponds to IgniteLock in Java. Namespace : Apache.Ignite.Core Assembly : Apache.Ignite.Core.dll Syntax public interface IIgniteLock Properties Configuration Gets the lock configuration. Declaration LockConfiguration Configuration { get; } Property Value Type Description LockConfiguration Methods Enter() Acquires the distributed reentrant lock. Declaration void Enter() Exit() Releases the lock. Declaration void Exit() IsBroken() Returns a value indicating whether any node that owned the lock failed before releasing the lock. Declaration bool IsBroken() Returns Type Description System.Boolean IsEntered() Determines whether the current thread holds the lock. Declaration bool IsEntered() Returns Type Description System.Boolean IsRemoved() Gets a value indicating whether the lock has been removed from the cluster. Declaration bool IsRemoved() Returns Type Description System.Boolean Remove() Removes the lock from the cluster. Declaration void Remove() TryEnter() Acquires the lock only if it is free at the time of invocation. Declaration bool TryEnter() Returns Type Description System.Boolean True if the lock was acquired; false otherwise. TryEnter(TimeSpan) Acquires the lock if it is not held by another thread within the given waiting time. Declaration bool TryEnter(TimeSpan timeout) Parameters Type Name Description System.TimeSpan timeout Time to wait for the lock. Returns Type Description System.Boolean True if the lock was acquired; false otherwise."
  },
  "api/Apache.Ignite.Core.Plugin.PluginCallback.html": {
    "href": "api/Apache.Ignite.Core.Plugin.PluginCallback.html",
    "title": "Delegate PluginCallback | Apache Ignite.NET",
    "keywords": "Delegate PluginCallback Plugin callback delegate. Namespace : Apache.Ignite.Core.Plugin Assembly : Apache.Ignite.Core.dll Syntax public delegate long PluginCallback(IBinaryRawReader input, IBinaryRawWriter output); Parameters Type Name Description IBinaryRawReader input Input reader. May be null. IBinaryRawWriter output Output writer. May be null. Returns Type Description System.Int64 Result code."
  },
  "api/Apache.Ignite.Core.Plugin.PluginNotFoundException.html": {
    "href": "api/Apache.Ignite.Core.Plugin.PluginNotFoundException.html",
    "title": "Class PluginNotFoundException | Apache Ignite.NET",
    "keywords": "Class PluginNotFoundException Indicates missing Ignite plugin. Inheritance System.Object System.Exception PluginNotFoundException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Plugin Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class PluginNotFoundException : Exception, ISerializable, _Exception Constructors PluginNotFoundException() Initializes a new instance of the PluginNotFoundException class. Declaration public PluginNotFoundException() PluginNotFoundException(SerializationInfo, StreamingContext) Initializes a new instance of the PluginNotFoundException class. Declaration protected PluginNotFoundException(SerializationInfo info, StreamingContext context) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info System.Runtime.Serialization.StreamingContext context PluginNotFoundException(String) Initializes a new instance of the PluginNotFoundException class. Declaration public PluginNotFoundException(string message) Parameters Type Name Description System.String message The message that describes the error. PluginNotFoundException(String, Exception) Initializes a new instance of the PluginNotFoundException class. Declaration public PluginNotFoundException(string message, Exception innerException) Parameters Type Name Description System.String message The error message that explains the reason for the exception. System.Exception innerException The exception that is the cause of the current exception, or a null reference if no inner exception is specified. Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Plugin.PluginProviderTypeAttribute.html": {
    "href": "api/Apache.Ignite.Core.Plugin.PluginProviderTypeAttribute.html",
    "title": "Class PluginProviderTypeAttribute | Apache Ignite.NET",
    "keywords": "Class PluginProviderTypeAttribute When applied to IPluginConfiguration , defines the type of IPluginProvider<TConfig> to instantiate. Inheritance System.Object System.Attribute PluginProviderTypeAttribute Implements System.Runtime.InteropServices._Attribute Inherited Members System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Boolean) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Boolean) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Module) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.IsDefined(System.Reflection.Module, System.Type) System.Attribute.IsDefined(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Boolean) System.Attribute.IsDefined(System.Reflection.Assembly, System.Type) System.Attribute.IsDefined(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.Equals(System.Object) System.Attribute.GetHashCode() System.Attribute.Match(System.Object) System.Attribute.IsDefaultAttribute() System.Attribute.System.Runtime.InteropServices._Attribute.GetTypeInfoCount(System.UInt32) System.Attribute.System.Runtime.InteropServices._Attribute.GetTypeInfo(System.UInt32, System.UInt32, System.IntPtr) System.Attribute.System.Runtime.InteropServices._Attribute.GetIDsOfNames(System.Guid, System.IntPtr, System.UInt32, System.UInt32, System.IntPtr) System.Attribute.System.Runtime.InteropServices._Attribute.Invoke(System.UInt32, System.Guid, System.UInt32, System.Int16, System.IntPtr, System.IntPtr, System.IntPtr, System.IntPtr) System.Attribute.TypeId System.Object.ToString() System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Plugin Assembly : Apache.Ignite.Core.dll Syntax [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct)] public sealed class PluginProviderTypeAttribute : Attribute, _Attribute Constructors PluginProviderTypeAttribute(Type) Initializes new instance of PluginProviderTypeAttribute class. Declaration public PluginProviderTypeAttribute(Type pluginProviderType) Parameters Type Name Description System.Type pluginProviderType Type of the plugin provider. Properties PluginProviderType Gets the plugin provider type. Declaration public Type PluginProviderType { get; } Property Value Type Description System.Type Implements System.Runtime.InteropServices._Attribute"
  },
  "api/Apache.Ignite.Core.Plugin.html": {
    "href": "api/Apache.Ignite.Core.Plugin.html",
    "title": "Namespace Apache.Ignite.Core.Plugin | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Plugin Classes PluginNotFoundException Indicates missing Ignite plugin. PluginProviderTypeAttribute When applied to IPluginConfiguration , defines the type of IPluginProvider<TConfig> to instantiate. Interfaces IPluginConfiguration Plugin configuration interface. Implementations should be linked to corresponding IPluginProvider<TConfig> via PluginProviderTypeAttribute . Example plugin implementation: [PluginProviderType(typeof(MyPluginProvider))] class MyPluginConfig : IPluginConfiguration { int CustomProperty { get; set; } } class MyPluginProvider : IPluginProvider<MyPluginConfig> { ... } IPluginContext<T> Plugin execution context. IPluginProvider<TConfig> Pluggable Ignite component. Should have parameterless constructor. Ignite plugins are loaded according to PluginConfigurations . Delegates PluginCallback Plugin callback delegate."
  },
  "api/Apache.Ignite.Core.Transactions.TransactionRollbackException.html": {
    "href": "api/Apache.Ignite.Core.Transactions.TransactionRollbackException.html",
    "title": "Class TransactionRollbackException | Apache Ignite.NET",
    "keywords": "Class TransactionRollbackException Exception thrown whenever Ignite transactions has been automatically rolled back. Inheritance System.Object System.Exception IgniteException TransactionRollbackException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Transactions Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class TransactionRollbackException : IgniteException, ISerializable, _Exception Constructors TransactionRollbackException() Initializes a new instance of the TransactionRollbackException class. Declaration public TransactionRollbackException() TransactionRollbackException(SerializationInfo, StreamingContext) Initializes a new instance of the TransactionRollbackException class. Declaration protected TransactionRollbackException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. TransactionRollbackException(String) Initializes a new instance of the TransactionRollbackException class. Declaration public TransactionRollbackException(string message) Parameters Type Name Description System.String message The message that describes the error. TransactionRollbackException(String, Exception) Initializes a new instance of the TransactionRollbackException class. Declaration public TransactionRollbackException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Transactions.TransactionState.html": {
    "href": "api/Apache.Ignite.Core.Transactions.TransactionState.html",
    "title": "Enum TransactionState | Apache Ignite.NET",
    "keywords": "Enum TransactionState Cache transaction state. Namespace : Apache.Ignite.Core.Transactions Assembly : Apache.Ignite.Core.dll Syntax public enum TransactionState Fields Name Description Active Transaction started. Committed Transaction commit succeeded. Committing Transaction commit started (validating finished). MarkedRollback Transaction is marked for rollback. Prepared Transaction validation succeeded. Preparing Transaction validating. RolledBack Transaction rollback succeeded. RollingBack Transaction rollback started (validation failed). Unknown Transaction rollback failed or is otherwise unknown state."
  },
  "api/Apache.Ignite.Core.Transactions.TransactionTimeoutException.html": {
    "href": "api/Apache.Ignite.Core.Transactions.TransactionTimeoutException.html",
    "title": "Class TransactionTimeoutException | Apache Ignite.NET",
    "keywords": "Class TransactionTimeoutException Exception thrown whenever Ignite transactions time out. Inheritance System.Object System.Exception IgniteException TransactionTimeoutException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Transactions Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class TransactionTimeoutException : IgniteException, ISerializable, _Exception Constructors TransactionTimeoutException() Initializes a new instance of the TransactionTimeoutException class. Declaration public TransactionTimeoutException() TransactionTimeoutException(SerializationInfo, StreamingContext) Initializes a new instance of the TransactionTimeoutException class. Declaration protected TransactionTimeoutException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. TransactionTimeoutException(String) Initializes a new instance of the TransactionTimeoutException class. Declaration public TransactionTimeoutException(string message) Parameters Type Name Description System.String message The message that describes the error. TransactionTimeoutException(String, Exception) Initializes a new instance of the TransactionTimeoutException class. Declaration public TransactionTimeoutException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Transactions.html": {
    "href": "api/Apache.Ignite.Core.Transactions.html",
    "title": "Namespace Apache.Ignite.Core.Transactions | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Transactions Classes TransactionConfiguration Transactions configuration. TransactionDeadlockException Indicates a deadlock within Ignite transaction. This exception can be thrown from any cache method that modifies or reads data within a transaction with timeout (see TxStart(TransactionConcurrency, TransactionIsolation, TimeSpan, Int32) overload). TransactionHeuristicException Exception thrown whenever Ignite transaction enters an unknown state. This exception is usually thrown whenever commit partially succeeds. Cache will still resolve this situation automatically to ensure data integrity, by invalidating all values participating in this transaction on remote nodes. TransactionOptimisticException Exception thrown whenever Ignite transactions fail optimistically. TransactionRollbackException Exception thrown whenever Ignite transactions has been automatically rolled back. TransactionTimeoutException Exception thrown whenever Ignite transactions time out. Interfaces ITransaction Grid cache transaction. Cache transactions support the following isolation levels: ReadCommitted isolation level means that always a committed value will be provided for read operations. With this isolation level values are always read from cache global memory or persistent store every time a value is accessed. In other words, if the same key is accessed more than once within the same transaction, it may have different value every time since global cache memory may be updated concurrently by other threads. RepeatableRead isolation level means that if a value was read once within transaction, then all consecutive reads will provide the same in-transaction value. With this isolation level accessed values are stored within in-transaction memory, so consecutive access to the same key within the same transaction will always return the value that was previously read or updated within this transaction. If concurrency is Pessimistic , then a lock on the key will be acquired prior to accessing the value. Serializable isolation level means that all transactions occur in a completely isolated fashion, as if all transactions in the system had executed serially, one after the other. Read access with this level happens the same way as with RepeatableRead level. However, in Optimistic mode, if some transactions cannot be serially isolated from each other, then one winner will be picked and the other transactions in conflict will result in TransactionOptimisticException being thrown on Java side. Cache transactions support the following concurrency models: Optimistic - in this mode all cache operations are not distributed to other nodes until Commit() . In this mode one PREPARE message will be sent to participating cache nodes to start acquiring per-transaction locks, and once all nodes reply OK (i.e. Phase 1 completes successfully), a one-way COMMIT message is sent without waiting for reply. If it is necessary to know whenever remote nodes have committed as well, synchronous commit or synchronous rollback should be enabled via CacheConfiguration.setWriteSynchronizationMode . Note that in this mode, optimistic failures are only possible in conjunction with Serializable isolation level. In all other cases, optimistic transactions will never fail optimistically and will always be identically ordered on all participating Ignite nodes. Pessimistic - in this mode a lock is acquired on all cache operations with exception of read operations in ReadCommitted mode. All optional filters passed into cache operations will be evaluated after successful lock acquisition. Whenever Commit() is called, a single one-way COMMIT message is sent to participating cache nodes without waiting for reply. Note that there is no reason for distributed PREPARE step, as all locks have been already acquired. Just like with optimistic mode, it is possible to configure synchronous commit or rollback and wait till transaction commits on all participating remote nodes. In addition to standard CacheAtomicityMode.TRANSACTIONAL behavior, Ignite also supports a lighter CacheAtomicityMode.ATOMIC mode as well. In this mode distributed transactions and distributed locking are not supported. Disabling transactions and locking allows to achieve much higher performance and throughput ratios. It is recommended that CacheAtomicityMode.TRANSACTIONAL mode is used whenever full ACID -compliant transactions are not needed. You can use cache transactions as follows: using (var tx = cache.Ignite.GetTransactions().TxStart()) { 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.Remove(\"k2\"); // Commit the transaction. tx.Commit(); } 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.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.Core.IgniteConfiguration.html": {
    "href": "api/Apache.Ignite.Core.IgniteConfiguration.html",
    "title": "Class IgniteConfiguration | Apache Ignite.NET",
    "keywords": "Class IgniteConfiguration Grid configuration. Inheritance System.Object IgniteConfiguration Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core Assembly : Apache.Ignite.Core.dll Syntax public class IgniteConfiguration Constructors IgniteConfiguration() Initializes a new instance of the IgniteConfiguration class. Declaration public IgniteConfiguration() IgniteConfiguration(IgniteConfiguration) Initializes a new instance of the IgniteConfiguration class. Declaration public IgniteConfiguration(IgniteConfiguration configuration) Parameters Type Name Description IgniteConfiguration configuration The configuration to copy. Fields DefaultAuthenticationEnabled Default value for AuthenticationEnabled property. Declaration public const bool DefaultAuthenticationEnabled = false Field Value Type Description System.Boolean DefaultClientConnectorConfigurationEnabled Default value for ClientConnectorConfigurationEnabled . Declaration public const bool DefaultClientConnectorConfigurationEnabled = true Field Value Type Description System.Boolean DefaultClientFailureDetectionTimeout Default failure detection timeout. Declaration public static readonly TimeSpan DefaultClientFailureDetectionTimeout Field Value Type Description System.TimeSpan DefaultFailureDetectionTimeout Default failure detection timeout. Declaration public static readonly TimeSpan DefaultFailureDetectionTimeout Field Value Type Description System.TimeSpan DefaultIsActiveOnStart Default value for IsActiveOnStart property. Declaration public const bool DefaultIsActiveOnStart = true Field Value Type Description System.Boolean DefaultIsLateAffinityAssignment Default late affinity assignment mode. Declaration public const bool DefaultIsLateAffinityAssignment = true Field Value Type Description System.Boolean DefaultJvmInitMem Default initial JVM memory in megabytes. Declaration public const int DefaultJvmInitMem = -1 Field Value Type Description System.Int32 DefaultJvmMaxMem Default maximum JVM memory in megabytes. Declaration public const int DefaultJvmMaxMem = -1 Field Value Type Description System.Int32 DefaultLongQueryWarningTimeout Default timeout after which long query warning will be printed. Declaration public static readonly TimeSpan DefaultLongQueryWarningTimeout Field Value Type Description System.TimeSpan DefaultManagementThreadPoolSize Default management thread pool size. Declaration public const int DefaultManagementThreadPoolSize = 4 Field Value Type Description System.Int32 DefaultMetricsExpireTime Default metrics expire time. Declaration public static readonly TimeSpan DefaultMetricsExpireTime Field Value Type Description System.TimeSpan DefaultMetricsHistorySize Default metrics history size. Declaration public const int DefaultMetricsHistorySize = 10000 Field Value Type Description System.Int32 DefaultMetricsLogFrequency Default metrics log frequency. Declaration public static readonly TimeSpan DefaultMetricsLogFrequency Field Value Type Description System.TimeSpan DefaultMetricsUpdateFrequency Default metrics update frequency. Declaration public static readonly TimeSpan DefaultMetricsUpdateFrequency Field Value Type Description System.TimeSpan DefaultMvccVacuumFrequency Default value for MvccVacuumFrequency property. Declaration public const long DefaultMvccVacuumFrequency = 5000L Field Value Type Description System.Int64 DefaultMvccVacuumThreadCount Default value for MvccVacuumThreadCount property. Declaration public const int DefaultMvccVacuumThreadCount = 2 Field Value Type Description System.Int32 DefaultNetworkSendRetryCount Default network retry count. Declaration public const int DefaultNetworkSendRetryCount = 3 Field Value Type Description System.Int32 DefaultNetworkSendRetryDelay Default network retry delay. Declaration public static readonly TimeSpan DefaultNetworkSendRetryDelay Field Value Type Description System.TimeSpan DefaultNetworkTimeout Default network timeout. Declaration public static readonly TimeSpan DefaultNetworkTimeout Field Value Type Description System.TimeSpan DefaultRedirectJavaConsoleOutput Default value for RedirectJavaConsoleOutput property. Declaration public const bool DefaultRedirectJavaConsoleOutput = true Field Value Type Description System.Boolean DefaultSqlQueryHistorySize Default value for SqlQueryHistorySize property. Declaration public const int DefaultSqlQueryHistorySize = 1000 Field Value Type Description System.Int32 DefaultThreadPoolSize Default thread pool size. Declaration public static readonly int DefaultThreadPoolSize Field Value Type Description System.Int32 Properties Assemblies List of additional .NET assemblies to load on Ignite start. Each item can be either fully qualified assembly name, path to assembly to DLL or path to a directory when assemblies reside. Declaration public ICollection<string> Assemblies { get; set; } Property Value Type Description System.Collections.Generic.ICollection < System.String > AsyncCallbackThreadPoolSize Gets or sets the size of the asynchronous callback thread pool. Declaration public int AsyncCallbackThreadPoolSize { get; set; } Property Value Type Description System.Int32 AsyncContinuationExecutor Gets or sets the async continuation behavior. See AsyncContinuationExecutor members for more details. Declaration public AsyncContinuationExecutor AsyncContinuationExecutor { get; set; } Property Value Type Description AsyncContinuationExecutor AtomicConfiguration Gets or sets the atomic data structures configuration. Declaration public AtomicConfiguration AtomicConfiguration { get; set; } Property Value Type Description AtomicConfiguration AuthenticationEnabled Gets or sets whether user authentication is enabled for the cluster. Default is false . Declaration public bool AuthenticationEnabled { get; set; } Property Value Type Description System.Boolean AutoGenerateIgniteInstanceName Gets or sets a value indicating whether unique IgniteInstanceName should be generated. Set this to true in scenarios where new node should be started regardless of other nodes present within current process. In particular, this setting is useful is ASP.NET and IIS environments, where AppDomains are loaded and unloaded within a single process during application restarts. Ignite stops all nodes on System.AppDomain unload, however, IIS does not wait for previous AppDomain to unload before starting up a new one, which may cause \"Ignite instance with this name has already been started\" errors. This setting solves the issue. Declaration public bool AutoGenerateIgniteInstanceName { get; set; } Property Value Type Description System.Boolean BinaryConfiguration Gets or sets the binary configuration. Declaration public BinaryConfiguration BinaryConfiguration { get; set; } Property Value Type Description BinaryConfiguration The binary configuration. CacheConfiguration Gets or sets the cache configuration. Declaration public ICollection<CacheConfiguration> CacheConfiguration { get; set; } Property Value Type Description System.Collections.Generic.ICollection < CacheConfiguration > The cache configuration. ClientConnectorConfiguration Gets or sets the client connector configuration (for JDBC, ODBC, and thin clients). Declaration public ClientConnectorConfiguration ClientConnectorConfiguration { get; set; } Property Value Type Description ClientConnectorConfiguration ClientConnectorConfigurationEnabled Gets or sets a value indicating whether client connector is enabled: allow thin clients, ODBC and JDBC drivers to work with Ignite (see ClientConnectorConfiguration ). Default is DefaultClientConnectorConfigurationEnabled . Declaration public bool ClientConnectorConfigurationEnabled { get; set; } Property Value Type Description System.Boolean ClientFailureDetectionTimeout Gets or sets the failure detection timeout used by TcpDiscoverySpi and TcpCommunicationSpi for client nodes. Declaration public TimeSpan ClientFailureDetectionTimeout { get; set; } Property Value Type Description System.TimeSpan ClientMode Gets or sets a value indicating whether node should start in client mode. Client node cannot hold data in the caches. Declaration public bool ClientMode { get; set; } Property Value Type Description System.Boolean CommunicationSpi Gets or sets the communication service provider. Null for default communication. Declaration public ICommunicationSpi CommunicationSpi { get; set; } Property Value Type Description ICommunicationSpi ConsistentId Gets or sets consistent globally unique node identifier which survives node restarts. Declaration public object ConsistentId { get; set; } Property Value Type Description System.Object DataStorageConfiguration Gets or sets the data storage configuration. Declaration public DataStorageConfiguration DataStorageConfiguration { get; set; } Property Value Type Description DataStorageConfiguration DataStreamerThreadPoolSize Gets or sets the size of the data streamer thread pool. Declaration public int DataStreamerThreadPoolSize { get; set; } Property Value Type Description System.Int32 DiscoverySpi Gets or sets the discovery service provider. Null for default discovery. Declaration public IDiscoverySpi DiscoverySpi { get; set; } Property Value Type Description IDiscoverySpi EncryptionSpi Gets or sets the encryption service provider. Null for disabled encryption. Declaration public IEncryptionSpi EncryptionSpi { get; set; } Property Value Type Description IEncryptionSpi EventStorageSpi Gets or sets the event storage interface. Only predefined implementations are supported: NoopEventStorageSpi , MemoryEventStorageSpi . Declaration public IEventStorageSpi EventStorageSpi { get; set; } Property Value Type Description IEventStorageSpi ExecutorConfiguration Gets or sets custom executor configuration for compute tasks. Declaration public ICollection<ExecutorConfiguration> ExecutorConfiguration { get; set; } Property Value Type Description System.Collections.Generic.ICollection < ExecutorConfiguration > FailureDetectionTimeout Gets or sets the failure detection timeout used by TcpDiscoverySpi and TcpCommunicationSpi . Declaration public TimeSpan FailureDetectionTimeout { get; set; } Property Value Type Description System.TimeSpan FailureHandler Gets or sets predefined failure handlers implementation. A failure handler handles critical failures of Ignite instance accordingly: NoOpFailureHandler -- do nothing. StopNodeFailureHandler -- stop node. StopNodeOrHaltFailureHandler -- try to stop node if tryStop value is true. If node can't be stopped during provided timeout or tryStop value is false then JVM process will be terminated forcibly. Only these implementations are supported: NoOpFailureHandler , StopNodeOrHaltFailureHandler , StopNodeFailureHandler . Declaration public IFailureHandler FailureHandler { get; set; } Property Value Type Description IFailureHandler GridName Gets or sets optional local instance name. This name only works locally and has no effect on topology. This property is used to when there are multiple Ignite nodes in one process to distinguish them. Declaration [Obsolete(\"Use IgniteInstanceName instead.\")] public string GridName { get; set; } Property Value Type Description System.String IgniteHome Path to Ignite home. If not set environment variable IGNITE_HOME will be used. Declaration public string IgniteHome { get; set; } Property Value Type Description System.String IgniteInstanceName Gets or sets optional local instance name. This name only works locally and has no effect on topology. This property is used to when there are multiple Ignite nodes in one process to distinguish them. Declaration public string IgniteInstanceName { get; set; } Property Value Type Description System.String IncludedEventTypes Gets or sets a set of event types ( EventType ) to be recorded by Ignite. Declaration public ICollection<int> IncludedEventTypes { get; set; } Property Value Type Description System.Collections.Generic.ICollection < System.Int32 > IsActiveOnStart Gets or sets a value indicating whether grid should be active on start. See also IsActive() and SetActive(Boolean) . This property is ignored when DataStorageConfiguration is present: cluster is always inactive on start when Ignite Persistence is enabled. Declaration public bool IsActiveOnStart { get; set; } Property Value Type Description System.Boolean IsDaemon Gets or sets a value indicating whether this node should be a daemon node. Daemon nodes are the usual grid nodes that participate in topology but not visible on the main APIs, i.e. they are not part of any cluster groups. Daemon nodes are used primarily for management and monitoring functionality that is built on Ignite and needs to participate in the topology, but also needs to be excluded from the \"normal\" topology, so that it won't participate in the task execution or in-memory data grid storage. Declaration public bool IsDaemon { get; set; } Property Value Type Description System.Boolean IsLateAffinityAssignment Gets or sets a value indicating whether late affinity assignment mode should be used. On each topology change, for each started cache, partition-to-node mapping is calculated using AffinityFunction for cache. When late affinity assignment mode is disabled then new affinity mapping is applied immediately. With late affinity assignment mode, if primary node was changed for some partition, but data for this partition is not rebalanced yet on this node, then current primary is not changed and new primary is temporary assigned as backup. This nodes becomes primary only when rebalancing for all assigned primary partitions is finished. This mode can show better performance for cache operations, since when cache primary node executes some operation and data is not rebalanced yet, then it sends additional message to force rebalancing from other nodes. Note, that ICacheAffinity interface provides assignment information taking late assignment into account, so while rebalancing for new primary nodes is not finished it can return assignment which differs from assignment calculated by AffinityFunction. This property should have the same value for all nodes in cluster. If not provided, default value is DefaultIsLateAffinityAssignment . Declaration [Obsolete(\"No longer supported, always true.\")] public bool IsLateAffinityAssignment { get; set; } Property Value Type Description System.Boolean JavaPeerClassLoadingEnabled Gets or sets a value indicating whether peer class loading is enabled for Java side. When peer class loading is enabled and task is not deployed on local node, local node will try to load classes from the node that initiated task execution. Important! PeerAssemblyLoadingMode and peer class loading in Java are two distinct and independent features. Declaration public bool JavaPeerClassLoadingEnabled { get; set; } Property Value Type Description System.Boolean JvmClasspath Classpath used by JVM on Ignite start. Declaration public string JvmClasspath { get; set; } Property Value Type Description System.String JvmDllPath Path to jvm.dll (libjvm.so on Linux, libjvm.dylib on Mac) file. If not set, it's location will be determined using JAVA_HOME environment variable. If path is neither set nor determined automatically, an exception will be thrown. Declaration public string JvmDllPath { get; set; } Property Value Type Description System.String JvmInitialMemoryMb Initial amount of memory in megabytes given to JVM. Maps to -Xms Java option. -1 maps to JVM defaults. Defaults to DefaultJvmInitMem . Declaration public int JvmInitialMemoryMb { get; set; } Property Value Type Description System.Int32 JvmMaxMemoryMb Maximum amount of memory in megabytes given to JVM. Maps to -Xmx Java option. -1 maps to JVM defaults. Defaults to DefaultJvmMaxMem . Declaration public int JvmMaxMemoryMb { get; set; } Property Value Type Description System.Int32 JvmOptions Collection of options passed to JVM on Ignite start. Declaration public ICollection<string> JvmOptions { get; set; } Property Value Type Description System.Collections.Generic.ICollection < System.String > LifecycleHandlers Lifecycle handlers. Declaration public ICollection<ILifecycleHandler> LifecycleHandlers { get; set; } Property Value Type Description System.Collections.Generic.ICollection < ILifecycleHandler > LocalEventListeners Gets or sets pre-configured local event listeners. This is similar to calling LocalListen<T>(IEventListener<T>, Int32[]) , but important difference is that some events occur during startup and can be only received this way. Declaration public ICollection<LocalEventListener> LocalEventListeners { get; set; } Property Value Type Description System.Collections.Generic.ICollection < LocalEventListener > Localhost Gets or sets system-wide local address or host for all Ignite components to bind to. If provided it will override all default local bind settings within Ignite. If null then Ignite tries to use local wildcard address.That means that all services will be available on all network interfaces of the host machine. It is strongly recommended to set this parameter for all production environments. Declaration public string Localhost { get; set; } Property Value Type Description System.String Logger Gets or sets the logger. If no logger is set, logging is delegated to Java, which uses the logger defined in Spring XML (if present) or logs to console otherwise. Declaration public ILogger Logger { get; set; } Property Value Type Description ILogger LongQueryWarningTimeout Gets or sets the timeout after which long query warning will be printed. Declaration public TimeSpan LongQueryWarningTimeout { get; set; } Property Value Type Description System.TimeSpan ManagementThreadPoolSize Gets or sets the size of the management thread pool, which processes internal Ignite jobs. Declaration public int ManagementThreadPoolSize { get; set; } Property Value Type Description System.Int32 MemoryConfiguration Gets or sets the page memory configuration. MemoryConfiguration for more details. Obsolete, use DataStorageConfiguration . Declaration [Obsolete(\"Use DataStorageConfiguration.\")] public MemoryConfiguration MemoryConfiguration { get; set; } Property Value Type Description MemoryConfiguration MetricsExpireTime Gets or sets the time after which a certain metric value is considered expired. Declaration public TimeSpan MetricsExpireTime { get; set; } Property Value Type Description System.TimeSpan MetricsHistorySize Gets or sets the number of metrics kept in history to compute totals and averages. Declaration public int MetricsHistorySize { get; set; } Property Value Type Description System.Int32 MetricsLogFrequency Gets or sets the frequency of metrics log print out. System.TimeSpan.Zero to disable metrics print out. Declaration public TimeSpan MetricsLogFrequency { get; set; } Property Value Type Description System.TimeSpan MetricsUpdateFrequency Gets or sets the job metrics update frequency. System.TimeSpan.Zero to update metrics on job start/finish. Negative value to never update metrics. Declaration public TimeSpan MetricsUpdateFrequency { get; set; } Property Value Type Description System.TimeSpan MvccVacuumFrequency This is an experimental feature. Transactional SQL is currently in a beta status. Time interval between MVCC vacuum runs in milliseconds. Declaration public long MvccVacuumFrequency { get; set; } Property Value Type Description System.Int64 MvccVacuumThreadCount This is an experimental feature. Transactional SQL is currently in a beta status. Number of MVCC vacuum threads. Declaration public int MvccVacuumThreadCount { get; set; } Property Value Type Description System.Int32 NetworkSendRetryCount Gets or sets the network send retry count. Declaration public int NetworkSendRetryCount { get; set; } Property Value Type Description System.Int32 NetworkSendRetryDelay Gets or sets the network send retry delay. Declaration public TimeSpan NetworkSendRetryDelay { get; set; } Property Value Type Description System.TimeSpan NetworkTimeout Gets or sets the network timeout. Declaration public TimeSpan NetworkTimeout { get; set; } Property Value Type Description System.TimeSpan PeerAssemblyLoadingMode Gets or sets a value indicating how user assemblies should be loaded on remote nodes. For example, when executing Call<TRes>(IComputeFunc<TRes>) , the assembly with corresponding IComputeFunc<TRes> should be loaded on remote nodes. With this option enabled, Ignite will attempt to send the assembly to remote nodes and load it there automatically. Default is Disabled . Peer loading is enabled for ICompute functionality. Declaration public PeerAssemblyLoadingMode PeerAssemblyLoadingMode { get; set; } Property Value Type Description PeerAssemblyLoadingMode PersistentStoreConfiguration Gets or sets the persistent store configuration. Obsolete, use DataStorageConfiguration . Declaration [Obsolete(\"Use DataStorageConfiguration.\")] public PersistentStoreConfiguration PersistentStoreConfiguration { get; set; } Property Value Type Description PersistentStoreConfiguration PluginConfigurations Gets or sets the configurations for plugins to be started. Declaration public ICollection<IPluginConfiguration> PluginConfigurations { get; set; } Property Value Type Description System.Collections.Generic.ICollection < IPluginConfiguration > PublicThreadPoolSize Gets or sets the size of the public thread pool, which processes compute jobs and user messages. Declaration public int PublicThreadPoolSize { get; set; } Property Value Type Description System.Int32 QueryThreadPoolSize Gets or sets the size of the query thread pool. Declaration public int QueryThreadPoolSize { get; set; } Property Value Type Description System.Int32 RedirectJavaConsoleOutput Gets or sets a value indicating whether Java console output should be redirected to System.Console.Out and System.Console.Error , respectively. Default is DefaultRedirectJavaConsoleOutput . Java code outputs valuable information to console. However, since that is Java console, it is not possible to capture that output with standard .NET APIs ( System.Console.SetOut(System.IO.TextWriter) ). As a result, many tools (IDEs, test runners) are not able to display Ignite console output in UI. This property is enabled by default and redirects Java console output to standard .NET console. It is recommended to disable this in production. Declaration public bool RedirectJavaConsoleOutput { get; set; } Property Value Type Description System.Boolean ServiceThreadPoolSize Gets or sets the size of the service thread pool, which processes Ignite services. Declaration public int ServiceThreadPoolSize { get; set; } Property Value Type Description System.Int32 SpringConfigUrl URL to Spring configuration file. Spring configuration is loaded first, then IgniteConfiguration properties are applied. Null property values do not override Spring values. Value-typed properties are tracked internally: if setter was not called, Spring value won't be overwritten. This merging happens on the top level only; e. g. if there are cache configurations defined in Spring and in .NET, .NET caches will overwrite Spring caches. Declaration public string SpringConfigUrl { get; set; } Property Value Type Description System.String SqlConnectorConfiguration Gets or sets the SQL connector configuration (for JDBC and ODBC). Declaration [Obsolete(\"Use ClientConnectorConfiguration instead.\")] public SqlConnectorConfiguration SqlConnectorConfiguration { get; set; } Property Value Type Description SqlConnectorConfiguration SqlQueryHistorySize Gets or sets the value indicating the number of SQL query history elements to keep in memory. Zero or negative value disables the history. Declaration public int SqlQueryHistorySize { get; set; } Property Value Type Description System.Int32 SqlSchemas Gets or sets SQL schemas to be created on node startup. Schemas are created on local node only and are not propagated. to other cluster nodes. Created schemas cannot be dropped. By default schema names are case-insensitive. Use quotes to enforce case sensitivity. Declaration public ICollection<string> SqlSchemas { get; set; } Property Value Type Description System.Collections.Generic.ICollection < System.String > SslContextFactory Gets or sets the SSL context factory that will be used for creating a secure socket layer b/w nodes. Default is null (no SSL). Declaration public ISslContextFactory SslContextFactory { get; set; } Property Value Type Description ISslContextFactory StripedThreadPoolSize Gets or sets the size of the striped thread pool, which processes cache requests. Declaration public int StripedThreadPoolSize { get; set; } Property Value Type Description System.Int32 SuppressWarnings Whether to suppress warnings. Declaration public bool SuppressWarnings { get; set; } Property Value Type Description System.Boolean SystemThreadPoolSize Gets or sets the size of the system thread pool, which processes internal system messages. Declaration public int SystemThreadPoolSize { get; set; } Property Value Type Description System.Int32 SystemWorkerBlockedTimeout Gets or sets the timeout for blocked system workers detection. Declaration public TimeSpan? SystemWorkerBlockedTimeout { get; set; } Property Value Type Description System.Nullable < System.TimeSpan > TransactionConfiguration Gets or sets the transaction configuration. Declaration public TransactionConfiguration TransactionConfiguration { get; set; } Property Value Type Description TransactionConfiguration UserAttributes Gets or sets the user attributes for this node. These attributes can be retrieved later via Attributes . Environment variables are added to node attributes automatically. NOTE: attribute names starting with \"org.apache.ignite\" are reserved for internal use. Declaration public IDictionary<string, object> UserAttributes { get; set; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.Object > UtilityCacheThreadPoolSize Gets or sets the size of the utility cache thread pool. Declaration public int UtilityCacheThreadPoolSize { get; set; } Property Value Type Description System.Int32 WorkDirectory Gets or sets the work directory. If not provided, a folder under IgniteHome will be used. Declaration public string WorkDirectory { get; set; } Property Value Type Description System.String Methods FromXml(String) Deserializes IgniteConfiguration from the XML string. Declaration public static IgniteConfiguration FromXml(string xml) Parameters Type Name Description System.String xml Xml string. Returns Type Description IgniteConfiguration Deserialized instance. FromXml(XmlReader) Deserializes IgniteConfiguration from the XML reader. Declaration public static IgniteConfiguration FromXml(XmlReader reader) Parameters Type Name Description System.Xml.XmlReader reader The reader. Returns Type Description IgniteConfiguration Deserialized instance. ToXml() Serializes this instance to an XML string. Declaration public string ToXml() Returns Type Description System.String ToXml(XmlWriter, String) Serializes this instance to the specified XML writer. Declaration public void ToXml(XmlWriter writer, string rootElementName) Parameters Type Name Description System.Xml.XmlWriter writer The writer. System.String rootElementName Name of the root element."
  },
  "api/Apache.Ignite.Core.Log.LoggerExtensions.html": {
    "href": "api/Apache.Ignite.Core.Log.LoggerExtensions.html",
    "title": "Class LoggerExtensions | Apache Ignite.NET",
    "keywords": "Class LoggerExtensions Extension methods for ILogger Inheritance System.Object LoggerExtensions Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Log Assembly : Apache.Ignite.Core.dll Syntax public static class LoggerExtensions Methods Debug(ILogger, Exception, String) Logs the message with Debug level. Declaration public static void Debug(this ILogger logger, Exception ex, string message) Parameters Type Name Description ILogger logger The logger. System.Exception ex The exception. System.String message The message. Debug(ILogger, Exception, String, Object[]) Logs the message with Debug level. Declaration public static void Debug(this ILogger logger, Exception ex, string message, params object[] args) Parameters Type Name Description ILogger logger The logger. System.Exception ex The exception. System.String message The message. System.Object [] args The arguments. Debug(ILogger, String) Logs the message with Debug level. Declaration public static void Debug(this ILogger logger, string message) Parameters Type Name Description ILogger logger The logger. System.String message The message. Debug(ILogger, String, Object[]) Logs the message with Debug level. Declaration public static void Debug(this ILogger logger, string message, params object[] args) Parameters Type Name Description ILogger logger The logger. System.String message The message. System.Object [] args The arguments. Error(ILogger, Exception, String) Logs the message with Error level. Declaration public static void Error(this ILogger logger, Exception ex, string message) Parameters Type Name Description ILogger logger The logger. System.Exception ex The exception. System.String message The message. Error(ILogger, Exception, String, Object[]) Logs the message with Error level. Declaration public static void Error(this ILogger logger, Exception ex, string message, params object[] args) Parameters Type Name Description ILogger logger The logger. System.Exception ex The exception. System.String message The message. System.Object [] args The arguments. Error(ILogger, String) Logs the message with Error level. Declaration public static void Error(this ILogger logger, string message) Parameters Type Name Description ILogger logger The logger. System.String message The message. Error(ILogger, String, Object[]) Logs the message with Error level. Declaration public static void Error(this ILogger logger, string message, params object[] args) Parameters Type Name Description ILogger logger The logger. System.String message The message. System.Object [] args The arguments. GetLogger(ILogger, String) Gets the CategoryLogger with a specified category that wraps provided logger. Declaration public static ILogger GetLogger(this ILogger logger, string category) Parameters Type Name Description ILogger logger The logger. System.String category The category. Returns Type Description ILogger Logger that uses specified category when no other category is provided. GetLogger(ILogger, Type) Gets the CategoryLogger with a specified category that wraps provided logger. Declaration public static ILogger GetLogger(this ILogger logger, Type category) Parameters Type Name Description ILogger logger The logger. System.Type category The category as a type. Returns Type Description ILogger Logger that uses specified category when no other category is provided. Info(ILogger, Exception, String) Logs the message with Info level. Declaration public static void Info(this ILogger logger, Exception ex, string message) Parameters Type Name Description ILogger logger The logger. System.Exception ex The exception. System.String message The message. Info(ILogger, Exception, String, Object[]) Logs the message with Info level. Declaration public static void Info(this ILogger logger, Exception ex, string message, params object[] args) Parameters Type Name Description ILogger logger The logger. System.Exception ex The exception. System.String message The message. System.Object [] args The arguments. Info(ILogger, String) Logs the message with Info level. Declaration public static void Info(this ILogger logger, string message) Parameters Type Name Description ILogger logger The logger. System.String message The message. Info(ILogger, String, Object[]) Logs the message with Info level. Declaration public static void Info(this ILogger logger, string message, params object[] args) Parameters Type Name Description ILogger logger The logger. System.String message The message. System.Object [] args The arguments. Log(ILogger, LogLevel, Exception, String) Logs the message. Declaration public static void Log(this ILogger logger, LogLevel level, Exception ex, string message) Parameters Type Name Description ILogger logger The logger. LogLevel level The level. System.Exception ex The exception. System.String message The message. Log(ILogger, LogLevel, Exception, String, Object[]) Logs the message. Declaration public static void Log(this ILogger logger, LogLevel level, Exception ex, string message, params object[] args) Parameters Type Name Description ILogger logger The logger. LogLevel level The level. System.Exception ex The exception. System.String message The message. System.Object [] args The arguments. Log(ILogger, LogLevel, String) Logs the message. Declaration public static void Log(this ILogger logger, LogLevel level, string message) Parameters Type Name Description ILogger logger The logger. LogLevel level The level. System.String message The message. Log(ILogger, LogLevel, String, Object[]) Logs the message. Declaration public static void Log(this ILogger logger, LogLevel level, string message, params object[] args) Parameters Type Name Description ILogger logger The logger. LogLevel level The level. System.String message The message. System.Object [] args The arguments. Trace(ILogger, Exception, String) Logs the message with Trace level. Declaration public static void Trace(this ILogger logger, Exception ex, string message) Parameters Type Name Description ILogger logger The logger. System.Exception ex The exception. System.String message The message. Trace(ILogger, Exception, String, Object[]) Logs the message with Trace level. Declaration public static void Trace(this ILogger logger, Exception ex, string message, params object[] args) Parameters Type Name Description ILogger logger The logger. System.Exception ex The exception. System.String message The message. System.Object [] args The arguments. Trace(ILogger, String) Logs the message with Trace level. Declaration public static void Trace(this ILogger logger, string message) Parameters Type Name Description ILogger logger The logger. System.String message The message. Trace(ILogger, String, Object[]) Logs the message with Trace level. Declaration public static void Trace(this ILogger logger, string message, params object[] args) Parameters Type Name Description ILogger logger The logger. System.String message The message. System.Object [] args The arguments. Warn(ILogger, Exception, String) Logs the message with Warn level. Declaration public static void Warn(this ILogger logger, Exception ex, string message) Parameters Type Name Description ILogger logger The logger. System.Exception ex The exception. System.String message The message. Warn(ILogger, Exception, String, Object[]) Logs the message with Warn level. Declaration public static void Warn(this ILogger logger, Exception ex, string message, params object[] args) Parameters Type Name Description ILogger logger The logger. System.Exception ex The exception. System.String message The message. System.Object [] args The arguments. Warn(ILogger, String) Logs the message with Warn level. Declaration public static void Warn(this ILogger logger, string message) Parameters Type Name Description ILogger logger The logger. System.String message The message. Warn(ILogger, String, Object[]) Logs the message with Warn level. Declaration public static void Warn(this ILogger logger, string message, params object[] args) Parameters Type Name Description ILogger logger The logger. System.String message The message. System.Object [] args The arguments."
  },
  "api/Apache.Ignite.Core.Log.LogLevel.html": {
    "href": "api/Apache.Ignite.Core.Log.LogLevel.html",
    "title": "Enum LogLevel | Apache Ignite.NET",
    "keywords": "Enum LogLevel Defines log levels. Namespace : Apache.Ignite.Core.Log Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public enum LogLevel Fields Name Description Debug Debug log level. Error Error log level. Info Info log level. Trace Trace log level. Warn Warning log level."
  },
  "api/Apache.Ignite.Core.Log.html": {
    "href": "api/Apache.Ignite.Core.Log.html",
    "title": "Namespace Apache.Ignite.Core.Log | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Log Classes CategoryLogger Wrapping logger with a predefined category. When Log(LogLevel, String, Object[], IFormatProvider, String, String, Exception) method is called, and category parameter is null, predefined category will be used. ConsoleLogger Logs to Console. Simple logger implementation without dependencies, provided out of the box for convenience. For anything more complex please use NLog/log4net integrations. LocalDateTimeProvider Returns System.DateTime.Now . LoggerExtensions Extension methods for ILogger Interfaces IDateTimeProvider System.DateTime abstraction for logging. ILogger Defines Ignite logging interface. This interface only provides essential log methods. All convenience overloads are in LoggerExtensions . Enums LogLevel Defines log levels."
  },
  "api/Apache.Ignite.Core.Messaging.IMessageListener-1.html": {
    "href": "api/Apache.Ignite.Core.Messaging.IMessageListener-1.html",
    "title": "Interface IMessageListener<T> | Apache Ignite.NET",
    "keywords": "Interface IMessageListener<T> Represents messaging filter predicate. Namespace : Apache.Ignite.Core.Messaging Assembly : Apache.Ignite.Core.dll Syntax public interface IMessageListener<in T> Type Parameters Name Description T Methods Invoke(Guid, T) Invokes the message listener when a message arrives. Declaration bool Invoke(Guid nodeId, T message) Parameters Type Name Description System.Guid nodeId Message source node identifier. T message Message. Returns Type Description System.Boolean Value indicating whether this instance should remain subscribed. Returning false will unsubscribe this message listener from further notifications."
  },
  "api/Apache.Ignite.Core.Services.ServiceDeploymentException.html": {
    "href": "api/Apache.Ignite.Core.Services.ServiceDeploymentException.html",
    "title": "Class ServiceDeploymentException | Apache Ignite.NET",
    "keywords": "Class ServiceDeploymentException Indicates an error during Grid Services deployment. Inheritance System.Object System.Exception IgniteException ServiceDeploymentException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Services Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class ServiceDeploymentException : IgniteException, ISerializable, _Exception Constructors ServiceDeploymentException() Initializes a new instance of the ServiceDeploymentException class. Declaration public ServiceDeploymentException() ServiceDeploymentException(SerializationInfo, StreamingContext) Initializes a new instance of the IgniteException class. Declaration protected ServiceDeploymentException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. ServiceDeploymentException(String) Initializes a new instance of the ServiceDeploymentException class. Declaration public ServiceDeploymentException(string message) Parameters Type Name Description System.String message The message that describes the error. ServiceDeploymentException(String, IBinaryObject, ICollection<ServiceConfiguration>) Initializes a new instance of the ServiceDeploymentException class. Declaration public ServiceDeploymentException(string message, IBinaryObject binaryCause, ICollection<ServiceConfiguration> failedCfgs) Parameters Type Name Description System.String message The message. IBinaryObject binaryCause The binary cause. System.Collections.Generic.ICollection < ServiceConfiguration > failedCfgs List of failed configurations ServiceDeploymentException(String, Exception) Initializes a new instance of the ServiceDeploymentException class. Declaration public ServiceDeploymentException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. ServiceDeploymentException(String, Exception, ICollection<ServiceConfiguration>) Initializes a new instance of the ServiceDeploymentException class with failed configurations. Declaration public ServiceDeploymentException(string message, Exception cause, ICollection<ServiceConfiguration> failedCfgs) Parameters Type Name Description System.String message The message. System.Exception cause The cause. System.Collections.Generic.ICollection < ServiceConfiguration > failedCfgs List of failed configurations Properties BinaryCause Gets the binary cause. Declaration public IBinaryObject BinaryCause { get; } Property Value Type Description IBinaryObject FailedConfigurations Configurations of services that failed to deploy, could be null Declaration public ICollection<ServiceConfiguration> FailedConfigurations { get; } Property Value Type Description System.Collections.Generic.ICollection < ServiceConfiguration > Methods GetObjectData(SerializationInfo, StreamingContext) When overridden in a derived class, sets the System.Runtime.Serialization.SerializationInfo with information about the exception. Declaration public override void GetObjectData(SerializationInfo info, StreamingContext context) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info The System.Runtime.Serialization.SerializationInfo that holds the serialized object data about the exception being thrown. System.Runtime.Serialization.StreamingContext context The System.Runtime.Serialization.StreamingContext that contains contextual information about the source or destination. Overrides System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Services.ServiceInvocationException.html": {
    "href": "api/Apache.Ignite.Core.Services.ServiceInvocationException.html",
    "title": "Class ServiceInvocationException | Apache Ignite.NET",
    "keywords": "Class ServiceInvocationException Indicates an error during Grid Services invocation. Inheritance System.Object System.Exception IgniteException ServiceInvocationException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Services Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class ServiceInvocationException : IgniteException, ISerializable, _Exception Constructors ServiceInvocationException() Initializes a new instance of the ServiceInvocationException class. Declaration public ServiceInvocationException() ServiceInvocationException(SerializationInfo, StreamingContext) Initializes a new instance of the IgniteException class. Declaration protected ServiceInvocationException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. ServiceInvocationException(String) Initializes a new instance of the ServiceInvocationException class. Declaration public ServiceInvocationException(string message) Parameters Type Name Description System.String message The message that describes the error. ServiceInvocationException(String, IBinaryObject) Initializes a new instance of the ServiceInvocationException class. Declaration public ServiceInvocationException(string message, IBinaryObject binaryCause) Parameters Type Name Description System.String message The message. IBinaryObject binaryCause The binary cause. ServiceInvocationException(String, Exception) Initializes a new instance of the ServiceInvocationException class. Declaration public ServiceInvocationException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. Properties BinaryCause Gets the binary cause. Declaration public IBinaryObject BinaryCause { get; } Property Value Type Description IBinaryObject Methods GetObjectData(SerializationInfo, StreamingContext) When overridden in a derived class, sets the System.Runtime.Serialization.SerializationInfo with information about the exception. Declaration public override void GetObjectData(SerializationInfo info, StreamingContext context) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info The System.Runtime.Serialization.SerializationInfo that holds the serialized object data about the exception being thrown. System.Runtime.Serialization.StreamingContext context The System.Runtime.Serialization.StreamingContext that contains contextual information about the source or destination. Overrides System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Services.html": {
    "href": "api/Apache.Ignite.Core.Services.html",
    "title": "Namespace Apache.Ignite.Core.Services | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Services Classes ServiceConfiguration Service configuration. ServiceDeploymentException Indicates an error during Grid Services deployment. ServiceInvocationException Indicates an error during Grid Services invocation. Interfaces IService Represents Ignite-managed service. IServiceContext Represents service execution context. IServiceDescriptor Service deployment descriptor. IServices Defines functionality to deploy distributed services in the Ignite."
  },
  "api/Apache.Ignite.Core.Ssl.ISslContextFactory.html": {
    "href": "api/Apache.Ignite.Core.Ssl.ISslContextFactory.html",
    "title": "Interface ISslContextFactory | Apache Ignite.NET",
    "keywords": "Interface ISslContextFactory Represents an SSL Context Factory. Only predefined implementation is supported for now: SslContextFactory . Namespace : Apache.Ignite.Core.Ssl Assembly : Apache.Ignite.Core.dll Syntax public interface ISslContextFactory"
  },
  "api/Apache.Ignite.Linq.CacheLinqExtensions.html": {
    "href": "api/Apache.Ignite.Linq.CacheLinqExtensions.html",
    "title": "Class CacheLinqExtensions | Apache Ignite.NET",
    "keywords": "Class CacheLinqExtensions Extensions methods for ICache<TK, TV> . Inheritance System.Object CacheLinqExtensions Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Linq Assembly : Apache.Ignite.Linq.dll Syntax public static class CacheLinqExtensions Methods AsCacheQueryable<TKey, TValue>(ICache<TKey, TValue>) Gets an System.Linq.IQueryable<T> instance over this cache. Resulting query will be translated to cache SQL query and executed over the cache instance via Query(SqlFieldsQuery) . Result of this method (and subsequent query) can be cast to ICacheQueryable for introspection, or converted with ToCacheQueryable<T>(IQueryable<T>) extension method. Declaration public static IQueryable<ICacheEntry<TKey, TValue>> AsCacheQueryable<TKey, TValue>(this ICache<TKey, TValue> cache) Parameters Type Name Description ICache <TKey, TValue> cache The cache. Returns Type Description System.Linq.IQueryable < ICacheEntry <TKey, TValue>> System.Linq.IQueryable<T> instance over this cache. Type Parameters Name Description TKey The type of the key. TValue The type of the value. AsCacheQueryable<TKey, TValue>(ICache<TKey, TValue>, QueryOptions) Gets an System.Linq.IQueryable<T> instance over this cache. Resulting query will be translated to cache SQL query and executed over the cache instance via Query(SqlFieldsQuery) . depending on requested result. Result of this method (and subsequent query) can be cast to ICacheQueryable for introspection. Declaration public static IQueryable<ICacheEntry<TKey, TValue>> AsCacheQueryable<TKey, TValue>(this ICache<TKey, TValue> cache, QueryOptions queryOptions) Parameters Type Name Description ICache <TKey, TValue> cache The cache. QueryOptions queryOptions The query options. Returns Type Description System.Linq.IQueryable < ICacheEntry <TKey, TValue>> System.Linq.IQueryable<T> instance over this cache. Type Parameters Name Description TKey The type of the key. TValue The type of the value. AsCacheQueryable<TKey, TValue>(ICache<TKey, TValue>, Boolean) Gets an System.Linq.IQueryable<T> instance over this cache. Resulting query will be translated to cache SQL query and executed over the cache instance via Query(SqlFieldsQuery) . depending on requested result. Result of this method (and subsequent query) can be cast to ICacheQueryable for introspection. Declaration public static IQueryable<ICacheEntry<TKey, TValue>> AsCacheQueryable<TKey, TValue>(this ICache<TKey, TValue> cache, bool local) Parameters Type Name Description ICache <TKey, TValue> cache The cache. System.Boolean local Local flag. When set query will be executed only on local node, so only local entries will be returned as query result. Returns Type Description System.Linq.IQueryable < ICacheEntry <TKey, TValue>> System.Linq.IQueryable<T> instance over this cache. Type Parameters Name Description TKey The type of the key. TValue The type of the value. AsCacheQueryable<TKey, TValue>(ICache<TKey, TValue>, Boolean, String) Gets an System.Linq.IQueryable<T> instance over this cache. Resulting query will be translated to cache SQL query and executed over the cache instance via Query(SqlFieldsQuery) . depending on requested result. Result of this method (and subsequent query) can be cast to ICacheQueryable for introspection. Declaration public static IQueryable<ICacheEntry<TKey, TValue>> AsCacheQueryable<TKey, TValue>(this ICache<TKey, TValue> cache, bool local, string tableName) Parameters Type Name Description ICache <TKey, TValue> cache The cache. System.Boolean local Local flag. When set query will be executed only on local node, so only local entries will be returned as query result. System.String tableName Name of the table. Table name is equal to short class name of a cache value. When a cache has only one type of values, or only one QueryEntity defined, table name will be inferred and can be omitted. Returns Type Description System.Linq.IQueryable < ICacheEntry <TKey, TValue>> System.Linq.IQueryable<T> instance over this cache. Type Parameters Name Description TKey The type of the key. TValue The type of the value. RemoveAll<TKey, TValue>(IQueryable<ICacheEntry<TKey, TValue>>) Removes all rows that are matched by the specified query. This method results in \"DELETE FROM\" distributed SQL query, performing bulk delete (as opposed to fetching all rows locally). Declaration public static int RemoveAll<TKey, TValue>(this IQueryable<ICacheEntry<TKey, TValue>> query) Parameters Type Name Description System.Linq.IQueryable < ICacheEntry <TKey, TValue>> query The query. Returns Type Description System.Int32 Affected row count. Type Parameters Name Description TKey Key type. TValue Value type. RemoveAll<TKey, TValue>(IQueryable<ICacheEntry<TKey, TValue>>, Expression<Func<ICacheEntry<TKey, TValue>, Boolean>>) Deletes all rows that are matched by the specified query. This method results in \"DELETE FROM\" distributed SQL query, performing bulk delete (as opposed to fetching all rows locally). Declaration public static int RemoveAll<TKey, TValue>(this IQueryable<ICacheEntry<TKey, TValue>> query, Expression<Func<ICacheEntry<TKey, TValue>, bool>> predicate) Parameters Type Name Description System.Linq.IQueryable < ICacheEntry <TKey, TValue>> query The query. System.Linq.Expressions.Expression < System.Func < ICacheEntry <TKey, TValue>, System.Boolean >> predicate The predicate. Returns Type Description System.Int32 Affected row count. Type Parameters Name Description TKey Key type. TValue Value type. ToCacheQueryable<T>(IQueryable<T>) Casts this query to ICacheQueryable . Declaration public static ICacheQueryable ToCacheQueryable<T>(this IQueryable<T> query) Parameters Type Name Description System.Linq.IQueryable <T> query Returns Type Description ICacheQueryable Type Parameters Name Description T UpdateAll<TKey, TValue>(IQueryable<ICacheEntry<TKey, TValue>>, Expression<Func<IUpdateDescriptor<TKey, TValue>, IUpdateDescriptor<TKey, TValue>>>) Updates all rows that are matched by the specified query. This method results in \"UPDATE\" distributed SQL query, performing bulk update (as opposed to fetching all rows locally). Declaration public static int UpdateAll<TKey, TValue>(this IQueryable<ICacheEntry<TKey, TValue>> query, Expression<Func<IUpdateDescriptor<TKey, TValue>, IUpdateDescriptor<TKey, TValue>>> updateDescription) Parameters Type Name Description System.Linq.IQueryable < ICacheEntry <TKey, TValue>> query The query. System.Linq.Expressions.Expression < System.Func < IUpdateDescriptor <TKey, TValue>, IUpdateDescriptor <TKey, TValue>>> updateDescription The update description. Returns Type Description System.Int32 Affected row count. Type Parameters Name Description TKey Key type. TValue Value type."
  },
  "api/Apache.Ignite.Linq.CompiledQuery.html": {
    "href": "api/Apache.Ignite.Linq.CompiledQuery.html",
    "title": "Class CompiledQuery | Apache Ignite.NET",
    "keywords": "Class CompiledQuery Represents a compiled cache query. Inheritance System.Object CompiledQuery Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Linq Assembly : Apache.Ignite.Linq.dll Syntax public static class CompiledQuery Methods Compile<T>(Expression<Func<IQueryable<T>>>) Creates a new delegate that represents the compiled cache query. Declaration public static Func<IQueryCursor<T>> Compile<T>(Expression<Func<IQueryable<T>>> query) Parameters Type Name Description System.Linq.Expressions.Expression < System.Func < System.Linq.IQueryable <T>>> query The query to compile. Returns Type Description System.Func < IQueryCursor <T>> Delegate that represents the compiled cache query. Type Parameters Name Description T Compile<T>(IQueryable<T>) Creates a new delegate that represents the compiled cache query with any number of arguments. This method differs from other Compile methods in that it takes in ICacheQueryable directly, and returns a delegate that takes an array of parameters. It is up to the user to provide query arguments in correct order. This method also imposes no restrictions on where the query comes from (in contrary to other methods). Declaration public static CompiledQueryFunc<T> Compile<T>(IQueryable<T> query) Parameters Type Name Description System.Linq.IQueryable <T> query The query to compile. Returns Type Description CompiledQueryFunc <T> Delegate that represents the compiled cache query. Type Parameters Name Description T Compile<T, T1>(Expression<Func<T1, IQueryable<T>>>) Creates a new delegate that represents the compiled cache query. Declaration public static Func<T1, IQueryCursor<T>> Compile<T, T1>(Expression<Func<T1, IQueryable<T>>> query) Parameters Type Name Description System.Linq.Expressions.Expression < System.Func <T1, System.Linq.IQueryable <T>>> query The query to compile. Returns Type Description System.Func <T1, IQueryCursor <T>> Delegate that represents the compiled cache query. Type Parameters Name Description T T1 Compile<T, T1, T2>(Expression<Func<T1, T2, IQueryable<T>>>) Creates a new delegate that represents the compiled cache query. Declaration public static Func<T1, T2, IQueryCursor<T>> Compile<T, T1, T2>(Expression<Func<T1, T2, IQueryable<T>>> query) Parameters Type Name Description System.Linq.Expressions.Expression < System.Func <T1, T2, System.Linq.IQueryable <T>>> query The query to compile. Returns Type Description System.Func <T1, T2, IQueryCursor <T>> Delegate that represents the compiled cache query. Type Parameters Name Description T T1 T2 Compile<T, T1, T2, T3>(Expression<Func<T1, T2, T3, IQueryable<T>>>) Creates a new delegate that represents the compiled cache query. Declaration public static Func<T1, T2, T3, IQueryCursor<T>> Compile<T, T1, T2, T3>(Expression<Func<T1, T2, T3, IQueryable<T>>> query) Parameters Type Name Description System.Linq.Expressions.Expression < System.Func <T1, T2, T3, System.Linq.IQueryable <T>>> query The query to compile. Returns Type Description System.Func <T1, T2, T3, IQueryCursor <T>> Delegate that represents the compiled cache query. Type Parameters Name Description T T1 T2 T3 Compile<T, T1, T2, T3, T4>(Expression<Func<T1, T2, T3, T4, IQueryable<T>>>) Creates a new delegate that represents the compiled cache query. Declaration public static Func<T1, T2, T3, T4, IQueryCursor<T>> Compile<T, T1, T2, T3, T4>(Expression<Func<T1, T2, T3, T4, IQueryable<T>>> query) Parameters Type Name Description System.Linq.Expressions.Expression < System.Func <T1, T2, T3, T4, System.Linq.IQueryable <T>>> query The query to compile. Returns Type Description System.Func <T1, T2, T3, T4, IQueryCursor <T>> Delegate that represents the compiled cache query. Type Parameters Name Description T T1 T2 T3 T4 Compile<T, T1, T2, T3, T4, T5>(Expression<Func<T1, T2, T3, T4, T5, IQueryable<T>>>) Creates a new delegate that represents the compiled cache query. Declaration public static Func<T1, T2, T3, T4, T5, IQueryCursor<T>> Compile<T, T1, T2, T3, T4, T5>(Expression<Func<T1, T2, T3, T4, T5, IQueryable<T>>> query) Parameters Type Name Description System.Linq.Expressions.Expression < System.Func <T1, T2, T3, T4, T5, System.Linq.IQueryable <T>>> query The query to compile. Returns Type Description System.Func <T1, T2, T3, T4, T5, IQueryCursor <T>> Delegate that represents the compiled cache query. Type Parameters Name Description T T1 T2 T3 T4 T5 Compile<T, T1, T2, T3, T4, T5, T6>(Expression<Func<T1, T2, T3, T4, T5, T6, IQueryable<T>>>) Creates a new delegate that represents the compiled cache query. Declaration public static Func<T1, T2, T3, T4, T5, T6, IQueryCursor<T>> Compile<T, T1, T2, T3, T4, T5, T6>(Expression<Func<T1, T2, T3, T4, T5, T6, IQueryable<T>>> query) Parameters Type Name Description System.Linq.Expressions.Expression < System.Func <T1, T2, T3, T4, T5, T6, System.Linq.IQueryable <T>>> query The query to compile. Returns Type Description System.Func <T1, T2, T3, T4, T5, T6, IQueryCursor <T>> Delegate that represents the compiled cache query. Type Parameters Name Description T T1 T2 T3 T4 T5 T6 Compile<T, T1, T2, T3, T4, T5, T6, T7>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, IQueryable<T>>>) Creates a new delegate that represents the compiled cache query. Declaration public static Func<T1, T2, T3, T4, T5, T6, T7, IQueryCursor<T>> Compile<T, T1, T2, T3, T4, T5, T6, T7>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, IQueryable<T>>> query) Parameters Type Name Description System.Linq.Expressions.Expression < System.Func <T1, T2, T3, T4, T5, T6, T7, System.Linq.IQueryable <T>>> query The query to compile. Returns Type Description System.Func <T1, T2, T3, T4, T5, T6, T7, IQueryCursor <T>> Delegate that represents the compiled cache query. Type Parameters Name Description T T1 T2 T3 T4 T5 T6 T7 Compile<T, T1, T2, T3, T4, T5, T6, T7, T8>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, IQueryable<T>>>) Creates a new delegate that represents the compiled cache query. Declaration public static Func<T1, T2, T3, T4, T5, T6, T7, T8, IQueryCursor<T>> Compile<T, T1, T2, T3, T4, T5, T6, T7, T8>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, IQueryable<T>>> query) Parameters Type Name Description System.Linq.Expressions.Expression < System.Func <T1, T2, T3, T4, T5, T6, T7, T8, System.Linq.IQueryable <T>>> query The query to compile. Returns Type Description System.Func <T1, T2, T3, T4, T5, T6, T7, T8, IQueryCursor <T>> Delegate that represents the compiled cache query. Type Parameters Name Description T T1 T2 T3 T4 T5 T6 T7 T8"
  },
  "api/Apache.Ignite.Linq.CompiledQueryFunc-1.html": {
    "href": "api/Apache.Ignite.Linq.CompiledQueryFunc-1.html",
    "title": "Delegate CompiledQueryFunc<T> | Apache Ignite.NET",
    "keywords": "Delegate CompiledQueryFunc<T> Delegate for compiled query with arbitrary number of arguments. Namespace : Apache.Ignite.Linq Assembly : Apache.Ignite.Linq.dll Syntax public delegate IQueryCursor<T> CompiledQueryFunc<T>(params object[] args); Parameters Type Name Description System.Object [] args The arguments. Returns Type Description IQueryCursor <T> Query cursor. Type Parameters Name Description T Result type."
  },
  "api/Apache.Ignite.Linq.ICacheQueryable.html": {
    "href": "api/Apache.Ignite.Linq.ICacheQueryable.html",
    "title": "Interface ICacheQueryable | Apache Ignite.NET",
    "keywords": "Interface ICacheQueryable Common interface for cache queryables. Namespace : Apache.Ignite.Linq Assembly : Apache.Ignite.Linq.dll Syntax public interface ICacheQueryable Properties CacheName Gets the name of the cache that is associated with this query. Declaration string CacheName { get; } Property Value Type Description System.String The name of the cache. ElementType Gets the type of the element. Declaration Type ElementType { get; } Property Value Type Description System.Type Ignite Gets the Ignite instance associated with this query. Declaration [Obsolete(\"Deprecated, null for thin client.\")] IIgnite Ignite { get; } Property Value Type Description IIgnite Methods GetFieldsQuery() Returns fields query that represents current queryable. Declaration SqlFieldsQuery GetFieldsQuery() Returns Type Description SqlFieldsQuery Fields query that represents current queryable."
  },
  "api/Apache.Ignite.AspNet.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.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.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.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.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 Properties AffinityBackupFilter Gets or sets an optional backup filter. If provided, then backups will be selected from all nodes that pass this filter. First node being passed to this filter is a node being tested, and the second parameter is a list of nodes that are already assigned for a given partition (primary node is the first in the list). Note that AffinityBackupFilter is ignored when ExcludeNeighbors is true . Only one predefined implementation is supported for now: ClusterNodeAttributeAffinityBackupFilter . Declaration public IAffinityBackupFilter AffinityBackupFilter { get; set; } Property Value Type Description IAffinityBackupFilter Implements IAffinityFunction"
  },
  "api/Apache.Ignite.Core.Cache.CachePeekMode.html": {
    "href": "api/Apache.Ignite.Core.Cache.CachePeekMode.html",
    "title": "Enum CachePeekMode | Apache Ignite.NET",
    "keywords": "Enum CachePeekMode Enumeration of all supported cache peek modes. Namespace : Apache.Ignite.Core.Cache Assembly : Apache.Ignite.Core.dll Syntax [Flags] public enum CachePeekMode Fields Name Description All Peeks into all available cache storages. Backup Peek value from backup copies of partitioned cache only (skip near cache). In case of LOCAL cache, behaves as All mode. Near Peek into near cache only (don't peek into partitioned cache). In case of LOCAL cache, behaves as All mode. Offheap Peeks value from the off-heap storage only, without loading off-heap value into cache. Onheap Peeks value from the on-heap storage only. Platform Peeks value from local native .NET cache (see PlatformCacheConfiguration ). Primary Peek value from primary copy of partitioned cache only (skip near cache). In case of LOCAL cache, behaves as All mode."
  },
  "api/Apache.Ignite.Core.Cache.Configuration.CacheRebalanceMode.html": {
    "href": "api/Apache.Ignite.Core.Cache.Configuration.CacheRebalanceMode.html",
    "title": "Enum CacheRebalanceMode | Apache Ignite.NET",
    "keywords": "Enum CacheRebalanceMode Cache rebalance mode. When rebalancing is enabled (i.e. has value other than None ), distributed caches will attempt to rebalance all necessary values from other grid nodes. Replicated caches will try to load the full set of cache entries from other nodes, while partitioned caches will only load the entries for which current node is primary or backup. Note that rebalance mode only makes sense for Replicated and Partitioned caches. Caches with Local mode are local by definition and therefore cannot rebalance any values from neighboring nodes. Namespace : Apache.Ignite.Core.Cache.Configuration Assembly : Apache.Ignite.Core.dll Syntax public enum CacheRebalanceMode Fields Name Description Async Asynchronous rebalance mode. Distributed caches will start immediately and will load all necessary data from other available grid nodes in the background. None In this mode no rebalancing will take place which means that caches will be either loaded on demand from persistent store whenever data is accessed, or will be populated explicitly. Sync Synchronous rebalance mode. Distributed caches will not start until all necessary data is loaded from other available grid nodes."
  },
  "api/Apache.Ignite.Core.Cache.Configuration.PlatformCacheConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Cache.Configuration.PlatformCacheConfiguration.html",
    "title": "Class PlatformCacheConfiguration | Apache Ignite.NET",
    "keywords": "Class PlatformCacheConfiguration Native .NET cache configuration. Enables native .NET cache. Cache entries will be stored in deserialized form in CLR heap. When enabled on server nodes, all primary keys will be stored in platform memory as well. Same eviction policy applies to near cache entries for all keys on client nodes and non-primary keys on server nodes. Enabling this can greatly improve performance for key-value operations and scan queries, at the expense of RAM usage. Supported operations (async counterparts included): Get(TK) , TryGet(TK, out TV) GetAll(IEnumerable<TK>) ContainsKey(TK) , ContainsKeys(IEnumerable<TK>) LocalPeek(TK, CachePeekMode[]) , TryLocalPeek(TK, out TV, CachePeekMode[]) GetLocalEntries(CachePeekMode[]) GetLocalSize(CachePeekMode[]) Query(QueryBase) with ScanQuery<TK, TV> Inheritance System.Object PlatformCacheConfiguration Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Configuration Assembly : Apache.Ignite.Core.dll Syntax public class PlatformCacheConfiguration Constructors PlatformCacheConfiguration() Initializes a new instance of the PlatformCacheConfiguration class. Declaration public PlatformCacheConfiguration() Properties KeepBinary Gets or sets a value indicating whether platform cache should store keys and values in binary form. Declaration public bool KeepBinary { get; set; } Property Value Type Description System.Boolean KeyTypeName Gets or sets fully-qualified platform type name of the cache key used for the local map. When not set, object-based map is used, which can reduce performance and increase allocations due to boxing. Declaration public string KeyTypeName { get; set; } Property Value Type Description System.String ValueTypeName Gets or sets fully-qualified platform type name of the cache value used for the local map. When not set, object-based map is used, which can reduce performance and increase allocations due to boxing. Declaration public string ValueTypeName { get; set; } Property Value Type Description System.String"
  },
  "api/Apache.Ignite.Core.Cache.Event.CacheEntryEventType.html": {
    "href": "api/Apache.Ignite.Core.Cache.Event.CacheEntryEventType.html",
    "title": "Enum CacheEntryEventType | Apache Ignite.NET",
    "keywords": "Enum CacheEntryEventType Cache event type. Namespace : Apache.Ignite.Core.Cache.Event Assembly : Apache.Ignite.Core.dll Syntax public enum CacheEntryEventType Fields Name Description Created An event type indicating that the cache entry was created. Expired An event type indicating that the cache entry was removed by expiration policy. 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.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.ICache-2.html": {
    "href": "api/Apache.Ignite.Core.Cache.ICache-2.html",
    "title": "Interface ICache<TK, TV> | Apache Ignite.NET",
    "keywords": "Interface ICache<TK, TV> Main entry point for Ignite cache APIs. You can get a named cache by calling GetCache<TK, TV>(String) method. Cache API supports distributed transactions. All Get(...) , Put(...) , Replace(...) , and Remove(...) operations are transactional and will participate in an ongoing transaction, if any. Other methods like Peek(...) or various Contains(...) methods may be transaction-aware, i.e. check in-transaction entries first, but will not affect the current state of transaction. See ITransaction documentation for more information about transactions. Neither null keys or values are allowed to be stored in cache. If a null value happens to be in cache (e.g. after invalidation or remove), then cache will treat this case as there is no value at all. Note that cache is generic and you can only work with provided key and value types. If cache also contains keys or values of other types, any attempt to retrieve them will result in System.InvalidCastException . Use ICache<TK, TV> in order to work with entries of arbitrary types. All members are thread-safe and may be used concurrently from multiple threads. Inherited Members System.Collections.Generic.IEnumerable<Apache.Ignite.Core.Cache.ICacheEntry<TK, TV>>.GetEnumerator() System.Collections.IEnumerable.GetEnumerator() Namespace : Apache.Ignite.Core.Cache Assembly : Apache.Ignite.Core.dll Syntax public interface ICache<TK, TV> : IEnumerable<ICacheEntry<TK, TV>>, IEnumerable Type Parameters Name Description TK Key type. TV Value type. Properties Ignite Ignite hosting this cache. Declaration IIgnite Ignite { get; } Property Value Type Description IIgnite IsAllowAtomicOpsInTx Gets a value indicating whether to allow use atomic operations in transactions. Declaration [Obsolete(\"Not supported, will be removed in future releases.\")] bool IsAllowAtomicOpsInTx { get; } Property Value Type Description System.Boolean IsKeepBinary Gets a value indicating whether to keep values in binary form. Declaration bool IsKeepBinary { get; } Property Value Type Description System.Boolean Item[TK] Gets or sets a cache value with the specified key. Shortcut to Get(TK) and Put(TK, TV) Declaration TV this[TK key] { get; set; } Parameters Type Name Description TK key Key. Property Value Type Description TV Cache value with the specified key. Exceptions Type Condition System.Collections.Generic.KeyNotFoundException If the key is not present in the cache. Name Name of this cache ( null for default cache). Declaration string Name { get; } Property Value Type Description System.String Methods Clear() Clears the contents of the cache, without notifying listeners or CacheWriters. Declaration void Clear() Clear(TK) Clear entry from the cache and swap storage, without notifying listeners or CacheWriters. Entry is cleared only if it is not currently locked, and is not participating in a transaction. Declaration void Clear(TK key) Parameters Type Name Description TK key Key to clear. ClearAll(IEnumerable<TK>) Clear entries from the cache and swap storage, without notifying listeners or CacheWriters. Entry is cleared only if it is not currently locked, and is not participating in a transaction. Declaration void ClearAll(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys to clear. ClearAllAsync(IEnumerable<TK>) Clear entries from the cache and swap storage, without notifying listeners or CacheWriters. Entry is cleared only if it is not currently locked, and is not participating in a transaction. Declaration Task ClearAllAsync(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys to clear. Returns Type Description System.Threading.Tasks.Task ClearAsync() Clears the contents of the cache, without notifying listeners or CacheWriters. Declaration Task ClearAsync() Returns Type Description System.Threading.Tasks.Task ClearAsync(TK) Clear entry from the cache and swap storage, without notifying listeners or CacheWriters. Entry is cleared only if it is not currently locked, and is not participating in a transaction. Declaration Task ClearAsync(TK key) Parameters Type Name Description TK key Key to clear. Returns Type Description System.Threading.Tasks.Task ClearStatistics() Clears cluster statistics for this cache. Declaration void ClearStatistics() ContainsKey(TK) Check if cache contains mapping for this key. Declaration bool ContainsKey(TK key) Parameters Type Name Description TK key Key. Returns Type Description System.Boolean True if cache contains mapping for this key. ContainsKeyAsync(TK) Check if cache contains mapping for this key. Declaration Task<bool> ContainsKeyAsync(TK key) Parameters Type Name Description TK key Key. Returns Type Description System.Threading.Tasks.Task < System.Boolean > True if cache contains mapping for this key. ContainsKeys(IEnumerable<TK>) Check if cache contains mapping for these keys. Declaration bool ContainsKeys(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys. Returns Type Description System.Boolean True if cache contains mapping for all these keys. ContainsKeysAsync(IEnumerable<TK>) Check if cache contains mapping for these keys. Declaration Task<bool> ContainsKeysAsync(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys. Returns Type Description System.Threading.Tasks.Task < System.Boolean > True if cache contains mapping for all these keys. EnableStatistics(Boolean) Sets statistics (metrics) enabled flag cluster wide for this cache. Declaration void EnableStatistics(bool enabled) Parameters Type Name Description System.Boolean enabled Enabled flag Get(TK) Retrieves value mapped to the specified key from cache. If the value is not present in cache, then it will be looked up from swap storage. If it's not present in swap, or if swap is disable, and if read-through is allowed, value will be loaded from persistent store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration TV Get(TK key) Parameters Type Name Description TK key Key. Returns Type Description TV Value. Exceptions Type Condition System.Collections.Generic.KeyNotFoundException If the key is not present in the cache. GetAll(IEnumerable<TK>) Retrieves values mapped to the specified keys from cache. If some value is not present in cache, then it will be looked up from swap storage. If it's not present in swap, or if swap is disabled, and if read-through is allowed, value will be loaded from persistent store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration ICollection<ICacheEntry<TK, TV>> GetAll(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys. Returns Type Description System.Collections.Generic.ICollection < ICacheEntry <TK, TV>> Map of key-value pairs. GetAllAsync(IEnumerable<TK>) Retrieves values mapped to the specified keys from cache. If some value is not present in cache, then it will be looked up from swap storage. If it's not present in swap, or if swap is disabled, and if read-through is allowed, value will be loaded from persistent store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration Task<ICollection<ICacheEntry<TK, TV>>> GetAllAsync(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys. Returns Type Description System.Threading.Tasks.Task < System.Collections.Generic.ICollection < ICacheEntry <TK, TV>>> Map of key-value pairs. GetAndPut(TK, TV) Associates the specified value with the specified key in this cache, returning an existing value if one existed. Declaration CacheResult<TV> GetAndPut(TK key, TV val) Parameters Type Name Description TK key Key with which the specified value is to be associated. TV val Value to be associated with the specified key. Returns Type Description CacheResult <TV> The value associated with the key at the start of the operation. GetAndPutAsync(TK, TV) Associates the specified value with the specified key in this cache, returning an existing value if one existed. Declaration Task<CacheResult<TV>> GetAndPutAsync(TK key, TV val) Parameters Type Name Description TK key Key with which the specified value is to be associated. TV val Value to be associated with the specified key. Returns Type Description System.Threading.Tasks.Task < CacheResult <TV>> The value associated with the key at the start of the operation. GetAndPutIfAbsent(TK, TV) Stores given key-value pair in cache only if cache had no previous mapping for it. If cache previously contained value for the given key, then this value is returned. In case of PARTITIONED or REPLICATED caches, the value will be loaded from the primary node, which in its turn may load the value from the swap storage, and consecutively, if it's not in swap, from the underlying persistent storage. If the returned value is not needed, method putxIfAbsent() should be used instead of this one to avoid the overhead associated with returning of the previous value. If write-through is enabled, the stored value will be persisted to store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration CacheResult<TV> GetAndPutIfAbsent(TK key, TV val) Parameters Type Name Description TK key Key to store in cache. TV val Value to be associated with the given key. Returns Type Description CacheResult <TV> Previously contained value regardless of whether put happened or not. GetAndPutIfAbsentAsync(TK, TV) Stores given key-value pair in cache only if cache had no previous mapping for it. If cache previously contained value for the given key, then this value is returned. In case of PARTITIONED or REPLICATED caches, the value will be loaded from the primary node, which in its turn may load the value from the swap storage, and consecutively, if it's not in swap, from the underlying persistent storage. If the returned value is not needed, method putxIfAbsent() should be used instead of this one to avoid the overhead associated with returning of the previous value. If write-through is enabled, the stored value will be persisted to store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration Task<CacheResult<TV>> GetAndPutIfAbsentAsync(TK key, TV val) Parameters Type Name Description TK key Key to store in cache. TV val Value to be associated with the given key. Returns Type Description System.Threading.Tasks.Task < CacheResult <TV>> Previously contained value regardless of whether put happened or not. GetAndRemove(TK) Atomically removes the entry for a key only if currently mapped to some value. Declaration CacheResult<TV> GetAndRemove(TK key) Parameters Type Name Description TK key Key with which the specified value is associated. Returns Type Description CacheResult <TV> The value if one existed. GetAndRemoveAsync(TK) Atomically removes the entry for a key only if currently mapped to some value. Declaration Task<CacheResult<TV>> GetAndRemoveAsync(TK key) Parameters Type Name Description TK key Key with which the specified value is associated. Returns Type Description System.Threading.Tasks.Task < CacheResult <TV>> The value if one existed. GetAndReplace(TK, TV) Atomically replaces the value for a given key if and only if there is a value currently mapped by the key. Declaration CacheResult<TV> GetAndReplace(TK key, TV val) Parameters Type Name Description TK key Key with which the specified value is to be associated. TV val Value to be associated with the specified key. Returns Type Description CacheResult <TV> The previous value associated with the specified key. GetAndReplaceAsync(TK, TV) Atomically replaces the value for a given key if and only if there is a value currently mapped by the key. Declaration Task<CacheResult<TV>> GetAndReplaceAsync(TK key, TV val) Parameters Type Name Description TK key Key with which the specified value is to be associated. TV val Value to be associated with the specified key. Returns Type Description System.Threading.Tasks.Task < CacheResult <TV>> The previous value associated with the specified key. GetAsync(TK) Retrieves value mapped to the specified key from cache. If the value is not present in cache, then it will be looked up from swap storage. If it's not present in swap, or if swap is disable, and if read-through is allowed, value will be loaded from persistent store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration Task<TV> GetAsync(TK key) Parameters Type Name Description TK key Key. Returns Type Description System.Threading.Tasks.Task <TV> Value. Exceptions Type Condition System.Collections.Generic.KeyNotFoundException If the key is not present in the cache. GetConfiguration() Gets the cache configuration. Declaration CacheConfiguration GetConfiguration() Returns Type Description CacheConfiguration GetLocalEntries(CachePeekMode[]) Get local cache entries. Declaration IEnumerable<ICacheEntry<TK, TV>> GetLocalEntries(params CachePeekMode[] peekModes) Parameters Type Name Description CachePeekMode [] peekModes Peek modes. Returns Type Description System.Collections.Generic.IEnumerable < ICacheEntry <TK, TV>> Enumerable instance. GetLocalMetrics() Gets local snapshot metrics (statistics) for this cache. Declaration ICacheMetrics GetLocalMetrics() Returns Type Description ICacheMetrics Cache metrics. GetLocalSize(CachePeekMode[]) Gets the number of all entries cached on this node. Declaration int GetLocalSize(params CachePeekMode[] modes) Parameters Type Name Description CachePeekMode [] modes Optional peek modes. If not provided, then total cache size is returned. Returns Type Description System.Int32 Cache size on this node. GetLocalSizeLong(CachePeekMode[]) Gets the number of all entries cached on this node as long value. Declaration long GetLocalSizeLong(params CachePeekMode[] modes) Parameters Type Name Description CachePeekMode [] modes Optional peek modes. If not provided, then total cache size is returned. Returns Type Description System.Int64 Cache size on this node. GetLocalSizeLong(Int32, CachePeekMode[]) Gets the number of all entries in a partition cached on this node as long value. Declaration long GetLocalSizeLong(int partition, params CachePeekMode[] modes) Parameters Type Name Description System.Int32 partition Cache partition. CachePeekMode [] modes Optional peek modes. If not provided, then total cache size is returned. Returns Type Description System.Int64 Partition cache size on this node. GetLostPartitions() Gets lost partitions IDs. See also PartitionLossPolicy and ResetLostPartitions(IEnumerable<String>) . Declaration ICollection<int> GetLostPartitions() Returns Type Description System.Collections.Generic.ICollection < System.Int32 > GetMetrics() Gets global (whole cluster) snapshot metrics (statistics) for this cache. Declaration ICacheMetrics GetMetrics() Returns Type Description ICacheMetrics Cache metrics. GetMetrics(IClusterGroup) Gets global (whole cluster group) snapshot metrics (statistics) for this cache. Declaration ICacheMetrics GetMetrics(IClusterGroup clusterGroup) Parameters Type Name Description IClusterGroup clusterGroup The cluster group to get metrics for. Returns Type Description ICacheMetrics GetQueryMetrics() Gets query metrics. Declaration IQueryMetrics GetQueryMetrics() Returns Type Description IQueryMetrics Query metrics. GetSize(CachePeekMode[]) Gets the number of all entries cached across all nodes. NOTE: this operation is distributed and will query all participating nodes for their cache sizes. Declaration int GetSize(params CachePeekMode[] modes) Parameters Type Name Description CachePeekMode [] modes Optional peek modes. If not provided, then total cache size is returned. Returns Type Description System.Int32 Cache size across all nodes. GetSizeAsync(CachePeekMode[]) Gets the number of all entries cached across all nodes. NOTE: this operation is distributed and will query all participating nodes for their cache sizes. Declaration Task<int> GetSizeAsync(params CachePeekMode[] modes) Parameters Type Name Description CachePeekMode [] modes Optional peek modes. If not provided, then total cache size is returned. Returns Type Description System.Threading.Tasks.Task < System.Int32 > Cache size across all nodes. GetSizeLong(CachePeekMode[]) Gets the number of all entries cached across all nodes as long value. NOTE: this operation is distributed and will query all participating nodes for their cache sizes. Declaration long GetSizeLong(params CachePeekMode[] modes) Parameters Type Name Description CachePeekMode [] modes Optional peek modes. If not provided, then total cache size is returned. Returns Type Description System.Int64 Cache size across all nodes. GetSizeLong(Int32, CachePeekMode[]) Gets the number of all entries in partition cached across all nodes as long value. NOTE: this operation is distributed and will query all participating nodes for their cache sizes. Declaration long GetSizeLong(int partition, params CachePeekMode[] modes) Parameters Type Name Description System.Int32 partition Cache partition. CachePeekMode [] modes Optional peek modes. If not provided, then total cache size is returned. Returns Type Description System.Int64 Partition cache size across all nodes. GetSizeLongAsync(CachePeekMode[]) Gets the number of all entries cached across all nodes as long value. NOTE: this operation is distributed and will query all participating nodes for their cache sizes. Declaration Task<long> GetSizeLongAsync(params CachePeekMode[] modes) Parameters Type Name Description CachePeekMode [] modes Optional peek modes. If not provided, then total cache size is returned. Returns Type Description System.Threading.Tasks.Task < System.Int64 > Cache size across all nodes. GetSizeLongAsync(Int32, CachePeekMode[]) Gets the number of all entries in a partition cached across all nodes as long value. NOTE: this operation is distributed and will query all participating nodes for their cache sizes. Declaration Task<long> GetSizeLongAsync(int partition, params CachePeekMode[] modes) Parameters Type Name Description System.Int32 partition Cache partition. CachePeekMode [] modes Optional peek modes. If not provided, then total cache size is returned. Returns Type Description System.Threading.Tasks.Task < System.Int64 > Partition cache size across all nodes. Invoke<TArg, TRes>(TK, ICacheEntryProcessor<TK, TV, TArg, TRes>, TArg) Invokes an ICacheEntryProcessor<TK, TV, TArg, TRes> against the IMutableCacheEntry<TK, TV> specified by the provided key. If an entry does not exist for the specified key, an attempt is made to load it (if a loader is configured) or a surrogate entry, consisting of the key with a null value is used instead. Declaration TRes Invoke<TArg, TRes>(TK key, ICacheEntryProcessor<TK, TV, TArg, TRes> processor, TArg arg) Parameters Type Name Description TK key The key. ICacheEntryProcessor <TK, TV, TArg, TRes> processor The processor. TArg arg The argument. Returns Type Description TRes Result of the processing. Type Parameters Name Description TArg The type of the argument. TRes The type of the result. Exceptions Type Condition CacheEntryProcessorException If an exception has occured during processing. InvokeAll<TArg, TRes>(IEnumerable<TK>, ICacheEntryProcessor<TK, TV, TArg, TRes>, TArg) Invokes an ICacheEntryProcessor<TK, TV, TArg, TRes> against a set of keys. If an entry does not exist for the specified key, an attempt is made to load it (if a loader is configured) or a surrogate entry, consisting of the key with a null value is used instead. The order that the entries for the keys are processed is undefined. Implementations may choose to process the entries in any order, including concurrently. Furthermore there is no guarantee implementations will use the same processor instance to process each entry, as the case may be in a non-local cache topology. Keys are locked in the order in which they are enumerated. It is caller's responsibility to make sure keys always follow same order, such as by using System.Collections.Generic.SortedSet`1 . Using unordered collection, such as System.Collections.Generic.HashSet`1 , while calling this method in parallel will lead to deadlock . Declaration ICollection<ICacheEntryProcessorResult<TK, TRes>> InvokeAll<TArg, TRes>(IEnumerable<TK> keys, ICacheEntryProcessor<TK, TV, TArg, TRes> processor, TArg arg) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys The keys. ICacheEntryProcessor <TK, TV, TArg, TRes> processor The processor. TArg arg The argument. Returns Type Description System.Collections.Generic.ICollection < ICacheEntryProcessorResult <TK, TRes>> Map of ICacheEntryProcessorResult<TK, T> of the processing per key, if any, defined by the ICacheEntryProcessor<TK, TV, TArg, TRes> implementation. No mappings will be returned for processors that return a null value for a key. Type Parameters Name Description TArg The type of the argument. TRes The type of the result. Exceptions Type Condition CacheEntryProcessorException If an exception has occured during processing. InvokeAllAsync<TArg, TRes>(IEnumerable<TK>, ICacheEntryProcessor<TK, TV, TArg, TRes>, TArg) Invokes an ICacheEntryProcessor<TK, TV, TArg, TRes> against a set of keys. If an entry does not exist for the specified key, an attempt is made to load it (if a loader is configured) or a surrogate entry, consisting of the key with a null value is used instead. The order that the entries for the keys are processed is undefined. Implementations may choose to process the entries in any order, including concurrently. Furthermore there is no guarantee implementations will use the same processor instance to process each entry, as the case may be in a non-local cache topology. Keys are locked in the order in which they are enumerated. It is caller's responsibility to make sure keys always follow same order, such as by using System.Collections.Generic.SortedSet`1 . Using unordered collection, such as System.Collections.Generic.HashSet`1 , while calling this method in parallel will lead to deadlock . Declaration Task<ICollection<ICacheEntryProcessorResult<TK, TRes>>> InvokeAllAsync<TArg, TRes>(IEnumerable<TK> keys, ICacheEntryProcessor<TK, TV, TArg, TRes> processor, TArg arg) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys The keys. ICacheEntryProcessor <TK, TV, TArg, TRes> processor The processor. TArg arg The argument. Returns Type Description System.Threading.Tasks.Task < System.Collections.Generic.ICollection < ICacheEntryProcessorResult <TK, TRes>>> Map of ICacheEntryProcessorResult<TK, T> of the processing per key, if any, defined by the ICacheEntryProcessor<TK, TV, TArg, TRes> implementation. No mappings will be returned for processors that return a null value for a key. Type Parameters Name Description TArg The type of the argument. TRes The type of the result. Exceptions Type Condition CacheEntryProcessorException If an exception has occured during processing. InvokeAsync<TArg, TRes>(TK, ICacheEntryProcessor<TK, TV, TArg, TRes>, TArg) Invokes an ICacheEntryProcessor<TK, TV, TArg, TRes> against the IMutableCacheEntry<TK, TV> specified by the provided key. If an entry does not exist for the specified key, an attempt is made to load it (if a loader is configured) or a surrogate entry, consisting of the key with a null value is used instead. Declaration Task<TRes> InvokeAsync<TArg, TRes>(TK key, ICacheEntryProcessor<TK, TV, TArg, TRes> processor, TArg arg) Parameters Type Name Description TK key The key. ICacheEntryProcessor <TK, TV, TArg, TRes> processor The processor. TArg arg The argument. Returns Type Description System.Threading.Tasks.Task <TRes> Result of the processing. Type Parameters Name Description TArg The type of the argument. TRes The type of the result. Exceptions Type Condition CacheEntryProcessorException If an exception has occured during processing. IsEmpty() Checks whether this cache contains no key-value mappings. Semantically equals to ICache.Size(CachePeekMode.PRIMARY) == 0 . Declaration bool IsEmpty() Returns Type Description System.Boolean IsLocalLocked(TK, Boolean) Checks if specified key is locked. This is a local operation and does not involve any network trips or access to persistent storage in any way. Declaration bool IsLocalLocked(TK key, bool byCurrentThread) Parameters Type Name Description TK key Key to check. System.Boolean byCurrentThread If true, checks that current thread owns a lock on this key; otherwise, checks that any thread on any node owns a lock on this key. Returns Type Description System.Boolean True if specified key is locked; otherwise, false. LoadAll(IEnumerable<TK>, Boolean) Loads the specified entries into the cache using the configured ICacheStore > for the given keys. If an entry for a key already exists in the cache, a value will be loaded if and only if replaceExistingValues is true. If no loader is configured for the cache, no objects will be loaded. Declaration void LoadAll(IEnumerable<TK> keys, bool replaceExistingValues) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys The keys to load. System.Boolean replaceExistingValues if set to true , existing cache values will be replaced by those loaded from a cache store. LoadAllAsync(IEnumerable<TK>, Boolean) Asynchronously loads the specified entries into the cache using the configured ICacheStore > for the given keys. If an entry for a key already exists in the cache, a value will be loaded if and only if replaceExistingValues is true. If no loader is configured for the cache, no objects will be loaded. Declaration Task LoadAllAsync(IEnumerable<TK> keys, bool replaceExistingValues) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys The keys to load. System.Boolean replaceExistingValues if set to true , existing cache values will be replaced by those loaded from a cache store. Returns Type Description System.Threading.Tasks.Task LoadCache(ICacheEntryFilter<TK, TV>, Object[]) Executes LocalLoadCache(ICacheEntryFilter<TK, TV>, Object[]) on all cache nodes. Declaration void LoadCache(ICacheEntryFilter<TK, TV> p, params object[] args) Parameters Type Name Description ICacheEntryFilter <TK, TV> p Optional predicate. If provided, will be used to filter values to be put into cache. System.Object [] args Optional user arguments to be passed into LoadCache(Action<TK, TV>, Object[]) . LoadCacheAsync(ICacheEntryFilter<TK, TV>, Object[]) Executes LocalLoadCache(ICacheEntryFilter<TK, TV>, Object[]) on all cache nodes. Declaration Task LoadCacheAsync(ICacheEntryFilter<TK, TV> p, params object[] args) Parameters Type Name Description ICacheEntryFilter <TK, TV> p Optional predicate. If provided, will be used to filter values to be put into cache. System.Object [] args Optional user arguments to be passed into LoadCache(Action<TK, TV>, Object[]) . Returns Type Description System.Threading.Tasks.Task LocalClear(TK) Clear entry from the cache and swap storage, without notifying listeners or CacheWriters. Entry is cleared only if it is not currently locked, and is not participating in a transaction. Note that this operation is local as it merely clears an entry from local cache, it does not remove entries from remote caches. Declaration void LocalClear(TK key) Parameters Type Name Description TK key Key to clear. LocalClearAll(IEnumerable<TK>) Clear entries from the cache and swap storage, without notifying listeners or CacheWriters. Entry is cleared only if it is not currently locked, and is not participating in a transaction. Note that this operation is local as it merely clears entries from local cache, it does not remove entries from remote caches. Declaration void LocalClearAll(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys to clear. LocalEvict(IEnumerable<TK>) Attempts to evict all entries associated with keys. Note, that entry will be evicted only if it's not used (not participating in any locks or transactions). Declaration void LocalEvict(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys to evict from cache. LocalLoadCache(ICacheEntryFilter<TK, TV>, Object[]) Delegates to LoadCache(Action<TK, TV>, Object[]) method to load state from the underlying persistent storage. The loaded values will then be given to the optionally passed in predicate, and, if the predicate returns true, will be stored in cache. If predicate is null, then all loaded values will be stored in cache. Declaration void LocalLoadCache(ICacheEntryFilter<TK, TV> p, params object[] args) Parameters Type Name Description ICacheEntryFilter <TK, TV> p Optional predicate. If provided, will be used to filter values to be put into cache. System.Object [] args Optional user arguments to be passed into LoadCache(Action<TK, TV>, Object[]) . LocalLoadCacheAsync(ICacheEntryFilter<TK, TV>, Object[]) Delegates to LoadCache(Action<TK, TV>, Object[]) method to load state from the underlying persistent storage. The loaded values will then be given to the optionally passed in predicate, and, if the predicate returns true, will be stored in cache. If predicate is null, then all loaded values will be stored in cache. Declaration Task LocalLoadCacheAsync(ICacheEntryFilter<TK, TV> p, params object[] args) Parameters Type Name Description ICacheEntryFilter <TK, TV> p Optional predicate. If provided, will be used to filter values to be put into cache. System.Object [] args Optional user arguments to be passed into LoadCache(Action<TK, TV>, Object[]) . Returns Type Description System.Threading.Tasks.Task LocalPeek(TK, CachePeekMode[]) Peeks at cached value using optional set of peek modes. This method will sequentially iterate over given peek modes, and try to peek at value using each peek mode. Once a non-null value is found, it will be immediately returned. This method does not participate in any transactions, however, it may peek at transactional value depending on the peek modes used. If key is not present in cache, KeyNotFoundException will be thrown. Declaration TV LocalPeek(TK key, params CachePeekMode[] modes) Parameters Type Name Description TK key Key. CachePeekMode [] modes Peek modes. Returns Type Description TV Peeked value. LocalPreloadPartition(Int32) Efficiently preloads cache partition into page memory if it exists on the local node. This is useful for fast iteration over cache partition data if persistence is enabled and the data is \"cold\". Preload will reduce available amount of page memory for subsequent operations and may lead to earlier page replacement. This method is irrelevant for in-memory caches. Declaration bool LocalPreloadPartition(int partition) Parameters Type Name Description System.Int32 partition Partition number. Returns Type Description System.Boolean True if partition was preloaded, False if it doesn't belong to local node. Lock(TK) Creates an ICacheLock instance associated with passed key. This method does not acquire lock immediately, you have to call appropriate method on returned instance. Declaration ICacheLock Lock(TK key) Parameters Type Name Description TK key Key for lock. Returns Type Description ICacheLock New ICacheLock instance associated with passed key. LockAll(IEnumerable<TK>) Creates an ICacheLock instance associated with passed keys. This method does not acquire lock immediately, you have to call appropriate method on returned instance. Declaration ICacheLock LockAll(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys for lock. Returns Type Description ICacheLock New ICacheLock instance associated with passed keys. PreloadPartition(Int32) Efficiently preloads cache partition into page memory. This is useful for fast iteration over cache partition data if persistence is enabled and the data is \"cold\". Preload will reduce available amount of page memory for subsequent operations and may lead to earlier page replacement. This method is irrelevant for in-memory caches. Calling this method on an in-memory cache will result in exception. Declaration void PreloadPartition(int partition) Parameters Type Name Description System.Int32 partition Partition number. PreloadPartitionAsync(Int32) Efficiently preloads cache partition into page memory asynchronously. This is useful for fast iteration over cache partition data if persistence is enabled and the data is \"cold\". Preload will reduce available amount of page memory for subsequent operations and may lead to earlier page replacement. This method is irrelevant for in-memory caches. Calling this method on an in-memory cache will result in exception. Declaration Task PreloadPartitionAsync(int partition) Parameters Type Name Description System.Int32 partition Partition number. Returns Type Description System.Threading.Tasks.Task Task. Put(TK, TV) Associates the specified value with the specified key in the cache. If the cache previously contained a mapping for the key, the old value is replaced by the specified value. Declaration void Put(TK key, TV val) Parameters Type Name Description TK key Key with which the specified value is to be associated. TV val Value to be associated with the specified key. PutAll(IEnumerable<KeyValuePair<TK, TV>>) Stores given key-value pairs in cache. If write-through is enabled, the stored values will be persisted to store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Keys are locked in the order in which they are enumerated. It is caller's responsibility to make sure keys always follow same order, such as by using System.Collections.Generic.SortedDictionary`2 . Using unordered dictionary, such as System.Collections.Generic.Dictionary`2 , while calling this method in parallel will lead to deadlock . Declaration void PutAll(IEnumerable<KeyValuePair<TK, TV>> vals) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair <TK, TV>> vals Key-value pairs to store in cache. PutAllAsync(IEnumerable<KeyValuePair<TK, TV>>) Stores given key-value pairs in cache. If write-through is enabled, the stored values will be persisted to store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Keys are locked in the order in which they are enumerated. It is caller's responsibility to make sure keys always follow same order, such as by using System.Collections.Generic.SortedDictionary`2 . Using unordered dictionary, such as System.Collections.Generic.Dictionary`2 , while calling this method in parallel will lead to deadlock . Declaration Task PutAllAsync(IEnumerable<KeyValuePair<TK, TV>> vals) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair <TK, TV>> vals Key-value pairs to store in cache. Returns Type Description System.Threading.Tasks.Task PutAsync(TK, TV) Associates the specified value with the specified key in the cache. If the cache previously contained a mapping for the key, the old value is replaced by the specified value. Declaration Task PutAsync(TK key, TV val) Parameters Type Name Description TK key Key with which the specified value is to be associated. TV val Value to be associated with the specified key. Returns Type Description System.Threading.Tasks.Task PutIfAbsent(TK, TV) Atomically associates the specified key with the given value if it is not already associated with a value. Declaration bool PutIfAbsent(TK key, TV val) Parameters Type Name Description TK key Key with which the specified value is to be associated. TV val Value to be associated with the specified key. Returns Type Description System.Boolean True if a value was set. PutIfAbsentAsync(TK, TV) Atomically associates the specified key with the given value if it is not already associated with a value. Declaration Task<bool> PutIfAbsentAsync(TK key, TV val) Parameters Type Name Description TK key Key with which the specified value is to be associated. TV val Value to be associated with the specified key. Returns Type Description System.Threading.Tasks.Task < System.Boolean > True if a value was set. Query(QueryBase) Queries cache. Declaration IQueryCursor<ICacheEntry<TK, TV>> Query(QueryBase qry) Parameters Type Name Description QueryBase qry Query. Returns Type Description IQueryCursor < ICacheEntry <TK, TV>> Cursor. Query(SqlFieldsQuery) Queries separate entry fields. Declaration IFieldsQueryCursor Query(SqlFieldsQuery qry) Parameters Type Name Description SqlFieldsQuery qry SQL fields query. Returns Type Description IFieldsQueryCursor Cursor. QueryContinuous(ContinuousQuery<TK, TV>) Start continuous query execution. Declaration IContinuousQueryHandle QueryContinuous(ContinuousQuery<TK, TV> qry) Parameters Type Name Description ContinuousQuery <TK, TV> qry Continuous query. Returns Type Description IContinuousQueryHandle Handle to stop query execution. QueryContinuous(ContinuousQuery<TK, TV>, QueryBase) Start continuous query execution. Declaration IContinuousQueryHandle<ICacheEntry<TK, TV>> QueryContinuous(ContinuousQuery<TK, TV> qry, QueryBase initialQry) Parameters Type Name Description ContinuousQuery <TK, TV> qry Continuous query. QueryBase initialQry The initial query. This query will be executed before continuous listener is registered which allows to iterate through entries which have already existed at the time continuous query is executed. Returns Type Description IContinuousQueryHandle < ICacheEntry <TK, TV>> Handle to get initial query cursor or stop query execution. QueryContinuous(ContinuousQuery<TK, TV>, SqlFieldsQuery) Start continuous query execution. Declaration IContinuousQueryHandleFields QueryContinuous(ContinuousQuery<TK, TV> qry, SqlFieldsQuery initialQry) Parameters Type Name Description ContinuousQuery <TK, TV> qry Continuous query. SqlFieldsQuery initialQry The initial fields query. This query will be executed before continuous listener is registered which allows to iterate through entries which have already existed at the time continuous query is executed. Returns Type Description IContinuousQueryHandleFields Handle to get initial query cursor or stop query execution. QueryFields(SqlFieldsQuery) Queries separate entry fields. Declaration [Obsolete(\"Use Query(SqlFieldsQuery qry) instead.\")] IQueryCursor<IList> QueryFields(SqlFieldsQuery qry) Parameters Type Name Description SqlFieldsQuery qry SQL fields query. Returns Type Description IQueryCursor < System.Collections.IList > Cursor. Rebalance() Rebalances cache partitions. This method is usually used when rebalanceDelay configuration parameter has non-zero value. When many nodes are started or stopped almost concurrently, it is more efficient to delay rebalancing until the node topology is stable to make sure that no redundant re-partitioning happens. In case of partitioned caches, for better efficiency user should usually make sure that new nodes get placed on the same place of consistent hash ring as the left nodes, and that nodes are restarted before rebalanceDelay expires. Declaration Task Rebalance() Returns Type Description System.Threading.Tasks.Task Task that will be completed when rebalancing is finished. Remove(TK) Removes given key mapping from cache. If cache previously contained value for the given key, then this value is returned. In case of PARTITIONED or REPLICATED caches, the value will be loaded from the primary node, which in its turn may load the value from the disk-based swap storage, and consecutively, if it's not in swap, from the underlying persistent storage. If the returned value is not needed, method removex() should always be used instead of this one to avoid the overhead associated with returning of the previous value. If write-through is enabled, the value will be removed from store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration bool Remove(TK key) Parameters Type Name Description TK key Key whose mapping is to be removed from cache. Returns Type Description System.Boolean False if there was no matching key. Remove(TK, TV) Removes given key mapping from cache if one exists and value is equal to the passed in value. If write-through is enabled, the value will be removed from store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration bool Remove(TK key, TV val) Parameters Type Name Description TK key Key whose mapping is to be removed from cache. TV val Value to match against currently cached value. Returns Type Description System.Boolean True if entry was removed, false otherwise. RemoveAll() Removes all mappings from cache. If write-through is enabled, the value will be removed from store. This method is not transactional. Declaration void RemoveAll() RemoveAll(IEnumerable<TK>) Removes given key mappings from cache. If write-through is enabled, the value will be removed from store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Keys are locked in the order in which they are enumerated. It is caller's responsibility to make sure keys always follow same order, such as by using System.Collections.Generic.SortedSet`1 . Using unordered collection, such as System.Collections.Generic.HashSet`1 , while calling this method in parallel will lead to deadlock . Declaration void RemoveAll(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys whose mappings are to be removed from cache. RemoveAllAsync() Removes all mappings from cache. If write-through is enabled, the value will be removed from store. This method is not transactional. Declaration Task RemoveAllAsync() Returns Type Description System.Threading.Tasks.Task RemoveAllAsync(IEnumerable<TK>) Removes given key mappings from cache. If write-through is enabled, the value will be removed from store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Keys are locked in the order in which they are enumerated. It is caller's responsibility to make sure keys always follow same order, such as by using System.Collections.Generic.SortedSet`1 . Using unordered collection, such as System.Collections.Generic.HashSet`1 , while calling this method in parallel will lead to deadlock . Declaration Task RemoveAllAsync(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys whose mappings are to be removed from cache. Returns Type Description System.Threading.Tasks.Task RemoveAsync(TK) Removes given key mapping from cache. If cache previously contained value for the given key, then this value is returned. In case of PARTITIONED or REPLICATED caches, the value will be loaded from the primary node, which in its turn may load the value from the disk-based swap storage, and consecutively, if it's not in swap, from the underlying persistent storage. If the returned value is not needed, method removex() should always be used instead of this one to avoid the overhead associated with returning of the previous value. If write-through is enabled, the value will be removed from store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration Task<bool> RemoveAsync(TK key) Parameters Type Name Description TK key Key whose mapping is to be removed from cache. Returns Type Description System.Threading.Tasks.Task < System.Boolean > False if there was no matching key. RemoveAsync(TK, TV) Removes given key mapping from cache if one exists and value is equal to the passed in value. If write-through is enabled, the value will be removed from store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration Task<bool> RemoveAsync(TK key, TV val) Parameters Type Name Description TK key Key whose mapping is to be removed from cache. TV val Value to match against currently cached value. Returns Type Description System.Threading.Tasks.Task < System.Boolean > True if entry was removed, false otherwise. Replace(TK, TV) Stores given key-value pair in cache only if there is a previous mapping for it. If cache previously contained value for the given key, then this value is returned. In case of PARTITIONED or REPLICATED caches, the value will be loaded from the primary node, which in its turn may load the value from the swap storage, and consecutively, if it's not in swap, rom the underlying persistent storage. If write-through is enabled, the stored value will be persisted to store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration bool Replace(TK key, TV val) Parameters Type Name Description TK key Key to store in cache. TV val Value to be associated with the given key. Returns Type Description System.Boolean True if the value was replaced. Replace(TK, TV, TV) Stores given key-value pair in cache only if only if the previous value is equal to the old value passed as argument. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration bool Replace(TK key, TV oldVal, TV newVal) Parameters Type Name Description TK key Key to store in cache. TV oldVal Old value to match. TV newVal Value to be associated with the given key. Returns Type Description System.Boolean True if replace happened, false otherwise. ReplaceAsync(TK, TV) Stores given key-value pair in cache only if there is a previous mapping for it. If cache previously contained value for the given key, then this value is returned. In case of PARTITIONED or REPLICATED caches, the value will be loaded from the primary node, which in its turn may load the value from the swap storage, and consecutively, if it's not in swap, rom the underlying persistent storage. If write-through is enabled, the stored value will be persisted to store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration Task<bool> ReplaceAsync(TK key, TV val) Parameters Type Name Description TK key Key to store in cache. TV val Value to be associated with the given key. Returns Type Description System.Threading.Tasks.Task < System.Boolean > True if the value was replaced. ReplaceAsync(TK, TV, TV) Stores given key-value pair in cache only if only if the previous value is equal to the old value passed as argument. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration Task<bool> ReplaceAsync(TK key, TV oldVal, TV newVal) Parameters Type Name Description TK key Key to store in cache. TV oldVal Old value to match. TV newVal Value to be associated with the given key. Returns Type Description System.Threading.Tasks.Task < System.Boolean > True if replace happened, false otherwise. ResetQueryMetrics() Reset query metrics. Declaration void ResetQueryMetrics() TryGet(TK, out TV) Retrieves value mapped to the specified key from cache. If the value is not present in cache, then it will be looked up from swap storage. If it's not present in swap, or if swap is disable, and if read-through is allowed, value will be loaded from persistent store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration bool TryGet(TK key, out TV value) Parameters Type Name Description TK key Key. TV value When this method returns, the value associated with the specified key, if the key is found; otherwise, the default value for the type of the value parameter. This parameter is passed uninitialized. Returns Type Description System.Boolean true if the cache contains an element with the specified key; otherwise, false. TryGetAsync(TK) Retrieves value mapped to the specified key from cache. If the value is not present in cache, then it will be looked up from swap storage. If it's not present in swap, or if swap is disable, and if read-through is allowed, value will be loaded from persistent store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration Task<CacheResult<TV>> TryGetAsync(TK key) Parameters Type Name Description TK key Key. Returns Type Description System.Threading.Tasks.Task < CacheResult <TV>> CacheResult<T> containing a bool success flag and a value. TryLocalPeek(TK, out TV, CachePeekMode[]) Peeks at cached value using optional set of peek modes. This method will sequentially iterate over given peek modes, and try to peek at value using each peek mode. Once a non-null value is found, it will be immediately returned. This method does not participate in any transactions, however, it may peek at transactional value depending on the peek modes used. Declaration bool TryLocalPeek(TK key, out TV value, params CachePeekMode[] modes) Parameters Type Name Description TK key Key. TV value When this method returns, the value associated with the specified key, if the key is found; otherwise, the default value for the type of the value parameter. This parameter is passed uninitialized. CachePeekMode [] modes Peek modes. Returns Type Description System.Boolean true if the cache contains an element with the specified key; otherwise, false. WithAllowAtomicOpsInTx() Get another cache instance with operations allowed in transactions. Only atomic caches need this. Transactional caches already available for transactions. Declaration [Obsolete(\"Not supported, will be removed in future releases.\")] ICache<TK, TV> WithAllowAtomicOpsInTx() Returns Type Description ICache <TK, TV> Cache allowed to use in transactions. WithExpiryPolicy(IExpiryPolicy) Returns cache with the specified expired policy set. This policy will be used for each operation invoked on the returned cache. Expiry durations for each operation are calculated only once and then used as constants. Please consider this when implementing custom expiry policy implementations. Declaration ICache<TK, TV> WithExpiryPolicy(IExpiryPolicy plc) Parameters Type Name Description IExpiryPolicy plc Expiry policy to use. Returns Type Description ICache <TK, TV> Cache instance with the specified expiry policy set. WithKeepBinary<TK1, TV1>() Gets cache with KeepBinary mode enabled, changing key and/or value types if necessary. You can only change key/value types when transitioning from non-binary to binary cache; Changing type of binary cache is not allowed and will throw an System.InvalidOperationException Declaration ICache<TK1, TV1> WithKeepBinary<TK1, TV1>() Returns Type Description ICache <TK1, TV1> Cache instance with binary mode enabled. Type Parameters Name Description TK1 Key type in binary mode. TV1 Value type in binary mode. WithNoRetries() Get another cache instance with no-retries behavior enabled. Declaration ICache<TK, TV> WithNoRetries() Returns Type Description ICache <TK, TV> Cache with no-retries behavior enabled. WithPartitionRecover() Gets an instance of cache that will be allowed to execute cache operations (read, write) regardless of partition loss policy. Declaration ICache<TK, TV> WithPartitionRecover() Returns Type Description ICache <TK, TV> Cache without partition loss protection. WithSkipStore() Get another cache instance with read-through and write-through behavior disabled. Declaration ICache<TK, TV> WithSkipStore() Returns Type Description ICache <TK, TV> Cache with read-through and write-through behavior disabled. Extension Methods CacheLinqExtensions.AsCacheQueryable<TKey, TValue>(ICache<TKey, TValue>) CacheLinqExtensions.AsCacheQueryable<TKey, TValue>(ICache<TKey, TValue>, Boolean) CacheLinqExtensions.AsCacheQueryable<TKey, TValue>(ICache<TKey, TValue>, Boolean, String) CacheLinqExtensions.AsCacheQueryable<TKey, TValue>(ICache<TKey, TValue>, QueryOptions)"
  },
  "api/Apache.Ignite.Core.Cache.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 Key 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.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.IContinuousQueryHandleFields.html": {
    "href": "api/Apache.Ignite.Core.Cache.Query.Continuous.IContinuousQueryHandleFields.html",
    "title": "Interface IContinuousQueryHandleFields | Apache Ignite.NET",
    "keywords": "Interface IContinuousQueryHandleFields Represents a continuous query handle for SqlFieldsQuery used as initial query. Inherited Members System.IDisposable.Dispose() Namespace : Apache.Ignite.Core.Cache.Query.Continuous Assembly : Apache.Ignite.Core.dll Syntax public interface IContinuousQueryHandleFields : IContinuousQueryHandle, IDisposable Methods GetInitialQueryCursor() Gets the initial query cursor. Can be called only once, throws exception on consequent calls. Declaration IFieldsQueryCursor GetInitialQueryCursor() Returns Type Description IFieldsQueryCursor Initial query cursor."
  },
  "api/Apache.Ignite.Core.Cache.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 arguments passed to LocalLoadCache(ICacheEntryFilter<TK, TV>, Object[]) method. SessionEnd(Boolean) Tells store to commit or rollback a transaction depending on the value of the commit parameter. Declaration public virtual void SessionEnd(bool commit) Parameters Type Name Description System.Boolean commit True if transaction should commit, false for rollback. Write(TK, TV) Write the specified value under the specified key to the external resource. This method is intended to support both key/value creation and value update. Declaration public abstract void Write(TK key, TV val) Parameters Type Name Description TK key Key to write. TV val Value to write. WriteAll(IEnumerable<KeyValuePair<TK, TV>>) Writes all. Declaration public virtual void WriteAll(IEnumerable<KeyValuePair<TK, TV>> entries) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair <TK, TV>> entries The map. Implements ICacheStore<TK, TV> ICacheStore"
  },
  "api/Apache.Ignite.Core.Client.Cache.Query.Continuous.html": {
    "href": "api/Apache.Ignite.Core.Client.Cache.Query.Continuous.html",
    "title": "Namespace Apache.Ignite.Core.Client.Cache.Query.Continuous | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Client.Cache.Query.Continuous Classes ContinuousQueryClient Thin client continuous query base class, see ContinuousQueryClient<TK, TV> . ContinuousQueryClient<TK, TV> API for configuring continuous cache queries in thin client. Continuous queries allow to register a remote filter and a listener for cache update events. If an update event passes the filter, it will be sent to the client. To execute the query use method QueryContinuous(ContinuousQueryClient<TK, TV>) . ContinuousQueryClientDisconnectedEventArgs Provides data for the Disconnected event. Interfaces IContinuousQueryHandleClient Represents a continuous query handle. Call System.IDisposable.Dispose() to stop the continuous query."
  },
  "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.Cache.Configuration.CacheConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Cache.Configuration.CacheConfiguration.html",
    "title": "Class CacheConfiguration | Apache Ignite.NET",
    "keywords": "Class CacheConfiguration Defines grid cache configuration. Inheritance System.Object CacheConfiguration Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Configuration Assembly : Apache.Ignite.Core.dll Syntax public class CacheConfiguration : IBinaryRawWriteAware<BinaryWriter> Constructors CacheConfiguration() Initializes a new instance of the CacheConfiguration class. Declaration public CacheConfiguration() CacheConfiguration(CacheConfiguration) Initializes a new instance of the CacheConfiguration class, performing a deep copy of specified cache configuration. Declaration public CacheConfiguration(CacheConfiguration other) Parameters Type Name Description CacheConfiguration other The other configuration to perform deep copy from. CacheConfiguration(String) Initializes a new instance of the CacheConfiguration class. Declaration public CacheConfiguration(string name) Parameters Type Name Description System.String name Cache name. CacheConfiguration(String, QueryEntity[]) Initializes a new instance of the CacheConfiguration class. Declaration public CacheConfiguration(string name, params QueryEntity[] queryEntities) Parameters Type Name Description System.String name Cache name. QueryEntity [] queryEntities Query entities. CacheConfiguration(String, Type[]) Initializes a new instance of the CacheConfiguration class and populates QueryEntities according to provided query types. This constructor is depricated, please use CacheConfiguration(String, QueryEntity[]) Declaration [Obsolete(\"This constructor is deprecated, please use CacheConfiguration(string, QueryEntity[]) instead.\")] public CacheConfiguration(string name, params Type[] queryTypes) Parameters Type Name Description System.String name Cache name. System.Type [] queryTypes Collection of types to be registered as query entities. These types should use QuerySqlFieldAttribute to configure query fields and properties. Fields DefaultAtomicityMode Default atomicity mode. Declaration public const CacheAtomicityMode DefaultAtomicityMode = CacheAtomicityMode.Atomic Field Value Type Description CacheAtomicityMode DefaultBackups Default number of backups. Declaration public const int DefaultBackups = 0 Field Value Type Description System.Int32 DefaultCacheMode Default caching mode. Declaration public const CacheMode DefaultCacheMode = CacheMode.Partitioned Field Value Type Description CacheMode DefaultCacheSize Default cache size to use with eviction policy. Declaration public const int DefaultCacheSize = 100000 Field Value Type Description System.Int32 DefaultCopyOnRead Default value for 'copyOnRead' flag. Declaration public const bool DefaultCopyOnRead = true Field Value Type Description System.Boolean DefaultEagerTtl Default value for eager ttl flag. Declaration public const bool DefaultEagerTtl = true Field Value Type Description System.Boolean DefaultEncryptionEnabled Default value for EncryptionEnabled . Declaration public const bool DefaultEncryptionEnabled = false Field Value Type Description System.Boolean DefaultInvalidate Default value for 'invalidate' flag that indicates if this is invalidation-based cache. Declaration public const bool DefaultInvalidate = false Field Value Type Description System.Boolean DefaultKeepBinaryInStore Default value for KeepBinaryInStore property. Declaration public const bool DefaultKeepBinaryInStore = false Field Value Type Description System.Boolean DefaultKeepVinaryInStore Default value for keep portable in store behavior . Declaration [Obsolete(\"Use DefaultKeepBinaryInStore instead.\")] public const bool DefaultKeepVinaryInStore = true Field Value Type Description System.Boolean DefaultLoadPreviousValue Default value for load previous value flag. Declaration public const bool DefaultLoadPreviousValue = false Field Value Type Description System.Boolean DefaultLockTimeout Default lock timeout. Declaration public static readonly TimeSpan DefaultLockTimeout Field Value Type Description System.TimeSpan DefaultLongQueryWarningTimeout Default timeout after which long query warning will be printed. Declaration public static readonly TimeSpan DefaultLongQueryWarningTimeout Field Value Type Description System.TimeSpan DefaultMaxConcurrentAsyncOperations Default value for 'maxConcurrentAsyncOps'. Declaration public const int DefaultMaxConcurrentAsyncOperations = 500 Field Value Type Description System.Int32 DefaultMaxQueryIteratorsCount Default value for MaxQueryIteratorsCount . Declaration public const int DefaultMaxQueryIteratorsCount = 1024 Field Value Type Description System.Int32 DefaultPartitionLossPolicy Default value for PartitionLossPolicy . Declaration public const PartitionLossPolicy DefaultPartitionLossPolicy = PartitionLossPolicy.Ignore Field Value Type Description PartitionLossPolicy DefaultQueryDetailMetricsSize Default value for QueryDetailMetricsSize . Declaration public const int DefaultQueryDetailMetricsSize = 0 Field Value Type Description System.Int32 DefaultQueryParallelism Default value for QueryParallelism . Declaration public const int DefaultQueryParallelism = 1 Field Value Type Description System.Int32 DefaultReadFromBackup Default value for 'readFromBackup' flag. Declaration public const bool DefaultReadFromBackup = true Field Value Type Description System.Boolean DefaultReadThrough Default value for read-through behavior. Declaration public const bool DefaultReadThrough = false Field Value Type Description System.Boolean DefaultRebalanceBatchesPrefetchCount Default value for RebalanceBatchesPrefetchCount . Declaration public const long DefaultRebalanceBatchesPrefetchCount = 3L Field Value Type Description System.Int64 DefaultRebalanceBatchSize Default rebalance batch size in bytes. Declaration public const int DefaultRebalanceBatchSize = 524288 Field Value Type Description System.Int32 DefaultRebalanceMode Default rebalance mode for distributed cache. Declaration public const CacheRebalanceMode DefaultRebalanceMode = CacheRebalanceMode.Async Field Value Type Description CacheRebalanceMode DefaultRebalanceOrder Default value for RebalanceOrder . Declaration public const int DefaultRebalanceOrder = 0 Field Value Type Description System.Int32 DefaultRebalanceThreadPoolSize Default size of rebalance thread pool. Declaration public const int DefaultRebalanceThreadPoolSize = 4 Field Value Type Description System.Int32 DefaultRebalanceThrottle Time to wait between rebalance messages to avoid overloading CPU. Declaration public static readonly TimeSpan DefaultRebalanceThrottle Field Value Type Description System.TimeSpan DefaultRebalanceTimeout Default rebalance timeout. Declaration public static readonly TimeSpan DefaultRebalanceTimeout Field Value Type Description System.TimeSpan DefaultSqlIndexMaxInlineSize Default value for SqlIndexMaxInlineSize . Declaration public const int DefaultSqlIndexMaxInlineSize = -1 Field Value Type Description System.Int32 DefaultStoreConcurrentLoadAllThreshold Default value for StoreConcurrentLoadAllThreshold . Declaration public const int DefaultStoreConcurrentLoadAllThreshold = 5 Field Value Type Description System.Int32 DefaultWriteBehindBatchSize Default batch size for write-behind cache store. Declaration public const int DefaultWriteBehindBatchSize = 512 Field Value Type Description System.Int32 DefaultWriteBehindCoalescing Default value for WriteBehindCoalescing . Declaration public const bool DefaultWriteBehindCoalescing = true Field Value Type Description System.Boolean DefaultWriteBehindEnabled Default value for 'writeBehindEnabled' flag. Declaration public const bool DefaultWriteBehindEnabled = false Field Value Type Description System.Boolean DefaultWriteBehindFlushFrequency Default flush frequency for write-behind cache store. Declaration public static readonly TimeSpan DefaultWriteBehindFlushFrequency Field Value Type Description System.TimeSpan DefaultWriteBehindFlushSize Default flush size for write-behind cache store. Declaration public const int DefaultWriteBehindFlushSize = 10240 Field Value Type Description System.Int32 DefaultWriteBehindFlushThreadCount Default count of flush threads for write-behind cache store. Declaration public const int DefaultWriteBehindFlushThreadCount = 1 Field Value Type Description System.Int32 DefaultWriteSynchronizationMode Default value for WriteSynchronizationMode property. Declaration public const CacheWriteSynchronizationMode DefaultWriteSynchronizationMode = CacheWriteSynchronizationMode.PrimarySync Field Value Type Description CacheWriteSynchronizationMode DefaultWriteThrough Default value for write-through behavior. Declaration public const bool DefaultWriteThrough = false Field Value Type Description System.Boolean Properties AffinityFunction Gets or sets the affinity function to provide mapping from keys to nodes. Predefined implementations: RendezvousAffinityFunction . Declaration public IAffinityFunction AffinityFunction { get; set; } Property Value Type Description IAffinityFunction AtomicityMode Gets or sets cache atomicity mode. Declaration public CacheAtomicityMode AtomicityMode { get; set; } Property Value Type Description CacheAtomicityMode Backups Gets or sets number of nodes used to back up single partition for Partitioned cache. Declaration public int Backups { get; set; } Property Value Type Description System.Int32 CacheMode Gets or sets caching mode to use. Declaration public CacheMode CacheMode { get; set; } Property Value Type Description CacheMode CacheStoreFactory Gets or sets the factory for underlying persistent storage for read-through and write-through operations. See ReadThrough and WriteThrough properties to enable read-through and write-through behavior so that cache store is invoked on get and/or put operations. If both ReadThrough and WriteThrough are false , cache store will be invoked only on LoadCache(ICacheEntryFilter<TK, TV>, Object[]) calls. Declaration public IFactory<ICacheStore> CacheStoreFactory { get; set; } Property Value Type Description IFactory < ICacheStore > CopyOnRead Gets or sets flag indicating whether copy of the value stored in cache should be created for cache operation implying return value. Declaration public bool CopyOnRead { get; set; } Property Value Type Description System.Boolean DataRegionName Gets or sets the name of the data region, see DataRegionConfiguration . Declaration public string DataRegionName { get; set; } Property Value Type Description System.String EagerTtl Gets or sets flag indicating whether expired cache entries will be eagerly removed from cache. When set to false, expired entries will be removed on next entry access. Declaration public bool EagerTtl { get; set; } Property Value Type Description System.Boolean EnableStatistics Gets or sets a value indicating whether statistics gathering is enabled on a cache. These statistics can be retrieved via GetMetrics() . Declaration public bool EnableStatistics { get; set; } Property Value Type Description System.Boolean EncryptionEnabled Gets or sets encryption flag. Default is false. Declaration public bool EncryptionEnabled { get; set; } Property Value Type Description System.Boolean EvictionPolicy Gets or sets the eviction policy. Null value means disabled evictions. Declaration public IEvictionPolicy EvictionPolicy { get; set; } Property Value Type Description IEvictionPolicy ExpiryPolicyFactory Gets or sets the factory for IExpiryPolicy to be used for all cache operations, unless WithExpiryPolicy(IExpiryPolicy) is called. Default is null, which means no expiration. Declaration public IFactory<IExpiryPolicy> ExpiryPolicyFactory { get; set; } Property Value Type Description IFactory < IExpiryPolicy > GroupName Gets or sets the cache group name. Caches with the same group name share single underlying 'physical' cache (partition set), but are logically isolated. Since underlying cache is shared, the following configuration properties should be the same within group: AffinityFunction , CacheMode , PartitionLossPolicy , DataRegionName Grouping caches reduces overall overhead, since internal data structures are shared. Declaration public string GroupName { get; set; } Property Value Type Description System.String Invalidate Invalidation flag. If true, values will be invalidated (nullified) upon commit in near cache. Declaration public bool Invalidate { get; set; } Property Value Type Description System.Boolean KeepBinaryInStore Gets or sets the flag indicating whether ICacheStore is working with binary objects instead of deserialized objects. Declaration public bool KeepBinaryInStore { get; set; } Property Value Type Description System.Boolean KeyConfiguration Gets or sets the key configuration. Declaration public ICollection<CacheKeyConfiguration> KeyConfiguration { get; set; } Property Value Type Description System.Collections.Generic.ICollection < CacheKeyConfiguration > LoadPreviousValue Gets or sets flag indicating whether value should be loaded from store if it is not in the cache for the following cache operations: PutIfAbsent(TK, TV) Replace(TK, TV) Remove(TK) GetAndPut(TK, TV) GetAndRemove(TK) GetAndReplace(TK, TV) GetAndPutIfAbsent(TK, TV) Declaration public bool LoadPreviousValue { get; set; } Property Value Type Description System.Boolean LockTimeout Gets or sets default lock acquisition timeout. Declaration public TimeSpan LockTimeout { get; set; } Property Value Type Description System.TimeSpan LongQueryWarningTimeout Gets or sets the timeout after which long query warning will be printed. This property is obsolete, use LongQueryWarningTimeout instead. Declaration [Obsolete(\"Use IgniteConfiguration.LongQueryWarningTimeout instead.\")] public TimeSpan LongQueryWarningTimeout { get; set; } Property Value Type Description System.TimeSpan MaxConcurrentAsyncOperations Gets or sets maximum number of allowed concurrent asynchronous operations, 0 for unlimited. Declaration public int MaxConcurrentAsyncOperations { get; set; } Property Value Type Description System.Int32 MaxQueryIteratorsCount Gets or sets the maximum number of active query iterators. Declaration public int MaxQueryIteratorsCount { get; set; } Property Value Type Description System.Int32 MemoryPolicyName Gets or sets the name of the MemoryPolicyConfiguration for this cache. See MemoryConfiguration . Declaration [Obsolete(\"Use DataRegionName.\")] public string MemoryPolicyName { get; set; } Property Value Type Description System.String Name Gets or sets the cache name. Declaration public string Name { get; set; } Property Value Type Description System.String NearConfiguration Gets or sets the near cache configuration. Declaration public NearCacheConfiguration NearConfiguration { get; set; } Property Value Type Description NearCacheConfiguration NodeFilter Gets or sets the cluster node filter. Cache will be started only on nodes that match the filter. Only predefined implementations are supported: AttributeNodeFilter . Declaration public IClusterNodeFilter NodeFilter { get; set; } Property Value Type Description IClusterNodeFilter OnheapCacheEnabled Gets or sets a value indicating whether on-heap cache is enabled for the off-heap based page memory. Declaration public bool OnheapCacheEnabled { get; set; } Property Value Type Description System.Boolean PartitionLossPolicy Gets or sets the partition loss policy. This policy defines how Ignite will react to a situation when all nodes for some partition leave the cluster. Declaration public PartitionLossPolicy PartitionLossPolicy { get; set; } Property Value Type Description PartitionLossPolicy PlatformCacheConfiguration Gets or sets platform cache configuration. More details: PlatformCacheConfiguration . Declaration public PlatformCacheConfiguration PlatformCacheConfiguration { get; set; } Property Value Type Description PlatformCacheConfiguration PluginConfigurations Gets or sets the plugin configurations. Declaration public ICollection<ICachePluginConfiguration> PluginConfigurations { get; set; } Property Value Type Description System.Collections.Generic.ICollection < ICachePluginConfiguration > QueryDetailMetricsSize Gets or sets the size of the query detail metrics to be stored in memory. 0 means disabled metrics. Declaration public int QueryDetailMetricsSize { get; set; } Property Value Type Description System.Int32 QueryEntities Gets or sets the query entity configuration. Declaration public ICollection<QueryEntity> QueryEntities { get; set; } Property Value Type Description System.Collections.Generic.ICollection < QueryEntity > QueryParallelism Gets or sets the desired query parallelism within a single node. Query executor may or may not use this hint, depending on estimated query cost. Default is DefaultQueryParallelism . Declaration public int QueryParallelism { get; set; } Property Value Type Description System.Int32 ReadFromBackup Gets or sets flag indicating whether data can be read from backup. Declaration public bool ReadFromBackup { get; set; } Property Value Type Description System.Boolean ReadThrough Gets or sets a value indicating whether read-through should be enabled for cache operations. When in read-through mode, cache misses that occur due to cache entries not existing as a result of performing a \"get\" operations will appropriately cause the configured ICacheStore (see CacheStoreFactory ) to be invoked. Declaration public bool ReadThrough { get; set; } Property Value Type Description System.Boolean RebalanceBatchesPrefetchCount Gets or sets the rebalance batches prefetch count. Source node can provide more than one batch at rebalance start to improve performance. Default is DefaultRebalanceBatchesPrefetchCount , minimum is 2. Declaration public long RebalanceBatchesPrefetchCount { get; set; } Property Value Type Description System.Int64 RebalanceBatchSize Gets or sets size (in number bytes) to be loaded within a single rebalance message. Rebalancing algorithm will split total data set on every node into multiple batches prior to sending data. Declaration public int RebalanceBatchSize { get; set; } Property Value Type Description System.Int32 RebalanceDelay Gets or sets delay upon a node joining or leaving topology (or crash) after which rebalancing should be started automatically. Rebalancing should be delayed if you plan to restart nodes after they leave topology, or if you plan to start multiple nodes at once or one after another and don't want to repartition and rebalance until all nodes are started. Declaration public TimeSpan RebalanceDelay { get; set; } Property Value Type Description System.TimeSpan RebalanceMode Gets or sets cache rebalance mode. Declaration public CacheRebalanceMode RebalanceMode { get; set; } Property Value Type Description CacheRebalanceMode RebalanceOrder Gets or sets the cache rebalance order. Caches with bigger RebalanceOrder are rebalanced later than caches with smaller RebalanceOrder. Default is 0, which means unordered rebalance. All caches with RebalanceOrder=0 are rebalanced without any delay concurrently. This parameter is applicable only for caches with RebalanceMode of Sync and Async . Declaration public int RebalanceOrder { get; set; } Property Value Type Description System.Int32 RebalanceThrottle Time to wait between rebalance messages to avoid overloading of CPU or network. When rebalancing large data sets, the CPU or network can get over-consumed with rebalancing messages, which consecutively may slow down the application performance. This parameter helps tune the amount of time to wait between rebalance messages to make sure that rebalancing process does not have any negative performance impact. Note that application will continue to work properly while rebalancing is still in progress. Value of 0 means that throttling is disabled. Declaration public TimeSpan RebalanceThrottle { get; set; } Property Value Type Description System.TimeSpan RebalanceTimeout Gets or sets rebalance timeout. Declaration public TimeSpan RebalanceTimeout { get; set; } Property Value Type Description System.TimeSpan SqlEscapeAll If true all the SQL table and field names will be escaped with double quotes like ({ \"tableName\".\"fieldsName\"}). This enforces case sensitivity for field names and also allows having special characters in table and field names. Declaration public bool SqlEscapeAll { get; set; } Property Value Type Description System.Boolean SqlIndexMaxInlineSize Gets or sets maximum inline size in bytes for sql indexes. See also InlineSize . -1 for automatic. Declaration public int SqlIndexMaxInlineSize { get; set; } Property Value Type Description System.Int32 SqlSchema Gets or sets the SQL schema. Non-quoted identifiers are not case sensitive. Quoted identifiers are case sensitive. Quoted Name is used by default. Declaration public string SqlSchema { get; set; } Property Value Type Description System.String StoreConcurrentLoadAllThreshold Gets or sets the threshold to use when multiple keys are being loaded from an underlying cache store (see CacheStoreFactory ). In the situation when several threads load the same or intersecting set of keys and the total number of keys to load is less or equal to this threshold then there will be no second call to the storage in order to load a key from thread A if the same key is already being loaded by thread B. The threshold should be controlled wisely. On the one hand if it's set to a big value then the interaction with a storage during the load of missing keys will be minimal.On the other hand the big value may result in significant performance degradation because it is needed to check for every key whether it's being loaded or not. Declaration public int StoreConcurrentLoadAllThreshold { get; set; } Property Value Type Description System.Int32 WriteBehindBatchSize Maximum batch size for write-behind cache store operations. Store operations (get or remove) are combined in a batch of this size to be passed to WriteAll(IEnumerable<KeyValuePair<TK, TV>>) or DeleteAll(IEnumerable<TK>) methods. Declaration public int WriteBehindBatchSize { get; set; } Property Value Type Description System.Int32 WriteBehindCoalescing Gets or sets write coalescing flag for write-behind cache store operations. Store operations (get or remove) with the same key are combined or coalesced to single, resulting operation to reduce pressure to underlying cache store. Declaration public bool WriteBehindCoalescing { get; set; } Property Value Type Description System.Boolean WriteBehindEnabled Flag indicating whether Ignite should use write-behind behaviour for the cache store. Declaration public bool WriteBehindEnabled { get; set; } Property Value Type Description System.Boolean WriteBehindFlushFrequency Frequency with which write-behind cache is flushed to the cache store. This value defines the maximum time interval between object insertion/deletion from the cache at the moment when corresponding operation is applied to the cache store. If this value is 0, then flush is performed according to the flush size. Note that you cannot set both WriteBehindFlushSize and WriteBehindFlushFrequency to 0. Declaration public TimeSpan WriteBehindFlushFrequency { get; set; } Property Value Type Description System.TimeSpan WriteBehindFlushSize Maximum size of the write-behind cache. If cache size exceeds this value, all cached items are flushed to the cache store and write cache is cleared. Declaration public int WriteBehindFlushSize { get; set; } Property Value Type Description System.Int32 WriteBehindFlushThreadCount Number of threads that will perform cache flushing. Cache flushing is performed when cache size exceeds value defined by WriteBehindFlushSize , or flush interval defined by WriteBehindFlushFrequency is elapsed. Declaration public int WriteBehindFlushThreadCount { get; set; } Property Value Type Description System.Int32 WriteSynchronizationMode Gets or sets write synchronization mode. This mode controls whether the main caller should wait for update on other nodes to complete or not. Declaration public CacheWriteSynchronizationMode WriteSynchronizationMode { get; set; } Property Value Type Description CacheWriteSynchronizationMode WriteThrough Gets or sets a value indicating whether write-through should be enabled for cache operations. When in \"write-through\" mode, cache updates that occur as a result of performing \"put\" operations will appropriately cause the configured ICacheStore (see CacheStoreFactory ) to be invoked. Declaration public bool WriteThrough { get; set; } Property Value Type Description System.Boolean"
  },
  "api/Apache.Ignite.Core.Cache.Configuration.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.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.Expiry.ExpiryPolicy.html": {
    "href": "api/Apache.Ignite.Core.Cache.Expiry.ExpiryPolicy.html",
    "title": "Class ExpiryPolicy | Apache Ignite.NET",
    "keywords": "Class ExpiryPolicy Default expiry policy implementation with all durations defined explicitly. Inheritance System.Object ExpiryPolicy Implements IExpiryPolicy Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Expiry Assembly : Apache.Ignite.Core.dll Syntax public class ExpiryPolicy : IExpiryPolicy Constructors ExpiryPolicy(Nullable<TimeSpan>, Nullable<TimeSpan>, Nullable<TimeSpan>) Constructor. Declaration public ExpiryPolicy(TimeSpan? create, TimeSpan? update, TimeSpan? access) Parameters Type Name Description System.Nullable < System.TimeSpan > create Expiry for create. System.Nullable < System.TimeSpan > update Expiry for udpate. System.Nullable < System.TimeSpan > access Expiry for access. Methods GetExpiryForAccess() Gets expiry for access operation. If TimeSpan.ZERO is returned, cache entry is considered immediately expired. If null is returned, no change to previously understood expiry is performed. Declaration public TimeSpan? GetExpiryForAccess() Returns Type Description System.Nullable < System.TimeSpan > Expiry for access operation. GetExpiryForCreate() Gets expiry for create operation. If TimeSpan.ZERO is returned, cache entry is considered immediately expired and will not be added to cache. If null is returned, no change to previously understood expiry is performed. Declaration public TimeSpan? GetExpiryForCreate() Returns Type Description System.Nullable < System.TimeSpan > Expiry for create opeartion. GetExpiryForUpdate() Gets expiry for update operation. If TimeSpan.ZERO is returned, cache entry is considered immediately expired. If null is returned, no change to previously understood expiry is performed. Declaration public TimeSpan? GetExpiryForUpdate() Returns Type Description System.Nullable < System.TimeSpan > Expiry for update operation. Implements IExpiryPolicy"
  },
  "api/Apache.Ignite.Core.Cache.IQueryMetrics.html": {
    "href": "api/Apache.Ignite.Core.Cache.IQueryMetrics.html",
    "title": "Interface IQueryMetrics | Apache Ignite.NET",
    "keywords": "Interface IQueryMetrics Cache query metrics used to obtain statistics on query. Namespace : Apache.Ignite.Core.Cache Assembly : Apache.Ignite.Core.dll Syntax public interface IQueryMetrics Properties AverageTime Gets average execution time of query. Declaration double AverageTime { get; } Property Value Type Description System.Double Average execution time of query. Executions Gets total number execution of query. Declaration int Executions { get; } Property Value Type Description System.Int32 Number of executions. Fails Gets total number of times a query execution failed. Declaration int Fails { get; } Property Value Type Description System.Int32 Total number of times a query execution failed. MaximumTime Gets maximum execution time of query. Declaration long MaximumTime { get; } Property Value Type Description System.Int64 Maximum execution time of query. MinimumTime Gets minimum execution time of query. Declaration long MinimumTime { get; } Property Value Type Description System.Int64 Minimum execution time of query."
  },
  "api/Apache.Ignite.Core.Cache.Query.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.Query.IQueryCursorField.html": {
    "href": "api/Apache.Ignite.Core.Cache.Query.IQueryCursorField.html",
    "title": "Interface IQueryCursorField | Apache Ignite.NET",
    "keywords": "Interface IQueryCursorField Query field descriptor. This descriptor is used to provide metadata about fields returned in query result. Namespace : Apache.Ignite.Core.Cache.Query Assembly : Apache.Ignite.Core.dll Syntax public interface IQueryCursorField Properties JavaTypeName Gets the name of Java type for this field. Declaration string JavaTypeName { get; } Property Value Type Description System.String Name Gets the field name. Declaration string Name { get; } Property Value Type Description System.String Type Gets the field type. Declaration Type Type { get; } Property Value Type Description System.Type"
  },
  "api/Apache.Ignite.Core.Client.Cache.Query.Continuous.ContinuousQueryClient-2.html": {
    "href": "api/Apache.Ignite.Core.Client.Cache.Query.Continuous.ContinuousQueryClient-2.html",
    "title": "Class ContinuousQueryClient<TK, TV> | Apache Ignite.NET",
    "keywords": "Class ContinuousQueryClient<TK, TV> API for configuring continuous cache queries in thin client. Continuous queries allow to register a remote filter and a listener for cache update events. If an update event passes the filter, it will be sent to the client. To execute the query use method QueryContinuous(ContinuousQueryClient<TK, TV>) . Inheritance System.Object ContinuousQueryClient ContinuousQueryClient<TK, TV> Inherited Members ContinuousQueryClient.DefaultBufferSize 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.Query.Continuous Assembly : Apache.Ignite.Core.dll Syntax public class ContinuousQueryClient<TK, TV> : ContinuousQueryClient Type Parameters Name Description TK TV Constructors ContinuousQueryClient() Initializes a new instance of ContinuousQueryClient<TK, TV> class. Declaration public ContinuousQueryClient() ContinuousQueryClient(ICacheEntryEventListener<TK, TV>) Initializes a new instance of ContinuousQueryClient<TK, TV> class with a specified listener. Declaration public ContinuousQueryClient(ICacheEntryEventListener<TK, TV> listener) Parameters Type Name Description ICacheEntryEventListener <TK, TV> listener Properties 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 the filter returns false , then cache entry event will not be sent to a node where the continuous query has been started. This filter will be serialized and sent to the server nodes. .NET filters require all server nodes to be .NET-based. Java filters can be used with JavaObject and ToCacheEntryEventFilter<TK, TV>(JavaObject) . Declaration public ICacheEntryEventFilter<TK, TV> Filter { get; set; } Property Value Type Description ICacheEntryEventFilter <TK, TV> IncludeExpired Gets or sets a value indicating whether to notify about Expired events. If true , then the remote listener will get notifications about expired cache entries. Otherwise, only Created , Updated , and Removed events will be passed to the listener. Defaults to false . Declaration public bool IncludeExpired { get; set; } Property Value Type Description System.Boolean Listener Cache entry event listener. Invoked locally. Declaration public ICacheEntryEventListener<TK, TV> Listener { get; set; } Property Value Type Description ICacheEntryEventListener <TK, TV> 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.Client.Cache.Query.Continuous.ContinuousQueryClient.html": {
    "href": "api/Apache.Ignite.Core.Client.Cache.Query.Continuous.ContinuousQueryClient.html",
    "title": "Class ContinuousQueryClient | Apache Ignite.NET",
    "keywords": "Class ContinuousQueryClient Thin client continuous query base class, see ContinuousQueryClient<TK, TV> . Inheritance System.Object ContinuousQueryClient ContinuousQueryClient <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.Client.Cache.Query.Continuous Assembly : Apache.Ignite.Core.dll Syntax public abstract class ContinuousQueryClient Fields DefaultBufferSize Default buffer size. Declaration public const int DefaultBufferSize = 1 Field Value Type Description System.Int32"
  },
  "api/Apache.Ignite.Core.Client.IClientClusterGroup.html": {
    "href": "api/Apache.Ignite.Core.Client.IClientClusterGroup.html",
    "title": "Interface IClientClusterGroup | Apache Ignite.NET",
    "keywords": "Interface IClientClusterGroup Defines grid projection which represents a common functionality over a group of nodes. Grid projection allows to group Ignite nodes into various subgroups to perform distributed operations on them. All ForXXX(...)' methods will create a child grid projection from existing projection. If you create a new projection from current one, then the resulting projection will include a subset of nodes from current projection. The following code snippet shows how to create grid projections: var g = Ignition.StartClient().GetCluster(); // Projection over .NET nodes. var remoteNodes = g.ForDotNet(); // Projection over server nodes. var randomNode = g.ForServers(); // Projection over all nodes that have user attribute \"group\" set to value \"worker\". var workerNodes = g.ForAttribute(\"group\", \"worker\"); Namespace : Apache.Ignite.Core.Client Assembly : Apache.Ignite.Core.dll Syntax public interface IClientClusterGroup Methods ForAttribute(String, String) Creates projection for nodes containing given name and value specified in user attributes. Declaration IClientClusterGroup ForAttribute(string name, string val) Parameters Type Name Description System.String name Name of the attribute. System.String val Optional attribute value to match. Returns Type Description IClientClusterGroup Grid projection for nodes containing specified attribute. ForDotNet() Creates grid projection for nodes supporting .NET, i.e. for nodes started with Apache.Ignite.exe. Declaration IClientClusterGroup ForDotNet() Returns Type Description IClientClusterGroup Grid projection for nodes supporting .NET. ForPredicate(Func<IClientClusterNode, Boolean>) Creates a grid projection which includes all nodes that pass the given predicate filter. Declaration IClientClusterGroup ForPredicate(Func<IClientClusterNode, bool> p) Parameters Type Name Description System.Func < IClientClusterNode , System.Boolean > p Predicate filter for nodes to include into this projection. Returns Type Description IClientClusterGroup Grid projection for nodes that passed the predicate filter. ForServers() Creates a cluster group of nodes started in server mode ( ClientMode ). Declaration IClientClusterGroup ForServers() Returns Type Description IClientClusterGroup Cluster group of nodes started in server mode. GetCompute() Gets compute functionality over this grid projection. All operations on the returned compute instance will only include nodes from this projection. Declaration IComputeClient GetCompute() Returns Type Description IComputeClient Compute instance over this grid projection. GetNode() Gets first node from the list of nodes in this projection. Declaration IClientClusterNode GetNode() Returns Type Description IClientClusterNode Node. GetNode(Guid) Gets a node for given ID from this grid projection. Declaration IClientClusterNode GetNode(Guid id) Parameters Type Name Description System.Guid id Node ID. Returns Type Description IClientClusterNode Node with given ID from this projection or null if such node does not exist in this projection. GetNodes() Gets read-only collections of nodes in this projection. Declaration ICollection<IClientClusterNode> GetNodes() Returns Type Description System.Collections.Generic.ICollection < IClientClusterNode > All nodes in this projection. GetServices() Gets services functionality over this grid projection. All operations on the returned services instance will only include nodes from this projection. Declaration IServicesClient GetServices() Returns Type Description IServicesClient Services instance over this grid projection."
  },
  "api/Apache.Ignite.Core.Client.IClientClusterNode.html": {
    "href": "api/Apache.Ignite.Core.Client.IClientClusterNode.html",
    "title": "Interface IClientClusterNode | Apache Ignite.NET",
    "keywords": "Interface IClientClusterNode Interface representing a single cluster node obtained through a thin client. You can get a list of all nodes in grid by calling GetNodes() . You can use Ignite node attributes to provide static information about a node. This information is initialized once within grid, during node startup, and remains the same throughout the lifetime of a node. All members are thread-safe and may be used concurrently from multiple threads. Inherited Members IBaselineNode.ConsistentId IBaselineNode.Attributes Namespace : Apache.Ignite.Core.Client Assembly : Apache.Ignite.Core.dll Syntax public interface IClientClusterNode : IBaselineNode Properties Addresses Collection of addresses this node is known by. Declaration ICollection<string> Addresses { get; } Property Value Type Description System.Collections.Generic.ICollection < System.String > Collection of addresses. HostNames Collection of host names this node is known by. Declaration ICollection<string> HostNames { get; } Property Value Type Description System.Collections.Generic.ICollection < System.String > Collection of host names. Id Globally unique node ID. A new ID is generated every time a node restarts. Declaration Guid Id { get; } Property Value Type Description System.Guid IsClient Gets a value indicating whether or not this node is connected to cluster as a client. Do not confuse client in terms of discovery and client in terms of cache. Cache clients cannot carry data, while topology clients connect to the topology in a different way. Declaration bool IsClient { get; } Property Value Type Description System.Boolean true if this node is a client node, false otherwise. . IsDaemon Tests whether or not this node is a daemon. Daemon nodes are the usual Ignite nodes that participate in topology but not visible on the main APIs, i.e. they are not part of any projections. Daemon nodes are used primarily for management and monitoring functionality that is build on Ignite and needs to participate in the topology but should be excluded from \"normal\" topology so that it won't participate in task execution or in-memory database. Application code should never use daemon nodes. Declaration bool IsDaemon { get; } Property Value Type Description System.Boolean IsLocal Tests whether or not this node is a local node. Declaration bool IsLocal { get; } Property Value Type Description System.Boolean Order Node order within grid topology. Discovery SPIs that support node ordering will assign a proper order to each node and will guarantee that discovery event notifications for new nodes will come in proper order. All other SPIs not supporting ordering may choose to return node startup time here. Declaration long Order { get; } Property Value Type Description System.Int64 Version Gets an Ignite node version. Declaration IgniteProductVersion Version { get; } Property Value Type Description IgniteProductVersion"
  },
  "api/Apache.Ignite.Core.Client.Transactions.html": {
    "href": "api/Apache.Ignite.Core.Client.Transactions.html",
    "title": "Namespace Apache.Ignite.Core.Client.Transactions | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Client.Transactions Classes TransactionClientConfiguration Thin client transactions configuration. Default values specified here will be used by TxStart() . Interfaces ITransactionClient Thin client transaction. ITransactionsClient Ignite Thin Client transactions facade. Transactions are bound to the thread started the transaction. After that, each cache operation within this thread will belong to the corresponding transaction until the transaction is committed, rolled back or closed. Should not be used with async calls. You can use cache transactions as follows: using (var tx = igniteClient.GetTransactions().TxStart()) { 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.Remove(\"k2\"); // Commit the transaction. tx.Commit(); } Alternatively, System.Transactions.TransactionScope can be used to start Ignite transactions. using (var ts = new TransactionScope()) { 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.Remove(\"k2\"); // Commit the transaction. ts.Complete(); }"
  },
  "api/Apache.Ignite.Core.Client.html": {
    "href": "api/Apache.Ignite.Core.Client.html",
    "title": "Namespace Apache.Ignite.Core.Client | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Client Classes IgniteClientConfiguration Ignite thin client configuration. Ignite thin client connects to a specific Ignite node with a socket and does not start JVM in process. This configuration should correspond to ClientConnectorConfiguration on a target node. IgniteClientConfigurationSection Ignite configuration section for app.config and web.config files. IgniteClientException Ignite thin client exception. SslStreamFactory Predefined SSL stream factory, loads certificate from specified file. Interfaces IClientCluster Represents whole cluster (group of all nodes in a cluster). IClientClusterGroup Defines grid projection which represents a common functionality over a group of nodes. Grid projection allows to group Ignite nodes into various subgroups to perform distributed operations on them. All ForXXX(...)' methods will create a child grid projection from existing projection. If you create a new projection from current one, then the resulting projection will include a subset of nodes from current projection. The following code snippet shows how to create grid projections: var g = Ignition.StartClient().GetCluster(); // Projection over .NET nodes. var remoteNodes = g.ForDotNet(); // Projection over server nodes. var randomNode = g.ForServers(); // Projection over all nodes that have user attribute \"group\" set to value \"worker\". var workerNodes = g.ForAttribute(\"group\", \"worker\"); IClientClusterNode Interface representing a single cluster node obtained through a thin client. You can get a list of all nodes in grid by calling GetNodes() . You can use Ignite node attributes to provide static information about a node. This information is initialized once within grid, during node startup, and remains the same throughout the lifetime of a node. All members are thread-safe and may be used concurrently from multiple threads. IClientConnection Represents Ignite client connection. IIgniteClient Main entry point for Ignite Thin Client APIs. You can obtain an instance of IIgniteClient through one of the StartClient() overloads. Instances of this class and all nested APIs are thread safe. ISslStreamFactory SSL Stream Factory defines how SSL connection is established. Enums ClientStatusCode Client status codes (see StatusCode )."
  },
  "api/Apache.Ignite.Core.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 AttributeNodeFilter Attribute node filter. The filter will evaluate to true if a node has all specified attributes with corresponding values. You can set node attributes using UserAttributes property. 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.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.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.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.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.Configuration.DataStorageConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Configuration.DataStorageConfiguration.html",
    "title": "Class DataStorageConfiguration | Apache Ignite.NET",
    "keywords": "Class DataStorageConfiguration Data storage configuration for Ignite page memory. The page memory is a manageable off-heap based memory architecture that divides all expandable data regions into pages of fixed size. An individual page can store one or many cache key-value entries that allows reusing the memory in the most efficient way and avoid memory fragmentation issues. By default, the page memory allocates a single expandable data region. All the caches that will be configured in an application will be mapped to this data region by default, thus, all the cache data will reside in that data region. Inheritance System.Object DataStorageConfiguration Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Configuration Assembly : Apache.Ignite.Core.dll Syntax public class DataStorageConfiguration Constructors DataStorageConfiguration() Initializes a new instance of the DataStorageConfiguration class. Declaration public DataStorageConfiguration() Fields DefaultCheckpointFrequency Default value for CheckpointFrequency . Declaration public static readonly TimeSpan DefaultCheckpointFrequency Field Value Type Description System.TimeSpan DefaultCheckpointThreads Default value for CheckpointThreads . Declaration public const int DefaultCheckpointThreads = 4 Field Value Type Description System.Int32 DefaultCheckpointWriteOrder Default value for CheckpointWriteOrder . Declaration public const CheckpointWriteOrder DefaultCheckpointWriteOrder = CheckpointWriteOrder.Sequential Field Value Type Description CheckpointWriteOrder DefaultConcurrencyLevel The default concurrency level. Declaration public static readonly int DefaultConcurrencyLevel Field Value Type Description System.Int32 DefaultDataRegionName Default name is assigned to default data region if no user-defined DefaultDataRegionConfiguration is specified. Declaration public const string DefaultDataRegionName = \"default\" Field Value Type Description System.String DefaultLockWaitTime Default value for LockWaitTime . Declaration public static readonly TimeSpan DefaultLockWaitTime Field Value Type Description System.TimeSpan DefaultMaxWalArchiveSize Default value for MaxWalArchiveSize . Declaration public const long DefaultMaxWalArchiveSize = 1073741824L Field Value Type Description System.Int64 DefaultMetricsRateTimeInterval The default rate time interval. Declaration public static readonly TimeSpan DefaultMetricsRateTimeInterval Field Value Type Description System.TimeSpan DefaultMetricsSubIntervalCount The default sub intervals. Declaration public const int DefaultMetricsSubIntervalCount = 5 Field Value Type Description System.Int32 DefaultPageSize The default page size. Declaration public const int DefaultPageSize = 4096 Field Value Type Description System.Int32 DefaultSystemRegionInitialSize Default size of a memory chunk reserved for system cache initially. Declaration public const long DefaultSystemRegionInitialSize = 41943040L Field Value Type Description System.Int64 DefaultSystemRegionMaxSize Default max size of a memory chunk for the system cache. Declaration public const long DefaultSystemRegionMaxSize = 104857600L Field Value Type Description System.Int64 DefaultTlbSize Default value for WalThreadLocalBufferSize . Declaration public const int DefaultTlbSize = 131072 Field Value Type Description System.Int32 DefaultWalArchivePath Default value for WalArchivePath . Declaration public const string DefaultWalArchivePath = \"db/wal/archive\" Field Value Type Description System.String DefaultWalAutoArchiveAfterInactivity Default value for WalFlushFrequency . Declaration public static readonly TimeSpan DefaultWalAutoArchiveAfterInactivity Field Value Type Description System.TimeSpan DefaultWalCompactionEnabled Default value for WalCompactionEnabled . Declaration public const bool DefaultWalCompactionEnabled = false Field Value Type Description System.Boolean DefaultWalFlushFrequency Default value for WalFlushFrequency . Declaration public static readonly TimeSpan DefaultWalFlushFrequency Field Value Type Description System.TimeSpan DefaultWalFsyncDelayNanos Default value for WalFsyncDelayNanos . Declaration public const long DefaultWalFsyncDelayNanos = 1000L Field Value Type Description System.Int64 DefaultWalHistorySize Default value for WalHistorySize . Declaration public const int DefaultWalHistorySize = 20 Field Value Type Description System.Int32 DefaultWalMode Default value for WalMode . Declaration public const WalMode DefaultWalMode = WalMode.LogOnly Field Value Type Description WalMode DefaultWalPageCompression Default value for WalPageCompression . Declaration public const DiskPageCompression DefaultWalPageCompression = DiskPageCompression.Disabled Field Value Type Description DiskPageCompression DefaultWalPath Default value for WalPath . Declaration public const string DefaultWalPath = \"db/wal\" Field Value Type Description System.String DefaultWalRecordIteratorBufferSize Default value for WalRecordIteratorBufferSize . Declaration public const int DefaultWalRecordIteratorBufferSize = 67108864 Field Value Type Description System.Int32 DefaultWalSegments Default value for WalSegments . Declaration public const int DefaultWalSegments = 10 Field Value Type Description System.Int32 DefaultWalSegmentSize Default value for WalSegmentSize . Declaration public const int DefaultWalSegmentSize = 67108864 Field Value Type Description System.Int32 DefaultWriteThrottlingEnabled Default value for WriteThrottlingEnabled . Declaration public const bool DefaultWriteThrottlingEnabled = false Field Value Type Description System.Boolean Properties AlwaysWriteFullPages Gets or sets a value indicating whether full pages should always be written. Declaration public bool AlwaysWriteFullPages { get; set; } Property Value Type Description System.Boolean CheckpointFrequency Gets or sets the checkpointing frequency which is a minimal interval when the dirty pages will be written to the Persistent Store. Declaration public TimeSpan CheckpointFrequency { get; set; } Property Value Type Description System.TimeSpan CheckpointReadLockTimeout Gets or sets the timeout for checkpoint read lock acquisition. Declaration public TimeSpan? CheckpointReadLockTimeout { get; set; } Property Value Type Description System.Nullable < System.TimeSpan > CheckpointThreads Gets or sets the number of threads for checkpointing. Declaration public int CheckpointThreads { get; set; } Property Value Type Description System.Int32 CheckpointWriteOrder Gets or sets the checkpoint page write order on disk. Declaration public CheckpointWriteOrder CheckpointWriteOrder { get; set; } Property Value Type Description CheckpointWriteOrder ConcurrencyLevel Gets or sets the number of concurrent segments in Ignite internal page mapping tables. Declaration public int ConcurrencyLevel { get; set; } Property Value Type Description System.Int32 DataRegionConfigurations Gets or sets the data region configurations. Declaration public ICollection<DataRegionConfiguration> DataRegionConfigurations { get; set; } Property Value Type Description System.Collections.Generic.ICollection < DataRegionConfiguration > DefaultDataRegionConfiguration Gets or sets the default region configuration. Declaration public DataRegionConfiguration DefaultDataRegionConfiguration { get; set; } Property Value Type Description DataRegionConfiguration LockWaitTime Gets or sets the persistent manager file lock wait time. Declaration public TimeSpan LockWaitTime { get; set; } Property Value Type Description System.TimeSpan MaxWalArchiveSize Gets or sets maximum size of wal archive folder, in bytes. Declaration public long MaxWalArchiveSize { get; set; } Property Value Type Description System.Int64 MetricsEnabled Gets or sets a value indicating whether to enable data storage metrics. See GetDataStorageMetrics() . Declaration public bool MetricsEnabled { get; set; } Property Value Type Description System.Boolean MetricsRateTimeInterval Gets or sets the length of the time interval for rate-based metrics. This interval defines a window over which hits will be tracked. Declaration public TimeSpan MetricsRateTimeInterval { get; set; } Property Value Type Description System.TimeSpan MetricsSubIntervalCount Number of sub-intervals to split the MetricsRateTimeInterval into to track the update history. Declaration public int MetricsSubIntervalCount { get; set; } Property Value Type Description System.Int32 PageSize Gets or sets the size of the memory page. Declaration public int PageSize { get; set; } Property Value Type Description System.Int32 StoragePath Gets or sets the path where data and indexes will be persisted. Declaration public string StoragePath { get; set; } Property Value Type Description System.String SystemRegionInitialSize Gets or sets the size of a memory chunk reserved for system needs. Declaration public long SystemRegionInitialSize { get; set; } Property Value Type Description System.Int64 SystemRegionMaxSize Gets or sets the maximum memory region size reserved for system needs. Declaration public long SystemRegionMaxSize { get; set; } Property Value Type Description System.Int64 WalArchivePath Gets or sets the path to the directory where WAL (Write Ahead Log) archive is stored. Every WAL segment will be fully copied to this directory before it can be reused for WAL purposes. Declaration public string WalArchivePath { get; set; } Property Value Type Description System.String WalAutoArchiveAfterInactivity Gets or sets the inactivity time after which to run WAL segment auto archiving. Declaration public TimeSpan WalAutoArchiveAfterInactivity { get; set; } Property Value Type Description System.TimeSpan WalCompactionEnabled Gets or sets flag indicating whether WAL compaction is enabled. If true, system filters and compresses WAL archive in background. Compressed WAL archive gets automatically decompressed on demand. Declaration public bool WalCompactionEnabled { get; set; } Property Value Type Description System.Boolean WalFlushFrequency Gets or sets the WAL (Write Ahead Log) flush frequency. Declaration public TimeSpan WalFlushFrequency { get; set; } Property Value Type Description System.TimeSpan WalFsyncDelayNanos Gets or sets the WAL (Write Ahead Log) fsync (disk sync) delay, in nanoseconds Declaration public long WalFsyncDelayNanos { get; set; } Property Value Type Description System.Int64 WalHistorySize Gets or sets the number of checkpoints to store in WAL (Write Ahead Log) history. Declaration public int WalHistorySize { get; set; } Property Value Type Description System.Int32 WalMode Gets or sets the WAL (Write Ahead Log) mode. Declaration public WalMode WalMode { get; set; } Property Value Type Description WalMode WalPageCompression Gets or sets the compression algorithm for WAL page snapshot records. Declaration public DiskPageCompression WalPageCompression { get; set; } Property Value Type Description DiskPageCompression WalPageCompressionLevel Gets or sets the compression level for WAL page snapshot records. Declaration public int ? WalPageCompressionLevel { get; set; } Property Value Type Description System.Nullable < System.Int32 > WalPath Gets or sets the path to the directory where WAL (Write Ahead Log) is stored. Declaration public string WalPath { get; set; } Property Value Type Description System.String WalRecordIteratorBufferSize Gets or sets the size of the WAL (Write Ahead Log) record iterator buffer, in bytes. Declaration public int WalRecordIteratorBufferSize { get; set; } Property Value Type Description System.Int32 WalSegments Gets or sets a number of WAL (Write Ahead Log) segments to work with. For performance reasons, the whole WAL is split into files of fixed length called segments. Declaration public int WalSegments { get; set; } Property Value Type Description System.Int32 WalSegmentSize Gets or sets the size of the WAL (Write Ahead Log) segment. For performance reasons, the whole WAL is split into files of fixed length called segments. Declaration public int WalSegmentSize { get; set; } Property Value Type Description System.Int32 WalThreadLocalBufferSize Gets or sets the size of the TLB (Thread-Local Buffer), in bytes. Declaration public int WalThreadLocalBufferSize { get; set; } Property Value Type Description System.Int32 WriteThrottlingEnabled Gets or sets a value indicating whether threads that generate dirty pages too fast during ongoing checkpoint will be throttled. Declaration public bool WriteThrottlingEnabled { get; set; } Property Value Type Description System.Boolean"
  },
  "api/Apache.Ignite.Core.Configuration.DiskPageCompression.html": {
    "href": "api/Apache.Ignite.Core.Configuration.DiskPageCompression.html",
    "title": "Enum DiskPageCompression | Apache Ignite.NET",
    "keywords": "Enum DiskPageCompression Disk page compression options. Namespace : Apache.Ignite.Core.Configuration Assembly : Apache.Ignite.Core.dll Syntax public enum DiskPageCompression Fields Name Description Disabled Compression disabled. Lz4 Lz4 compression. SkipGarbage Retain only useful data from half-filled pages, but do not apply any compression. Snappy Snappy compression. Zstd Zstd compression."
  },
  "api/Apache.Ignite.Core.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.DataStructures.IAtomicSequence.html": {
    "href": "api/Apache.Ignite.Core.DataStructures.IAtomicSequence.html",
    "title": "Interface IAtomicSequence | Apache Ignite.NET",
    "keywords": "Interface IAtomicSequence Represents a distributed atomic sequence of numbers. Namespace : Apache.Ignite.Core.DataStructures Assembly : Apache.Ignite.Core.dll Syntax public interface IAtomicSequence Properties BatchSize Gets local batch size for this atomic sequence. Declaration int BatchSize { get; set; } Property Value Type Description System.Int32 Sequence batch size. IsClosed Determines whether this instance was removed from cache. Declaration bool IsClosed { get; } Property Value Type Description System.Boolean True if this atomic was removed from cache; otherwise, false. Name Gets the name of this atomic sequence. Declaration string Name { get; } Property Value Type Description System.String Name of this atomic sequence. Methods Add(Int64) Adds specified value to the current value and returns result. Declaration long Add(long value) Parameters Type Name Description System.Int64 value The value to add. Returns Type Description System.Int64 The new value of the atomic sequence. Close() Closes this instance. Declaration void Close() Increment() Increments current value and returns result. Declaration long Increment() Returns Type Description System.Int64 The new value of the atomic sequence. Read() Returns current value. Declaration long Read() Returns Type Description System.Int64 Current value of the atomic sequence."
  },
  "api/Apache.Ignite.Core.DataStructures.html": {
    "href": "api/Apache.Ignite.Core.DataStructures.html",
    "title": "Namespace Apache.Ignite.Core.DataStructures | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.DataStructures Interfaces IAtomicLong Represents a distributed atomic long value. IAtomicReference<T> Represents a named value in the distributed cache. IAtomicSequence Represents a distributed atomic sequence of numbers."
  },
  "api/Apache.Ignite.Core.Events.CheckpointEvent.html": {
    "href": "api/Apache.Ignite.Core.Events.CheckpointEvent.html",
    "title": "Class CheckpointEvent | Apache Ignite.NET",
    "keywords": "Class CheckpointEvent Grid checkpoint event. Inheritance System.Object EventBase CheckpointEvent Implements IEvent System.IEquatable < EventBase > Inherited Members EventBase.Id EventBase.LocalOrder EventBase.Node EventBase.Message EventBase.Type EventBase.Name EventBase.Timestamp EventBase.Equals(EventBase) EventBase.Equals(Object) EventBase.GetHashCode() EventBase.ToString() EventBase.ReadNode(IBinaryRawReader) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Events Assembly : Apache.Ignite.Core.dll Syntax public sealed class CheckpointEvent : EventBase, IEvent, IEquatable<EventBase> Properties Key Gets checkpoint key associated with this event. Declaration public string Key { get; } Property Value Type Description System.String Methods ToShortString() Gets shortened version of ToString result. Declaration public override string ToShortString() Returns Type Description System.String Overrides EventBase.ToShortString() Implements IEvent System.IEquatable<T>"
  },
  "api/Apache.Ignite.Core.Events.DiscoveryEvent.html": {
    "href": "api/Apache.Ignite.Core.Events.DiscoveryEvent.html",
    "title": "Class DiscoveryEvent | Apache Ignite.NET",
    "keywords": "Class DiscoveryEvent Grid discovery event. Inheritance System.Object EventBase DiscoveryEvent Implements IEvent System.IEquatable < EventBase > Inherited Members EventBase.Id EventBase.LocalOrder EventBase.Node EventBase.Message EventBase.Type EventBase.Name EventBase.Timestamp EventBase.Equals(EventBase) EventBase.Equals(Object) EventBase.GetHashCode() EventBase.ToString() EventBase.ReadNode(IBinaryRawReader) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Events Assembly : Apache.Ignite.Core.dll Syntax public sealed class DiscoveryEvent : EventBase, IEvent, IEquatable<EventBase> Properties EventNode Gets node that caused this event to be generated. It is potentially different from the node on which this event was recorded. For example, node A locally recorded the event that a remote node B joined the topology. In this case this property will return node B. Declaration public IClusterNode EventNode { get; } Property Value Type Description IClusterNode TopologyNodes Gets topology nodes from topology snapshot. If SPI implementation does not support versioning, the best effort snapshot will be captured. Declaration public ICollection<IClusterNode> TopologyNodes { get; } Property Value Type Description System.Collections.Generic.ICollection < IClusterNode > TopologyVersion Gets topology version if this event is raised on topology change and configured discovery SPI implementation supports topology versioning. Declaration public long TopologyVersion { get; } Property Value Type Description System.Int64 Methods ToShortString() Gets shortened version of ToString result. Declaration public override string ToShortString() Returns Type Description System.String Overrides EventBase.ToShortString() Implements IEvent System.IEquatable<T>"
  },
  "api/Apache.Ignite.Core.Events.EventBase.html": {
    "href": "api/Apache.Ignite.Core.Events.EventBase.html",
    "title": "Class EventBase | Apache Ignite.NET",
    "keywords": "Class EventBase Base event implementation. Inheritance System.Object EventBase CacheEvent CacheQueryExecutedEvent CacheQueryReadEvent CacheRebalancingEvent CheckpointEvent DiscoveryEvent JobEvent TaskEvent Implements IEvent System.IEquatable < EventBase > Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Events Assembly : Apache.Ignite.Core.dll Syntax public abstract class EventBase : IEvent, IEquatable<EventBase> Constructors EventBase(IBinaryRawReader) Initializes a new instance of the EventBase class. Declaration protected EventBase(IBinaryRawReader r) Parameters Type Name Description IBinaryRawReader r The reader to read data from. Properties Id Gets globally unique ID of this event. Declaration public IgniteGuid Id { get; } Property Value Type Description IgniteGuid LocalOrder Gets locally unique ID that is atomically incremented for each event. Unlike global Id this local ID can be used for ordering events on this node. Note that for performance considerations Ignite doesn't order events globally. Declaration public long LocalOrder { get; } Property Value Type Description System.Int64 Message Gets optional message for this event. Declaration public string Message { get; } Property Value Type Description System.String Name Gets name of this event. Declaration public string Name { get; } Property Value Type Description System.String Node Node where event occurred and was recorded. Declaration public IClusterNode Node { get; } Property Value Type Description IClusterNode Timestamp Gets event timestamp. Timestamp is local to the node on which this event was produced. Note that more than one event can be generated with the same timestamp. For ordering purposes use LocalOrder instead. Declaration public DateTime Timestamp { get; } Property Value Type Description System.DateTime Type Gets type of this event. All system event types are defined in EventType Declaration public int Type { get; } Property Value Type Description System.Int32 Methods Equals(EventBase) Determines whether the specified object is equal to this instance. Declaration public bool Equals(EventBase other) Parameters Type Name Description EventBase other The object to compare with this instance. Returns Type Description System.Boolean true if the specified object is equal to this instance; otherwise, false . Equals(Object) Determines whether the specified object is equal to this instance. Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj The object to compare with this instance. Returns Type Description System.Boolean true if the specified object is equal to this instance; otherwise, false . Overrides System.Object.Equals(System.Object) GetHashCode() Returns a hash code for this instance. Declaration public override int GetHashCode() Returns Type Description System.Int32 A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Overrides System.Object.GetHashCode() ReadNode(IBinaryRawReader) Reads a node from stream. Declaration protected static IClusterNode ReadNode(IBinaryRawReader reader) Parameters Type Name Description IBinaryRawReader reader Reader. Returns Type Description IClusterNode Node or null. ToShortString() Gets shortened version of ToString result. Declaration public virtual string ToShortString() Returns Type Description System.String ToString() Returns a System.String that represents this instance. Declaration public override string ToString() Returns Type Description System.String A System.String that represents this instance. Overrides System.Object.ToString() Implements IEvent System.IEquatable<T>"
  },
  "api/Apache.Ignite.Core.Events.EventType.html": {
    "href": "api/Apache.Ignite.Core.Events.EventType.html",
    "title": "Class EventType | Apache Ignite.NET",
    "keywords": "Class EventType Contains event type constants. The decision to use class and not enumeration is dictated by allowing users to create their own events and/or event types which would be impossible with enumerations. Note that this interface defines not only individual type constants, but arrays of types as well to be conveniently used with IEvents methods. NOTE: all types in range from 1 to 1000 are reserved for internal Ignite events and should not be used by user-defined events. Inheritance System.Object EventType Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Events Assembly : Apache.Ignite.Core.dll Syntax public static class EventType Fields CacheEntryCreated Built-in event type: entry created. Declaration public static readonly int CacheEntryCreated Field Value Type Description System.Int32 CacheEntryDestroyed Built-in event type: entry destroyed. Declaration public static readonly int CacheEntryDestroyed Field Value Type Description System.Int32 CacheEntryEvicted Built-in event type: entry evicted. Declaration public static readonly int CacheEntryEvicted Field Value Type Description System.Int32 CacheNodesLeft Built-in event type: cache nodes left. Declaration public static readonly int CacheNodesLeft Field Value Type Description System.Int32 CacheObjectExpired Built-in event type: cache object was expired when reading it. Declaration public static readonly int CacheObjectExpired Field Value Type Description System.Int32 CacheObjectFromOffheap Built-in event type: cache object moved from off-heap storage back into memory. Declaration public static readonly int CacheObjectFromOffheap Field Value Type Description System.Int32 CacheObjectLocked Built-in event type: object locked. Declaration public static readonly int CacheObjectLocked Field Value Type Description System.Int32 CacheObjectPut Built-in event type: object put. Declaration public static readonly int CacheObjectPut Field Value Type Description System.Int32 CacheObjectRead Built-in event type: object read. Declaration public static readonly int CacheObjectRead Field Value Type Description System.Int32 CacheObjectRemoved Built-in event type: object removed. Declaration public static readonly int CacheObjectRemoved Field Value Type Description System.Int32 CacheObjectToOffheap Built-in event type: cache object stored in off-heap storage. Declaration public static readonly int CacheObjectToOffheap Field Value Type Description System.Int32 CacheObjectUnlocked Built-in event type: object unlocked. Declaration public static readonly int CacheObjectUnlocked Field Value Type Description System.Int32 CacheQueryExecuted Built-in event type: query executed. Declaration public static readonly int CacheQueryExecuted Field Value Type Description System.Int32 CacheQueryObjectRead Built-in event type: query entry read. Declaration public static readonly int CacheQueryObjectRead Field Value Type Description System.Int32 CacheRebalanceObjectLoaded Built-in event type: cache entry rebalanced. Declaration public static readonly int CacheRebalanceObjectLoaded Field Value Type Description System.Int32 CacheRebalanceObjectUnloaded Built-in event type: cache entry unloaded. Declaration public static readonly int CacheRebalanceObjectUnloaded Field Value Type Description System.Int32 CacheRebalancePartDataLost Built-in event type: all nodes that hold partition left topology. Declaration public static readonly int CacheRebalancePartDataLost Field Value Type Description System.Int32 CacheRebalancePartLoaded Built-in event type: cache partition loaded. Declaration public static readonly int CacheRebalancePartLoaded Field Value Type Description System.Int32 CacheRebalancePartUnloaded Built-in event type: cache partition unloaded. Declaration public static readonly int CacheRebalancePartUnloaded Field Value Type Description System.Int32 CacheRebalanceStarted Built-in event type: cache rebalance started. Declaration public static readonly int CacheRebalanceStarted Field Value Type Description System.Int32 CacheRebalanceStopped Built-in event type: cache rebalance stopped. Declaration public static readonly int CacheRebalanceStopped Field Value Type Description System.Int32 CacheStarted Built-in event type: cache started. Declaration public static readonly int CacheStarted Field Value Type Description System.Int32 CacheStopped Built-in event type: cache started. Declaration public static readonly int CacheStopped Field Value Type Description System.Int32 CheckpointLoaded Built-in event type: checkpoint was loaded. Declaration public static readonly int CheckpointLoaded Field Value Type Description System.Int32 CheckpointRemoved Built-in event type: checkpoint was removed. Reasons are: timeout expired, or or it was manually removed, or it was automatically removed by the task session. Declaration public static readonly int CheckpointRemoved Field Value Type Description System.Int32 CheckpointSaved Built-in event type: checkpoint was saved. Declaration public static readonly int CheckpointSaved Field Value Type Description System.Int32 ClientNodeDisconnected Built-in event type: client node disconnected. Declaration public static readonly int ClientNodeDisconnected Field Value Type Description System.Int32 ClientNodeReconnected Built-in event type: client node reconnected. Declaration public static readonly int ClientNodeReconnected Field Value Type Description System.Int32 JobCancelled Built-in event type: Ignite job cancelled. Declaration public static readonly int JobCancelled Field Value Type Description System.Int32 JobFailed Built-in event type: Ignite job failed. Job has failed. This means that there was some error event during job execution and job did not produce a result. Declaration public static readonly int JobFailed Field Value Type Description System.Int32 JobFailedOver Built-in event type: Ignite job failed over. Declaration public static readonly int JobFailedOver Field Value Type Description System.Int32 JobFinished Built-in event type: Ignite job finished. Job has successfully completed and produced a result which from the user perspective can still be either negative or positive. Declaration public static readonly int JobFinished Field Value Type Description System.Int32 JobMapped Built-in event type: Ignite job was mapped in {@link org.apache.ignite.compute.ComputeTask#map(List, Object)} method. Declaration public static readonly int JobMapped Field Value Type Description System.Int32 JobQueued Built-in event type: Ignite job queued. Job arrived for execution and has been queued (added to passive queue during collision resolution). Declaration public static readonly int JobQueued Field Value Type Description System.Int32 JobRejected Built-in event type: Ignite job rejected during collision resolution. Declaration public static readonly int JobRejected Field Value Type Description System.Int32 JobResulted Built-in event type: Ignite job result was received by {@link org.apache.ignite.compute.ComputeTask#result(org.apache.ignite.compute.ComputeJobResult, List)} method. Declaration public static readonly int JobResulted Field Value Type Description System.Int32 JobStarted Built-in event type: Ignite job started. Declaration public static readonly int JobStarted Field Value Type Description System.Int32 JobTimedout Built-in event type: Ignite job timed out. Declaration public static readonly int JobTimedout Field Value Type Description System.Int32 NodeFailed Built-in event type: node failed. Ignite detected that node has presumably crashed and is considered failed. Declaration public static readonly int NodeFailed Field Value Type Description System.Int32 NodeJoined Built-in event type: node joined topology. New node has been discovered and joined grid topology. Note that even though a node has been discovered there could be a number of warnings in the log. In certain situations Ignite doesn't prevent a node from joining but prints warning messages into the log. Declaration public static readonly int NodeJoined Field Value Type Description System.Int32 NodeLeft Built-in event type: node has normally left topology. Declaration public static readonly int NodeLeft Field Value Type Description System.Int32 NodeMetricsUpdated Built-in event type: node metrics updated. Generated when node's metrics are updated. In most cases this callback is invoked with every heartbeat received from a node (including local node). Declaration public static readonly int NodeMetricsUpdated Field Value Type Description System.Int32 NodeSegmented Built-in event type: local node segmented. Generated when node determines that it runs in invalid network segment. Declaration public static readonly int NodeSegmented Field Value Type Description System.Int32 TaskFailed Built-in event type: task failed. Task failed. This event is triggered every time a task finished with an exception. Note that prior to this event, there could be other events recorded specific to the failure. Declaration public static readonly int TaskFailed Field Value Type Description System.Int32 TaskFinished Built-in event type: task finished. Task got finished. This event is triggered every time a task finished without exception. Declaration public static readonly int TaskFinished Field Value Type Description System.Int32 TaskReduced Built-in event type: task reduced. Declaration public static readonly int TaskReduced Field Value Type Description System.Int32 TaskSessionAttrSet Built-in event type: task session attribute set. Declaration public static readonly int TaskSessionAttrSet Field Value Type Description System.Int32 TaskStarted Built-in event type: task started. Declaration public static readonly int TaskStarted Field Value Type Description System.Int32 TaskTimedout Built-in event type: task timed out. Declaration public static readonly int TaskTimedout Field Value Type Description System.Int32 Properties All All Ignite events. Declaration public static ICollection<int> All { get; } Property Value Type Description System.Collections.Generic.ICollection < System.Int32 > AllMinusMetricUpdate All Ignite events ( excluding metric update event). Declaration public static ICollection<int> AllMinusMetricUpdate { get; } Property Value Type Description System.Collections.Generic.ICollection < System.Int32 > CacheAll All cache events. Declaration public static ICollection<int> CacheAll { get; } Property Value Type Description System.Collections.Generic.ICollection < System.Int32 > CacheLifecycleAll All cache lifecycle events. Declaration public static ICollection<int> CacheLifecycleAll { get; } Property Value Type Description System.Collections.Generic.ICollection < System.Int32 > CacheQueryAll All cache query events. Declaration public static ICollection<int> CacheQueryAll { get; } Property Value Type Description System.Collections.Generic.ICollection < System.Int32 > CacheRebalanceAll All cache rebalance events. Declaration public static ICollection<int> CacheRebalanceAll { get; } Property Value Type Description System.Collections.Generic.ICollection < System.Int32 > DiscoveryAll All discovery events. Declaration public static ICollection<int> DiscoveryAll { get; } Property Value Type Description System.Collections.Generic.ICollection < System.Int32 > DiscoveryAllMinusMetrics All discovery events except for NodeMetricsUpdated . Subscription to NodeMetricsUpdated can generate massive amount of event processing in most cases is not necessary. If this event is indeed required you can subscribe to it individually or use Apache.Ignite.Core.Events.EventType.DiscoveryAll0 array. Declaration public static ICollection<int> DiscoveryAllMinusMetrics { get; } Property Value Type Description System.Collections.Generic.ICollection < System.Int32 > ErrorAll All events indicating an error or failure condition. It is convenient to use when fetching all events indicating error or failure. Declaration public static ICollection<int> ErrorAll { get; } Property Value Type Description System.Collections.Generic.ICollection < System.Int32 > JobExecutionAll All Ignite job execution events. Declaration public static ICollection<int> JobExecutionAll { get; } Property Value Type Description System.Collections.Generic.ICollection < System.Int32 > TaskExecutionAll All Ignite task execution events. Declaration public static ICollection<int> TaskExecutionAll { get; } Property Value Type Description System.Collections.Generic.ICollection < System.Int32 >"
  },
  "api/Apache.Ignite.Core.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.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.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.Eviction.FifoEvictionPolicy.html": {
    "href": "api/Apache.Ignite.Core.Cache.Eviction.FifoEvictionPolicy.html",
    "title": "Class FifoEvictionPolicy | Apache Ignite.NET",
    "keywords": "Class FifoEvictionPolicy Eviction policy based on First In First Out (FIFO) algorithm with batch eviction support. The eviction starts in the following cases: The cache size becomes BatchSize elements greater than the maximum size; The size of cache entries in bytes becomes greater than the maximum memory size; The size of cache entry calculates as sum of key size and value size. Note: Batch eviction is enabled only if maximum memory limit isn't set. This implementation is very efficient since it does not create any additional table-like data structures. The FIFO ordering information is maintained by attaching ordering metadata to cache entries. Inheritance System.Object EvictionPolicyBase FifoEvictionPolicy Implements IEvictionPolicy Inherited Members EvictionPolicyBase.DefaultBatchSize EvictionPolicyBase.DefaultMaxSize EvictionPolicyBase.DefaultMaxMemorySize EvictionPolicyBase.BatchSize EvictionPolicyBase.MaxSize EvictionPolicyBase.MaxMemorySize System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Eviction Assembly : Apache.Ignite.Core.dll Syntax public class FifoEvictionPolicy : EvictionPolicyBase, IEvictionPolicy Implements IEvictionPolicy"
  },
  "api/Apache.Ignite.Core.Cache.IMemoryMetrics.html": {
    "href": "api/Apache.Ignite.Core.Cache.IMemoryMetrics.html",
    "title": "Interface IMemoryMetrics | Apache Ignite.NET",
    "keywords": "Interface IMemoryMetrics Memory usage metrics. Obsolete, use IDataRegionMetrics . Namespace : Apache.Ignite.Core.Cache Assembly : Apache.Ignite.Core.dll Syntax [Obsolete(\"See IDataRegionMetrics.\")] public interface IMemoryMetrics Properties AllocationRate Gets the allocation rate, in pages per second. Declaration float AllocationRate { get; } Property Value Type Description System.Single EvictionRate Gets the eviction rate, in pages per second. Declaration float EvictionRate { get; } Property Value Type Description System.Single LargeEntriesPagesPercentage Gets the percentage of pages fully occupied by entries that are larger than page. Declaration float LargeEntriesPagesPercentage { get; } Property Value Type Description System.Single Name Gets the memory policy name. Declaration string Name { get; } Property Value Type Description System.String PageFillFactor Gets the page fill factor: the percentage of used space. Declaration float PageFillFactor { get; } Property Value Type Description System.Single TotalAllocatedPages Gets the count of allocated pages. Declaration long TotalAllocatedPages { get; } Property Value Type Description System.Int64"
  },
  "api/Apache.Ignite.Core.Cache.IMutableCacheEntry-2.html": {
    "href": "api/Apache.Ignite.Core.Cache.IMutableCacheEntry-2.html",
    "title": "Interface IMutableCacheEntry<TK, TV> | Apache Ignite.NET",
    "keywords": "Interface IMutableCacheEntry<TK, TV> Mutable representation of ICacheEntry<TK, TV> Inherited Members ICacheEntry<TK, TV>.Key ICacheEntry<TK, TV>.Value Namespace : Apache.Ignite.Core.Cache Assembly : Apache.Ignite.Core.dll Syntax public interface IMutableCacheEntry<out TK, TV> : ICacheEntry<TK, TV> Type Parameters Name Description TK Key type. TV Value type. Properties Exists Gets a value indicating whether cache entry exists in cache. Declaration bool Exists { get; } Property Value Type Description System.Boolean Value Gets, sets or replaces the value associated with the key. If Exists is false and setter is called then a mapping is added to the cache visible once the EntryProcessor completes. After setter invocation Exists will return true. Declaration TV Value { get; set; } Property Value Type Description TV Methods Remove() Removes the entry from the Cache. Declaration void Remove()"
  },
  "api/Apache.Ignite.Core.Cache.Query.SqlFieldsQuery.html": {
    "href": "api/Apache.Ignite.Core.Cache.Query.SqlFieldsQuery.html",
    "title": "Class SqlFieldsQuery | Apache Ignite.NET",
    "keywords": "Class SqlFieldsQuery SQL fields query. Inheritance System.Object SqlFieldsQuery Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Query Assembly : Apache.Ignite.Core.dll Syntax public class SqlFieldsQuery : IQueryBaseInternal Constructors SqlFieldsQuery(String, Boolean, Object[]) Constructor, Declaration public SqlFieldsQuery(string sql, bool loc, params object[] args) Parameters Type Name Description System.String sql SQL. System.Boolean loc Whether query should be executed locally. System.Object [] args Arguments. SqlFieldsQuery(String, Object[]) Constructor. Declaration public SqlFieldsQuery(string sql, params object[] args) Parameters Type Name Description System.String sql SQL. System.Object [] args Arguments. Fields DefaultPageSize Default page size. Declaration public const int DefaultPageSize = 1024 Field Value Type Description System.Int32 DefaultUpdateBatchSize Default value for UpdateBatchSize . Declaration public const int DefaultUpdateBatchSize = 1 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 Partitions Gets or sets partitions for the query. The query will be executed only on nodes which are primary for specified partitions. Declaration public int[] Partitions { get; set; } Property Value Type Description System.Int32 [] ReplicatedOnly Gets or sets a value indicating whether this query contains only replicated tables. This is a hint for potentially more effective execution. Declaration [Obsolete(\"No longer used as of Apache Ignite 2.8.\")] public bool ReplicatedOnly { get; set; } Property Value Type Description System.Boolean Schema Gets or sets the default schema name for the query. If not set, current cache name is used, which means you can omit schema name for tables within the current cache. Declaration public string Schema { get; set; } Property Value Type Description System.String Sql SQL. Declaration public string Sql { get; set; } Property Value Type Description System.String Timeout Gets or sets the query timeout. Query will be automatically cancelled if the execution timeout is exceeded. Default is System.TimeSpan.Zero , which means no timeout. Declaration public TimeSpan Timeout { get; set; } Property Value Type Description System.TimeSpan UpdateBatchSize Gets or sets batch size for update queries. Default is 1 ( DefaultUpdateBatchSize . Declaration public int UpdateBatchSize { get; set; } Property Value Type Description System.Int32 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 [Obsolete(\"Use SqlFieldsQuery instead. For strongly-typed queries use Apache.Ignite.Linq. SqlQuery is a limited subset of SqlFieldsQuery.\")] public class SqlQuery : QueryBase, IQueryBaseInternal Constructors SqlQuery(String, String, Boolean, Object[]) Constructor. Declaration public SqlQuery(string queryType, string sql, bool local, params object[] args) Parameters Type Name Description System.String queryType Type. System.String sql SQL. System.Boolean local Whether query should be executed locally. System.Object [] args Arguments. SqlQuery(String, String, Object[]) Constructor. Declaration public SqlQuery(string queryType, string sql, params object[] args) Parameters Type Name Description System.String queryType Type. System.String sql SQL. System.Object [] args Arguments. SqlQuery(Type, String, Boolean, Object[]) Constructor. Declaration public SqlQuery(Type queryType, string sql, bool local, params object[] args) Parameters Type Name Description System.Type queryType Type. System.String sql SQL. System.Boolean local Whether query should be executed locally. System.Object [] args Arguments. SqlQuery(Type, String, Object[]) Constructor. Declaration public SqlQuery(Type queryType, string sql, params object[] args) Parameters Type Name Description System.Type queryType Type. System.String sql SQL. System.Object [] args Arguments. Properties Arguments Arguments. Declaration public object[] Arguments { get; set; } Property Value Type Description System.Object [] EnableDistributedJoins Gets or sets a value indicating whether distributed joins should be enabled for this query. When disabled, join results will only contain colocated data (joins work locally). When enabled, joins work as expected, no matter how the data is distributed. Declaration public bool EnableDistributedJoins { get; set; } Property Value Type Description System.Boolean true if enable distributed joins should be enabled; otherwise, false . QueryType Type. Declaration public string QueryType { get; set; } Property Value Type Description System.String ReplicatedOnly Gets or sets a value indicating whether this query contains only replicated tables. This is a hint for potentially more effective execution. Declaration [Obsolete(\"No longer used as of Apache Ignite 2.8.\")] public bool ReplicatedOnly { get; set; } Property Value Type Description System.Boolean Sql SQL. Declaration public string Sql { get; set; } Property Value Type Description System.String Timeout Gets or sets the query timeout. Query will be automatically cancelled if the execution timeout is exceeded. Default is System.TimeSpan.Zero , which means no timeout. Declaration public TimeSpan Timeout { get; set; } Property Value Type Description System.TimeSpan Methods ToString() Returns a System.String that represents this instance. Declaration public override string ToString() Returns Type Description System.String A System.String that represents this instance. Overrides System.Object.ToString()"
  },
  "api/Apache.Ignite.Core.Client.Datastream.DataStreamerClientOptions.html": {
    "href": "api/Apache.Ignite.Core.Client.Datastream.DataStreamerClientOptions.html",
    "title": "Class DataStreamerClientOptions | Apache Ignite.NET",
    "keywords": "Class DataStreamerClientOptions Thin client data streamer options. To set a receiver, use generic class DataStreamerClientOptions<TK, TV> . See also IDataStreamerClient<TK, TV> , GetDataStreamer<TK, TV>(String) . Inheritance System.Object DataStreamerClientOptions DataStreamerClientOptions <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.Client.Datastream Assembly : Apache.Ignite.Core.dll Syntax public class DataStreamerClientOptions Constructors DataStreamerClientOptions() Initializes a new instance of DataStreamerClientOptions . Declaration public DataStreamerClientOptions() DataStreamerClientOptions(DataStreamerClientOptions) Initializes a new instance of DataStreamerClientOptions . Declaration public DataStreamerClientOptions(DataStreamerClientOptions options) Parameters Type Name Description DataStreamerClientOptions options Options to copy from. Fields DefaultPerNodeBufferSize The default client-side per-node buffer size (cache entries count), see PerNodeBufferSize . Declaration public const int DefaultPerNodeBufferSize = 512 Field Value Type Description System.Int32 DefaultPerNodeParallelOperations The default limit for parallel operations per server node connection, see PerNodeParallelOperations . Calculated as System.Environment.ProcessorCount times 4. Declaration public static readonly int DefaultPerNodeParallelOperations Field Value Type Description System.Int32 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 public bool AllowOverwrite { get; set; } Property Value Type Description System.Boolean AutoFlushInterval Gets or sets the automatic flush interval. Data streamer buffers the data for performance reasons. The buffer is flushed in the following cases: Buffer is full. Flush() is called. Periodically when AutoFlushInterval is set. When set to System.TimeSpan.Zero , automatic flush is disabled. Default is System.TimeSpan.Zero (disabled). Declaration public TimeSpan AutoFlushInterval { get; set; } Property Value Type Description System.TimeSpan PerNodeBufferSize Gets or sets the size (entry count) of per node buffer. Default is DefaultPerNodeBufferSize . Declaration public int PerNodeBufferSize { get; set; } Property Value Type Description System.Int32 PerNodeParallelOperations Gets or sets the limit for parallel operations per server node. Default is DefaultPerNodeParallelOperations . Declaration public int PerNodeParallelOperations { get; set; } Property Value Type Description System.Int32 ReceiverKeepBinary Gets or sets a value indicating whether Receiver should operate in binary mode. Declaration public bool ReceiverKeepBinary { get; set; } Property Value Type Description System.Boolean SkipStore Gets or sets a 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 public bool SkipStore { get; set; } Property Value Type Description System.Boolean"
  },
  "api/Apache.Ignite.Core.Client.Datastream.IDataStreamerClient-2.html": {
    "href": "api/Apache.Ignite.Core.Client.Datastream.IDataStreamerClient-2.html",
    "title": "Interface IDataStreamerClient<TK, TV> | Apache Ignite.NET",
    "keywords": "Interface IDataStreamerClient<TK, TV> Thin client data streamer. Data streamer is an efficient and fault-tolerant way to load data into cache. Updates are buffered and mapped to primary nodes to ensure minimal data movement and optimal resource utilization. Update failures caused by cluster topology changes are retried automatically. Note that streamer send data to remote nodes asynchronously, so cache updates can be reordered. Instances of the implementing class are thread-safe: data can be added from multiple threads. Closing and disposing: System.IDisposable.Dispose() method calls Close(Boolean) (false) . This will flush any remaining data to the cache synchronously. To avoid blocking threads when exiting using() block, use CloseAsync(Boolean) . Inherited Members System.IDisposable.Dispose() Namespace : Apache.Ignite.Core.Client.Datastream Assembly : Apache.Ignite.Core.dll Syntax public interface IDataStreamerClient<TK, TV> : IDisposable Type Parameters Name Description TK TV Properties CacheName Gets the cache name. Declaration string CacheName { get; } Property Value Type Description System.String IsClosed Gets a value indicating whether this streamer is closed. Declaration bool IsClosed { get; } Property Value Type Description System.Boolean Options Gets the options. Declaration DataStreamerClientOptions<TK, TV> Options { get; } Property Value Type Description DataStreamerClientOptions <TK, TV> Methods Add(TK, TV) Adds an entry to the streamer. This method adds an entry to the buffer. When the buffer gets full, it is scheduled for asynchronous background flush. This method will block when the number of active flush operations exceeds PerNodeParallelOperations . Declaration void Add(TK key, TV val) Parameters Type Name Description TK key Key. TV val Value. When null, cache entry will be removed. Close(Boolean) Closes this streamer, optionally loading any remaining data into the cache. Declaration void Close(bool cancel) Parameters Type Name Description System.Boolean cancel Whether to cancel ongoing loading operations. When set to true , there is no guarantee which part of remaining data will be actually loaded into the cache. CloseAsync(Boolean) Closes this streamer, optionally loading any remaining data into the cache. Declaration Task CloseAsync(bool cancel) Parameters Type Name Description System.Boolean cancel Whether to cancel ongoing loading operations. When set to true , there is no guarantee which part of remaining data will be actually loaded into the cache. Returns Type Description System.Threading.Tasks.Task Flush() Flushes all buffered entries. Declaration void Flush() FlushAsync() Flushes all buffered entries asynchronously. Declaration Task FlushAsync() Returns Type Description System.Threading.Tasks.Task Remove(TK) Adds a removal entry to the streamer. Cache entry with the specified key will be removed. Removal requires AllowOverwrite to be true . This method adds an entry to the buffer. When the buffer gets full, it is scheduled for asynchronous background flush. This method will block when the number of active flush operations exceeds PerNodeParallelOperations . Declaration void Remove(TK key) Parameters Type Name Description TK key"
  },
  "api/Apache.Ignite.Core.Client.Transactions.ITransactionsClient.html": {
    "href": "api/Apache.Ignite.Core.Client.Transactions.ITransactionsClient.html",
    "title": "Interface ITransactionsClient | Apache Ignite.NET",
    "keywords": "Interface ITransactionsClient Ignite Thin Client transactions facade. Transactions are bound to the thread started the transaction. After that, each cache operation within this thread will belong to the corresponding transaction until the transaction is committed, rolled back or closed. Should not be used with async calls. You can use cache transactions as follows: using (var tx = igniteClient.GetTransactions().TxStart()) { 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.Remove(\"k2\"); // Commit the transaction. tx.Commit(); } Alternatively, System.Transactions.TransactionScope can be used to start Ignite transactions. using (var ts = new TransactionScope()) { 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.Remove(\"k2\"); // Commit the transaction. ts.Complete(); } Namespace : Apache.Ignite.Core.Client.Transactions Assembly : Apache.Ignite.Core.dll Syntax public interface ITransactionsClient Properties DefaultTimeout Gets the default transaction timeout. Declaration TimeSpan DefaultTimeout { 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 ITransactionClient Tx { get; } Property Value Type Description ITransactionClient Transaction started by this thread or null if this thread does not have a transaction. Methods TxStart() Starts a new transaction with the default isolation level, concurrency and timeout. Default values for transaction isolation level, concurrency and timeout can be configured via TransactionClientConfiguration . Should not be used with async calls. Declaration ITransactionClient TxStart() Returns Type Description ITransactionClient New transaction. TxStart(TransactionConcurrency, TransactionIsolation) Starts a new transaction with the specified concurrency and isolation. Should not be used with async calls. Declaration ITransactionClient TxStart(TransactionConcurrency concurrency, TransactionIsolation isolation) Parameters Type Name Description TransactionConcurrency concurrency Concurrency. TransactionIsolation isolation Isolation. Returns Type Description ITransactionClient New transaction. TxStart(TransactionConcurrency, TransactionIsolation, TimeSpan) Starts a new transaction with the specified concurrency, isolation and timeout. Should not be used with async calls. Declaration ITransactionClient TxStart(TransactionConcurrency concurrency, TransactionIsolation isolation, TimeSpan timeout) Parameters Type Name Description TransactionConcurrency concurrency Concurrency. TransactionIsolation isolation Isolation. System.TimeSpan timeout Timeout. TimeSpan. Zero for indefinite timeout. Returns Type Description ITransactionClient New transaction. WithLabel(String) Returns instance of ITransactionsClient to mark a transaction instance with a special label. The label is helpful for diagnostic and exposed to some diagnostic tools like SYS.TRANSACTIONS system view, control.sh commands, JMX TransactionsMXBean, long-running transactions dump in logs and Label via GetLocalActiveTransactions() . Declaration ITransactionsClient WithLabel(string label) Parameters Type Name Description System.String label Label. Returns Type Description ITransactionsClient ITransactionsClient"
  },
  "api/Apache.Ignite.Core.Client.Transactions.TransactionClientConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Client.Transactions.TransactionClientConfiguration.html",
    "title": "Class TransactionClientConfiguration | Apache Ignite.NET",
    "keywords": "Class TransactionClientConfiguration Thin client transactions configuration. Default values specified here will be used by TxStart() . Inheritance System.Object TransactionClientConfiguration 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.Transactions Assembly : Apache.Ignite.Core.dll Syntax public class TransactionClientConfiguration Constructors TransactionClientConfiguration() Initializes a new instance of the TransactionClientConfiguration class. Declaration public TransactionClientConfiguration() TransactionClientConfiguration(TransactionClientConfiguration) Initializes a new instance of the TransactionClientConfiguration class. Declaration public TransactionClientConfiguration(TransactionClientConfiguration cfg) Parameters Type Name Description TransactionClientConfiguration cfg The configuration to copy. Fields DefaultDefaultTimeout The default value for DefaultTransactionIsolation property. Declaration public static readonly TimeSpan DefaultDefaultTimeout 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 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 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"
  },
  "api/Apache.Ignite.Core.Common.IgniteProductVersion.html": {
    "href": "api/Apache.Ignite.Core.Common.IgniteProductVersion.html",
    "title": "Class IgniteProductVersion | Apache Ignite.NET",
    "keywords": "Class IgniteProductVersion Represents node version. Inheritance System.Object IgniteProductVersion Implements System.IEquatable < IgniteProductVersion > System.IComparable < IgniteProductVersion > Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Common Assembly : Apache.Ignite.Core.dll Syntax public class IgniteProductVersion : IEquatable<IgniteProductVersion>, IComparable<IgniteProductVersion> Constructors IgniteProductVersion(Byte, Byte, Byte, String, DateTime, Byte[]) Constructor. Declaration public IgniteProductVersion(byte major, byte minor, byte maintenance, string stage, DateTime releaseDate, byte[] revHash) Parameters Type Name Description System.Byte major Major version number. System.Byte minor Minor version number. System.Byte maintenance Maintenance version number. System.String stage Stage of development. System.DateTime releaseDate Revision date. System.Byte [] revHash Revision hash. Properties Maintenance Gets the maintenance version number. Declaration public byte Maintenance { get; } Property Value Type Description System.Byte Major Gets the major version number. Declaration public byte Major { get; } Property Value Type Description System.Byte Minor Gets the minor version number. Declaration public byte Minor { get; } Property Value Type Description System.Byte ReleaseDate Gets the release date. Declaration public DateTime ReleaseDate { get; } Property Value Type Description System.DateTime RevisionHash Gets the revision hash Declaration public byte[] RevisionHash { get; } Property Value Type Description System.Byte [] Stage Gets the stage of development. Declaration public string Stage { get; } Property Value Type Description System.String Methods CompareTo(IgniteProductVersion) Declaration public int CompareTo(IgniteProductVersion other) Parameters Type Name Description IgniteProductVersion other Returns Type Description System.Int32 Equals(IgniteProductVersion) Declaration public bool Equals(IgniteProductVersion other) Parameters Type Name Description IgniteProductVersion other Returns Type Description System.Boolean Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements System.IEquatable<T> System.IComparable<T>"
  },
  "api/Apache.Ignite.Core.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.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.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.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 loads data efficiently into cache. Updates are buffered and mapped to primary nodes to ensure minimal data movement and optimal resource utilization. Note that streamer loads data to remote nodes in parallel, so cache updates can be reordered. 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 Gets or sets the automatic flush frequency, in milliseconds. Data streamer buffers the data for performance reasons. The buffer is flushed in the following cases: Buffer is full. Flush() or TryFlush() is called. Periodically when AutoFlushInterval is set. If set to 0 , automatic flush is disabled. Default is 0 (disabled). Declaration [Obsolete(\"Use AutoFlushInterval.\")] long AutoFlushFrequency { get; set; } Property Value Type Description System.Int64 AutoFlushInterval Gets or sets the automatic flush interval. Data streamer buffers the data for performance reasons. The buffer is flushed in the following cases: Buffer is full. Flush() or TryFlush() is called. Periodically when AutoFlushInterval is set. When set to System.TimeSpan.Zero , automatic flush is disabled. Default is System.TimeSpan.Zero (disabled). Declaration TimeSpan AutoFlushInterval { get; set; } Property Value Type Description System.TimeSpan 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 Add(TK, TV) Adds single key-value pair for loading. Passing null as value will be interpreted as removal. Declaration void Add(TK key, TV val) Parameters Type Name Description TK key Key. TV val Value. Add(ICollection<KeyValuePair<TK, TV>>) Adds collection of key-value pairs for loading. Declaration void Add(ICollection<KeyValuePair<TK, TV>> entries) Parameters Type Name Description System.Collections.Generic.ICollection < System.Collections.Generic.KeyValuePair <TK, TV>> entries Entries. Add(KeyValuePair<TK, TV>) Adds single key-value pair for loading. Passing null as pair's value will be interpreted as removal. Declaration void Add(KeyValuePair<TK, TV> pair) Parameters Type Name Description System.Collections.Generic.KeyValuePair <TK, TV> pair Key-value pair. AddData(TK, TV) Adds single key-value pair for loading. Passing null as value will be interpreted as removal. Declaration [Obsolete(\"Use Add.\")] 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 [Obsolete(\"Use Add.\")] 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 [Obsolete(\"Use Add.\")] 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 into the cache. Declaration void Close(bool cancel) Parameters Type Name Description System.Boolean cancel Whether to cancel ongoing loading operations. When set to true , there is no guarantee which part of remaining data will be actually loaded into the cache. Flush() Loads any remaining buffered data, but doesn't close the streamer. Declaration void Flush() FlushAsync() Loads any remaining buffered data, but doesn't close the streamer. Declaration Task FlushAsync() Returns Type Description System.Threading.Tasks.Task GetCurrentBatchTask() Gets the task for the current batch. This task completes when current and all previous batches are flushed, either explicitly with Flush() , or automatically when the buffer is full or AutoFlushFrequency is set. Declaration Task GetCurrentBatchTask() Returns Type Description System.Threading.Tasks.Task Remove(TK) Adds key for removal. Declaration void Remove(TK key) Parameters Type Name Description TK key Key. RemoveData(TK) Adds key for removal. Declaration [Obsolete(\"Use Remove.\")] 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 [Obsolete(\"Use FlushAsync\")] void TryFlush() WithKeepBinary<TK1, TV1>() Gets streamer instance with binary mode enabled, changing key and/or value types if necessary. In binary mode stream receiver gets data in binary format. You can only change key/value types when transitioning from non-binary to binary streamer; Changing type of binary streamer is not allowed and will throw an System.InvalidOperationException Declaration IDataStreamer<TK1, TV1> WithKeepBinary<TK1, TV1>() Returns Type Description IDataStreamer <TK1, TV1> Streamer instance with binary mode enabled. Type Parameters Name Description TK1 Key type in binary mode. TV1 Value type in binary mode."
  },
  "api/Apache.Ignite.Core.Discovery.Tcp.html": {
    "href": "api/Apache.Ignite.Core.Discovery.Tcp.html",
    "title": "Namespace Apache.Ignite.Core.Discovery.Tcp | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Discovery.Tcp Classes TcpDiscoveryIpFinderBase Base IpFinder class. TcpDiscoverySpi TCP discover service provider. Interfaces ITcpDiscoveryIpFinder Represents an IP finder for TcpDiscoverySpi . Only predefined implementations are supported now: TcpDiscoveryStaticIpFinder , TcpDiscoveryMulticastIpFinder ."
  },
  "api/Apache.Ignite.Core.Discovery.html": {
    "href": "api/Apache.Ignite.Core.Discovery.html",
    "title": "Namespace Apache.Ignite.Core.Discovery | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Discovery Interfaces IDiscoverySpi Represents a discovery service provider interface. Only predefined implementation is supported now: TcpDiscoverySpi ."
  },
  "api/Apache.Ignite.Core.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.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.Lifecycle.ILifecycleHandler.html": {
    "href": "api/Apache.Ignite.Core.Lifecycle.ILifecycleHandler.html",
    "title": "Interface ILifecycleHandler | Apache Ignite.NET",
    "keywords": "Interface ILifecycleHandler Handles lifecycle events defined in LifecycleEventType . Use this interface whenever you need to plug some custom logic before or after Ignite startup and stopping routines. There are four events you can react to: BeforeNodeStartInvoked before Ignite startup routine is initiated. Note that Ignite is not available during this event, therefore if you injected an Ignite instance via InstanceResourceAttribute attribute, you cannot use it yet. AfterNodeStartInvoked right after Ignite has started. At this point, if you injected an Ignite instance via InstanceResourceAttribute attribute, you can start using it. BeforeNodeStopInvoked right before Ignite stop routine is initiated. Ignite is still available at this stage, so if you injected an Ignite instance via InstanceResourceAttribute attribute, you can use it. AfterNodeStopInvoked right after Ignite has stopped. Note that Ignite is not available during this event. Namespace : Apache.Ignite.Core.Lifecycle Assembly : Apache.Ignite.Core.dll Syntax public interface ILifecycleHandler Methods OnLifecycleEvent(LifecycleEventType) This method is called when lifecycle event occurs. Declaration void OnLifecycleEvent(LifecycleEventType evt) Parameters Type Name Description LifecycleEventType evt Lifecycle event."
  },
  "api/Apache.Ignite.Core.Lifecycle.LifecycleEventType.html": {
    "href": "api/Apache.Ignite.Core.Lifecycle.LifecycleEventType.html",
    "title": "Enum LifecycleEventType | Apache Ignite.NET",
    "keywords": "Enum LifecycleEventType Ignite lifecycle event types. These events are used to notify lifecycle beans about changes in Ignite lifecycle state. For more information and detailed examples refer to ILifecycleHandler documentation. Namespace : Apache.Ignite.Core.Lifecycle Assembly : Apache.Ignite.Core.dll Syntax public enum LifecycleEventType Fields Name Description AfterNodeStart Invoked after node startup is complete. Node is fully initialized and fully functional. AfterNodeStop Invoked after node had stopped. Node is stopped and cannot be used. BeforeNodeStart Invoked before node startup routine. Node is not initialized and cannot be used. BeforeNodeStop Invoked before node stopping routine. Node is fully functional at this point."
  },
  "api/Apache.Ignite.Core.Lifecycle.html": {
    "href": "api/Apache.Ignite.Core.Lifecycle.html",
    "title": "Namespace Apache.Ignite.Core.Lifecycle | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Lifecycle Classes ClientReconnectEventArgs Contains client reconnect event data. Interfaces ILifecycleHandler Handles lifecycle events defined in LifecycleEventType . Use this interface whenever you need to plug some custom logic before or after Ignite startup and stopping routines. There are four events you can react to: BeforeNodeStartInvoked before Ignite startup routine is initiated. Note that Ignite is not available during this event, therefore if you injected an Ignite instance via InstanceResourceAttribute attribute, you cannot use it yet. AfterNodeStartInvoked right after Ignite has started. At this point, if you injected an Ignite instance via InstanceResourceAttribute attribute, you can start using it. BeforeNodeStopInvoked right before Ignite stop routine is initiated. Ignite is still available at this stage, so if you injected an Ignite instance via InstanceResourceAttribute attribute, you can use it. AfterNodeStopInvoked right after Ignite has stopped. Note that Ignite is not available during this event. Enums LifecycleEventType Ignite lifecycle event types. These events are used to notify lifecycle beans about changes in Ignite lifecycle state. For more information and detailed examples refer to ILifecycleHandler documentation."
  },
  "api/Apache.Ignite.Core.Log.CategoryLogger.html": {
    "href": "api/Apache.Ignite.Core.Log.CategoryLogger.html",
    "title": "Class CategoryLogger | Apache Ignite.NET",
    "keywords": "Class CategoryLogger Wrapping logger with a predefined category. When Log(LogLevel, String, Object[], IFormatProvider, String, String, Exception) method is called, and category parameter is null, predefined category will be used. Inheritance System.Object CategoryLogger Implements ILogger Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Log Assembly : Apache.Ignite.Core.dll Syntax public class CategoryLogger : ILogger Constructors CategoryLogger(ILogger, String) Initializes a new instance of the CategoryLogger class. Declaration public CategoryLogger(ILogger logger, string category) Parameters Type Name Description ILogger logger The logger to wrap. System.String category The category. Methods IsEnabled(LogLevel) Determines whether the specified log level is enabled. Declaration public bool IsEnabled(LogLevel level) Parameters Type Name Description LogLevel level The level. Returns Type Description System.Boolean Value indicating whether the specified log level is enabled Log(LogLevel, String, Object[], IFormatProvider, String, String, Exception) Logs the specified message. Declaration public void Log(LogLevel level, string message, object[] args, IFormatProvider formatProvider, string category, string nativeErrorInfo, Exception ex) Parameters Type Name Description LogLevel level The level. System.String message The message. System.Object [] args The arguments to format message . Can be null (formatting will not occur). System.IFormatProvider formatProvider The format provider. Can be null if args is null. System.String category The logging category name. System.String nativeErrorInfo The native error information. System.Exception ex The exception. Can be null. Implements ILogger Extension Methods LoggerExtensions.Trace(ILogger, String) LoggerExtensions.Trace(ILogger, String, Object[]) LoggerExtensions.Trace(ILogger, Exception, String) LoggerExtensions.Trace(ILogger, Exception, String, Object[]) LoggerExtensions.Debug(ILogger, String) LoggerExtensions.Debug(ILogger, String, Object[]) LoggerExtensions.Debug(ILogger, Exception, String) LoggerExtensions.Debug(ILogger, Exception, String, Object[]) LoggerExtensions.Info(ILogger, String) LoggerExtensions.Info(ILogger, String, Object[]) LoggerExtensions.Info(ILogger, Exception, String) LoggerExtensions.Info(ILogger, Exception, String, Object[]) LoggerExtensions.Warn(ILogger, String) LoggerExtensions.Warn(ILogger, String, Object[]) LoggerExtensions.Warn(ILogger, Exception, String) LoggerExtensions.Warn(ILogger, Exception, String, Object[]) LoggerExtensions.Error(ILogger, String) LoggerExtensions.Error(ILogger, String, Object[]) LoggerExtensions.Error(ILogger, Exception, String) LoggerExtensions.Error(ILogger, Exception, String, Object[]) LoggerExtensions.Log(ILogger, LogLevel, String) LoggerExtensions.Log(ILogger, LogLevel, String, Object[]) LoggerExtensions.Log(ILogger, LogLevel, Exception, String) LoggerExtensions.Log(ILogger, LogLevel, Exception, String, Object[]) LoggerExtensions.GetLogger(ILogger, String) LoggerExtensions.GetLogger(ILogger, Type)"
  },
  "api/Apache.Ignite.Core.Services.IServiceContext.html": {
    "href": "api/Apache.Ignite.Core.Services.IServiceContext.html",
    "title": "Interface IServiceContext | Apache Ignite.NET",
    "keywords": "Interface IServiceContext Represents service execution context. Namespace : Apache.Ignite.Core.Services Assembly : Apache.Ignite.Core.dll Syntax public interface IServiceContext Properties AffinityKey Gets affinity key used for key-to-node affinity calculation. This parameter is optional and is set only when key-affinity service was deployed. Declaration object AffinityKey { get; } Property Value Type Description System.Object Affinity key, possibly null. CacheName Gets cache name used for key-to-node affinity calculation. This parameter is optional and is set only when key-affinity service was deployed. Declaration string CacheName { get; } Property Value Type Description System.String Cache name, possibly null. ExecutionId Gets service execution ID. Execution ID is guaranteed to be unique across all service deployments. Declaration Guid ExecutionId { get; } Property Value Type Description System.Guid Service execution ID. IsCancelled Get flag indicating whether service has been cancelled or not. Declaration bool IsCancelled { get; } Property Value Type Description System.Boolean Flag indicating whether service has been cancelled or not. Name Gets service name. Declaration string Name { get; } Property Value Type Description System.String Service name."
  },
  "api/Apache.Ignite.Core.Services.IServiceDescriptor.html": {
    "href": "api/Apache.Ignite.Core.Services.IServiceDescriptor.html",
    "title": "Interface IServiceDescriptor | Apache Ignite.NET",
    "keywords": "Interface IServiceDescriptor Service deployment descriptor. Namespace : Apache.Ignite.Core.Services Assembly : Apache.Ignite.Core.dll Syntax public interface IServiceDescriptor Properties AffinityKey Gets affinity key used for key-to-node affinity calculation. This parameter is optional and is set only when key-affinity service was deployed. Declaration object AffinityKey { get; } Property Value Type Description System.Object Affinity key, possibly null. CacheName Gets cache name used for key-to-node affinity calculation. This parameter is optional and is set only when key-affinity service was deployed. Declaration string CacheName { get; } Property Value Type Description System.String Cache name, possibly null. MaxPerNodeCount Gets maximum allowed number of deployed services on each node, 0 for unlimited. Declaration int MaxPerNodeCount { get; } Property Value Type Description System.Int32 Maximum allowed total number of deployed services on each node, 0 for unlimited. Name Gets service name. Declaration string Name { get; } Property Value Type Description System.String Service name. OriginNodeId Gets affinity key used for key-to-node affinity calculation. This parameter is optional and is set only when key-affinity service was deployed. Declaration Guid OriginNodeId { get; } Property Value Type Description System.Guid Affinity key, possibly null. TopologySnapshot Gets service deployment topology snapshot. Service topology snapshot is represented by number of service instances deployed on a node mapped to node ID. Declaration IDictionary<Guid, int> TopologySnapshot { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.Guid , System.Int32 > Map of number of service instances per node ID. TotalCount Gets maximum allowed total number of deployed services in the grid, 0 for unlimited. Declaration int TotalCount { get; } Property Value Type Description System.Int32 Maximum allowed total number of deployed services in the grid, 0 for unlimited. Type Gets the service type. Declaration Type Type { get; } Property Value Type Description System.Type Service type."
  },
  "api/Apache.Ignite.Core.Services.IServices.html": {
    "href": "api/Apache.Ignite.Core.Services.IServices.html",
    "title": "Interface IServices | Apache Ignite.NET",
    "keywords": "Interface IServices Defines functionality to deploy distributed services in the Ignite. Namespace : Apache.Ignite.Core.Services Assembly : Apache.Ignite.Core.dll Syntax public interface IServices Properties ClusterGroup Gets the cluster group to which this instance belongs. Declaration IClusterGroup ClusterGroup { get; } Property Value Type Description IClusterGroup The cluster group to which this instance belongs. Methods Cancel(String) Cancels service deployment. If a service with specified name was deployed on the grid, then Cancel(IServiceContext) method will be called on it. Note that Ignite cannot guarantee that the service exits from Execute(IServiceContext) method whenever Cancel(IServiceContext) is called. It is up to the user to make sure that the service code properly reacts to cancellations. Declaration void Cancel(string name) Parameters Type Name Description System.String name Name of the service to cancel. CancelAll() Cancels all deployed services. Note that depending on user logic, it may still take extra time for a service to finish execution, even after it was cancelled. Declaration void CancelAll() CancelAllAsync() Cancels all deployed services. Note that depending on user logic, it may still take extra time for a service to finish execution, even after it was cancelled. Declaration Task CancelAllAsync() Returns Type Description System.Threading.Tasks.Task CancelAsync(String) Cancels service deployment. If a service with specified name was deployed on the grid, then Cancel(IServiceContext) method will be called on it. Note that Ignite cannot guarantee that the service exits from Execute(IServiceContext) method whenever Cancel(IServiceContext) is called. It is up to the user to make sure that the service code properly reacts to cancellations. Declaration Task CancelAsync(string name) Parameters Type Name Description System.String name Name of the service to cancel. Returns Type Description System.Threading.Tasks.Task Deploy(ServiceConfiguration) Deploys instances of the service in the Ignite according to provided configuration. Declaration void Deploy(ServiceConfiguration configuration) Parameters Type Name Description ServiceConfiguration configuration Service configuration. DeployAll(IEnumerable<ServiceConfiguration>) Deploys multiple services described by provided configurations. Depending on specified parameters, multiple instances of the same service may be deployed. Whenever topology changes, Ignite will automatically rebalance the deployed services within cluster to make sure that each node will end up with about equal number of deployed instances whenever possible. If deployment of some of the provided services fails, then ServiceDeploymentException containing a list of failed service configurations ( FailedConfigurations ) will be thrown. It is guaranteed that all services that were provided to this method and are not present in the list of failed services are successfully deployed by the moment of the exception being thrown. Note that if exception is thrown, then partial deployment may have occurred. Declaration void DeployAll(IEnumerable<ServiceConfiguration> configurations) Parameters Type Name Description System.Collections.Generic.IEnumerable < ServiceConfiguration > configurations Collection of service configurations to be deployed. DeployAllAsync(IEnumerable<ServiceConfiguration>) Asynchronously deploys multiple services described by provided configurations. Depending on specified parameters, multiple instances of the same service may be deployed ( ServiceConfiguration ). Whenever topology changes, Ignite will automatically rebalance the deployed services within cluster to make sure that each node will end up with about equal number of deployed instances whenever possible. If deployment of some of the provided services fails, then ServiceDeploymentException containing a list of failed service configurations ( FailedConfigurations ) will be thrown. It is guaranteed that all services, that were provided to this method and are not present in the list of failed services, are successfully deployed by the moment of the exception being thrown. Note that if exception is thrown, then partial deployment may have occurred. Declaration Task DeployAllAsync(IEnumerable<ServiceConfiguration> configurations) Parameters Type Name Description System.Collections.Generic.IEnumerable < ServiceConfiguration > configurations Collection of service configurations to be deployed. Returns Type Description System.Threading.Tasks.Task DeployAsync(ServiceConfiguration) Deploys instances of the service in the Ignite according to provided configuration. Declaration Task DeployAsync(ServiceConfiguration configuration) Parameters Type Name Description ServiceConfiguration configuration Service configuration. Returns Type Description System.Threading.Tasks.Task DeployClusterSingleton(String, IService) Deploys a cluster-wide singleton service. Ignite guarantees that there is always one instance of the service in the cluster. In case if Ignite node on which the service was deployed crashes or stops, Ignite will automatically redeploy it on another node. However, if the node on which the service is deployed remains in topology, then the service will always be deployed on that node only, regardless of topology changes. Note that in case of topology changes, due to network delays, there may be a temporary situation when a singleton service instance will be active on more than one node (e.g. crash detection delay). Declaration void DeployClusterSingleton(string name, IService service) Parameters Type Name Description System.String name Service name. IService service Service instance. DeployClusterSingletonAsync(String, IService) Deploys a cluster-wide singleton service. Ignite guarantees that there is always one instance of the service in the cluster. In case if Ignite node on which the service was deployed crashes or stops, Ignite will automatically redeploy it on another node. However, if the node on which the service is deployed remains in topology, then the service will always be deployed on that node only, regardless of topology changes. Note that in case of topology changes, due to network delays, there may be a temporary situation when a singleton service instance will be active on more than one node (e.g. crash detection delay). Declaration Task DeployClusterSingletonAsync(string name, IService service) Parameters Type Name Description System.String name Service name. IService service Service instance. Returns Type Description System.Threading.Tasks.Task DeployKeyAffinitySingleton<TK>(String, IService, String, TK) Deploys one instance of this service on the primary node for a given affinity key. Whenever topology changes and primary node assignment changes, Ignite will always make sure that the service is undeployed on the previous primary node and deployed on the new primary node. Note that in case of topology changes, due to network delays, there may be a temporary situation when a service instance will be active on more than one node (e.g. crash detection delay). Declaration void DeployKeyAffinitySingleton<TK>(string name, IService service, string cacheName, TK affinityKey) Parameters Type Name Description System.String name Service name. IService service Service instance. System.String cacheName Name of the cache on which affinity for key should be calculated, null for default cache. TK affinityKey Affinity cache key. Type Parameters Name Description TK DeployKeyAffinitySingletonAsync<TK>(String, IService, String, TK) Deploys one instance of this service on the primary node for a given affinity key. Whenever topology changes and primary node assignment changes, Ignite will always make sure that the service is undeployed on the previous primary node and deployed on the new primary node. Note that in case of topology changes, due to network delays, there may be a temporary situation when a service instance will be active on more than one node (e.g. crash detection delay). Declaration Task DeployKeyAffinitySingletonAsync<TK>(string name, IService service, string cacheName, TK affinityKey) Parameters Type Name Description System.String name Service name. IService service Service instance. System.String cacheName Name of the cache on which affinity for key should be calculated, null for default cache. TK affinityKey Affinity cache key. Returns Type Description System.Threading.Tasks.Task Type Parameters Name Description TK DeployMultiple(String, IService, Int32, Int32) Deploys multiple instances of the service on the grid. Ignite will deploy a maximum amount of services equal to totalCount parameter making sure that there are no more than maxPerNodeCount service instances running on each node. Whenever topology changes, Ignite will automatically rebalance the deployed services within cluster to make sure that each node will end up with about equal number of deployed instances whenever possible. Declaration void DeployMultiple(string name, IService service, int totalCount, int maxPerNodeCount) Parameters Type Name Description System.String name Service name. IService service Service instance. System.Int32 totalCount Maximum number of deployed services in the grid, 0 for unlimited. System.Int32 maxPerNodeCount Maximum number of deployed services on each node, 0 for unlimited. DeployMultipleAsync(String, IService, Int32, Int32) Deploys multiple instances of the service on the grid. Ignite will deploy a maximum amount of services equal to totalCount parameter making sure that there are no more than maxPerNodeCount service instances running on each node. Whenever topology changes, Ignite will automatically rebalance the deployed services within cluster to make sure that each node will end up with about equal number of deployed instances whenever possible. Declaration Task DeployMultipleAsync(string name, IService service, int totalCount, int maxPerNodeCount) Parameters Type Name Description System.String name Service name. IService service Service instance. System.Int32 totalCount Maximum number of deployed services in the grid, 0 for unlimited. System.Int32 maxPerNodeCount Maximum number of deployed services on each node, 0 for unlimited. Returns Type Description System.Threading.Tasks.Task DeployNodeSingleton(String, IService) Deploys a per-node singleton service. Ignite guarantees that there is always one instance of the service running on each node. Whenever new nodes are started within the underlying cluster group, Ignite will automatically deploy one instance of the service on every new node. Declaration void DeployNodeSingleton(string name, IService service) Parameters Type Name Description System.String name Service name. IService service Service instance. DeployNodeSingletonAsync(String, IService) Deploys a per-node singleton service. Ignite guarantees that there is always one instance of the service running on each node. Whenever new nodes are started within the underlying cluster group, Ignite will automatically deploy one instance of the service on every new node. Declaration Task DeployNodeSingletonAsync(string name, IService service) Parameters Type Name Description System.String name Service name. IService service Service instance. Returns Type Description System.Threading.Tasks.Task GetDynamicServiceProxy(String) Gets a remote handle on the service as a dynamic object. If service is available locally, then local instance is returned, otherwise, a remote proxy is dynamically created and provided for the specified service. This method utilizes dynamic feature of the language and does not require any service interfaces or classes. Java services can be accessed as well as .NET services. Declaration dynamic GetDynamicServiceProxy(string name) Parameters Type Name Description System.String name Service name. Returns Type Description System.Object Either proxy over remote service or local service if it is deployed locally. GetDynamicServiceProxy(String, Boolean) Gets a remote handle on the service as a dynamic object. If service is available locally, then local instance is returned, otherwise, a remote proxy is dynamically created and provided for the specified service. This method utilizes dynamic feature of the language and does not require any service interfaces or classes. Java services can be accessed as well as .NET services. Declaration dynamic GetDynamicServiceProxy(string name, bool sticky) Parameters Type Name Description System.String name Service name. System.Boolean sticky Whether or not Ignite should always contact the same remote service or try to load-balance between services. Returns Type Description System.Object Either proxy over remote service or local service if it is deployed locally. GetService<T>(String) Gets deployed service with specified name. Declaration T GetService<T>(string name) Parameters Type Name Description System.String name Service name. Returns Type Description T Deployed service with specified name. Type Parameters Name Description T Service type. GetServiceDescriptors() Gets metadata about all deployed services. Declaration ICollection<IServiceDescriptor> GetServiceDescriptors() Returns Type Description System.Collections.Generic.ICollection < IServiceDescriptor > Metadata about all deployed services. GetServiceProxy<T>(String) Gets a remote handle on the service. If service is available locally, then local instance is returned, otherwise, a remote proxy is dynamically created and provided for the specified service. Declaration T GetServiceProxy<T>(string name)where T : class Parameters Type Name Description System.String name Service name. Returns Type Description T Either proxy over remote service or local service if it is deployed locally. Type Parameters Name Description T Service type. GetServiceProxy<T>(String, Boolean) Gets a remote handle on the service. If service is available locally, then local instance is returned, otherwise, a remote proxy is dynamically created and provided for the specified service. Declaration T GetServiceProxy<T>(string name, bool sticky)where T : class Parameters Type Name Description System.String name Service name. System.Boolean sticky Whether or not Ignite should always contact the same remote service or try to load-balance between services. Returns Type Description T Either proxy over remote service or local service if it is deployed locally. Type Parameters Name Description T Service type. GetServices<T>(String) Gets all deployed services with specified name. Declaration ICollection<T> GetServices<T>(string name) Parameters Type Name Description System.String name Service name. Returns Type Description System.Collections.Generic.ICollection <T> All deployed services with specified name. Type Parameters Name Description T Service type. WithKeepBinary() Returns an instance with binary mode enabled. Service method results will be kept in binary form. Declaration IServices WithKeepBinary() Returns Type Description IServices Instance with binary mode enabled. WithServerKeepBinary() Returns an instance with server-side binary mode enabled. Service method arguments will be kept in binary form. Declaration IServices WithServerKeepBinary() Returns Type Description IServices Instance with server-side binary mode enabled."
  },
  "api/Apache.Ignite.Core.Services.ServiceConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Services.ServiceConfiguration.html",
    "title": "Class ServiceConfiguration | Apache Ignite.NET",
    "keywords": "Class ServiceConfiguration Service configuration. Inheritance System.Object ServiceConfiguration Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Services Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class ServiceConfiguration Constructors ServiceConfiguration() Default constructor Declaration public ServiceConfiguration() Properties AffinityKey Gets or sets affinity key used for key-to-node affinity calculation. Declaration public object AffinityKey { get; set; } Property Value Type Description System.Object CacheName Gets or sets cache name used for key-to-node affinity calculation. Declaration public string CacheName { get; set; } Property Value Type Description System.String MaxPerNodeCount Gets or sets maximum number of deployed service instances on each node, 0 for unlimited. Declaration public int MaxPerNodeCount { get; set; } Property Value Type Description System.Int32 Name Gets or sets the service name. Declaration public string Name { get; set; } Property Value Type Description System.String NodeFilter Gets or sets node filter used to filter nodes on which the service will be deployed. Declaration public IClusterNodeFilter NodeFilter { get; set; } Property Value Type Description IClusterNodeFilter Service Gets or sets the service instance. Declaration public IService Service { get; set; } Property Value Type Description IService TotalCount Gets or sets the total number of deployed service instances in the cluster, 0 for unlimited. Declaration public int TotalCount { get; set; } Property Value Type Description System.Int32"
  },
  "api/Apache.Ignite.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 DefaultUpdateBatchSize Default value for UpdateBatchSize . Declaration public const int DefaultUpdateBatchSize = 1 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 Partitions Gets or sets partitions for the query. The query will be executed only on nodes which are primary for specified partitions. Declaration public int[] Partitions { get; set; } Property Value Type Description System.Int32 [] ReplicatedOnly Gets or sets a value indicating whether this query contains only replicated tables. This is a hint for potentially more effective execution. Declaration [Obsolete(\"No longer used as of Apache Ignite 2.8.\")] public bool ReplicatedOnly { get; set; } Property Value Type Description System.Boolean TableName Gets or sets the name of the table. Table name is equal to short class name of a cache value. When a cache has only one type of values, or only one QueryEntity defined, table name will be inferred and can be omitted (null). Declaration public string TableName { get; set; } Property Value Type Description System.String The name of the table. Timeout Gets or sets the query timeout. Query will be automatically cancelled if the execution timeout is exceeded. Default is System.TimeSpan.Zero , which means no timeout. Declaration public TimeSpan Timeout { get; set; } Property Value Type Description System.TimeSpan UpdateBatchSize Gets or sets batch size for update queries. Default is 1 ( DefaultUpdateBatchSize . Declaration public int UpdateBatchSize { get; set; } Property Value Type Description System.Int32"
  },
  "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.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.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.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.QueryBase.html": {
    "href": "api/Apache.Ignite.Core.Cache.Query.QueryBase.html",
    "title": "Class QueryBase | Apache Ignite.NET",
    "keywords": "Class QueryBase Base class for all Ignite cache entry queries. Inheritance System.Object QueryBase ScanQuery<TK, TV> SqlQuery TextQuery Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Query Assembly : Apache.Ignite.Core.dll Syntax public abstract class QueryBase : IQueryBaseInternal Constructors QueryBase() Initializes a new instance of the QueryBase class. Declaration protected QueryBase() Fields DefaultPageSize Default page size. Declaration public const int DefaultPageSize = 1024 Field Value Type Description System.Int32 Properties Local Local flag. When set query will be executed only on local node, so only local entries will be returned as query result. Defaults to false . Declaration public bool Local { get; set; } Property Value Type Description System.Boolean PageSize Optional page size. If set to 0 , then CacheQueryConfiguration.pageSize is used. Declaration public int PageSize { get; set; } Property Value Type Description System.Int32"
  },
  "api/Apache.Ignite.Core.Cache.Query.ScanQuery-2.html": {
    "href": "api/Apache.Ignite.Core.Cache.Query.ScanQuery-2.html",
    "title": "Class ScanQuery<TK, TV> | Apache Ignite.NET",
    "keywords": "Class ScanQuery<TK, TV> Scan query over cache entries. Will accept all the entries if no predicate was set. Inheritance System.Object QueryBase ScanQuery<TK, TV> Inherited Members QueryBase.DefaultPageSize QueryBase.Local QueryBase.PageSize System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Query Assembly : Apache.Ignite.Core.dll Syntax public class ScanQuery<TK, TV> : QueryBase, IQueryBaseInternal Type Parameters Name Description TK TV Constructors ScanQuery(ICacheEntryFilter<TK, TV>) Initializes a new instance of the ScanQuery<TK, TV> class. Declaration public ScanQuery(ICacheEntryFilter<TK, TV> filter = null) Parameters Type Name Description ICacheEntryFilter <TK, TV> filter The filter. Properties Filter Gets or sets the predicate. Declaration public ICacheEntryFilter<TK, TV> Filter { get; set; } Property Value Type Description ICacheEntryFilter <TK, TV> Partition Gets or sets partition number over which this query should iterate. If null, query will iterate over all partitions in the cache. Must be in the range [0, N) where N is partition number in the cache. Declaration public int ? Partition { get; set; } Property Value Type Description System.Nullable < System.Int32 >"
  },
  "api/Apache.Ignite.Core.Client.Cache.CacheClientConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Client.Cache.CacheClientConfiguration.html",
    "title": "Class CacheClientConfiguration | Apache Ignite.NET",
    "keywords": "Class CacheClientConfiguration Ignite client cache configuration. Same thing as CacheConfiguration , but with a subset of properties that can be accessed from Ignite thin client (see IIgniteClient ). Note that caches created from server nodes can be accessed from thin client, and vice versa. The only difference is that thin client can not read or write certain CacheConfiguration properties, so a separate class exists to make it clear which properties can be used. Inheritance System.Object CacheClientConfiguration Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Client.Cache Assembly : Apache.Ignite.Core.dll Syntax public class CacheClientConfiguration Constructors CacheClientConfiguration() Initializes a new instance of the CacheConfiguration class. Declaration public CacheClientConfiguration() CacheClientConfiguration(CacheConfiguration, Boolean) Initializes a new instance of the CacheClientConfiguration class, copying properties from provided server cache configuration. See also ToCacheConfiguration() . Declaration public CacheClientConfiguration(CacheConfiguration cacheConfiguration, bool ignoreUnsupportedProperties) Parameters Type Name Description CacheConfiguration cacheConfiguration Server cache configuration. System.Boolean ignoreUnsupportedProperties If set to true , ignores unsupported properties instead of throwing an exception. CacheClientConfiguration(CacheClientConfiguration) Initializes a new instance of the CacheConfiguration class, performing a deep copy of specified cache configuration. Declaration public CacheClientConfiguration(CacheClientConfiguration other) Parameters Type Name Description CacheClientConfiguration other The other configuration to perfrom deep copy from. CacheClientConfiguration(String) Initializes a new instance of the CacheConfiguration class. Declaration public CacheClientConfiguration(string name) Parameters Type Name Description System.String name Cache name. CacheClientConfiguration(String, QueryEntity[]) Initializes a new instance of the CacheConfiguration class. Declaration public CacheClientConfiguration(string name, params QueryEntity[] queryEntities) Parameters Type Name Description System.String name Cache name. QueryEntity [] queryEntities Query entities. CacheClientConfiguration(String, Type[]) Initializes a new instance of the CacheConfiguration class and populates QueryEntities according to provided query types. Declaration public CacheClientConfiguration(string name, params Type[] queryTypes) Parameters Type Name Description System.String name Cache name. System.Type [] queryTypes Collection of types to be registered as query entities. These types should use QuerySqlFieldAttribute to configure query fields and properties. Properties AtomicityMode Gets or sets cache atomicity mode. Declaration public CacheAtomicityMode AtomicityMode { get; set; } Property Value Type Description CacheAtomicityMode Backups Gets or sets number of nodes used to back up single partition for Partitioned cache. Declaration public int Backups { get; set; } Property Value Type Description System.Int32 CacheMode Gets or sets caching mode to use. Declaration public CacheMode CacheMode { get; set; } Property Value Type Description CacheMode CopyOnRead Gets or sets flag indicating whether copy of the value stored in cache should be created for cache operation implying return value. Declaration public bool CopyOnRead { get; set; } Property Value Type Description System.Boolean DataRegionName Gets or sets the name of the data region, see DataRegionConfiguration . Declaration public string DataRegionName { get; set; } Property Value Type Description System.String EagerTtl Gets or sets flag indicating whether expired cache entries will be eagerly removed from cache. When set to false, expired entries will be removed on next entry access. Declaration public bool EagerTtl { get; set; } Property Value Type Description System.Boolean EnableStatistics Gets or sets a value indicating whether statistics gathering is enabled on a cache. These statistics can be retrieved via GetMetrics() . Declaration public bool EnableStatistics { get; set; } Property Value Type Description System.Boolean ExpiryPolicyFactory Gets or sets the factory for IExpiryPolicy to be used for all cache operations, unless WithExpiryPolicy(IExpiryPolicy) is called. Default is null, which means no expiration. Declaration public IFactory<IExpiryPolicy> ExpiryPolicyFactory { get; set; } Property Value Type Description IFactory < IExpiryPolicy > GroupName Gets or sets the cache group name. Caches with the same group name share single underlying 'physical' cache (partition set), but are logically isolated. Since underlying cache is shared, the following configuration properties should be the same within group: CacheMode , PartitionLossPolicy , DataRegionName . Grouping caches reduces overall overhead, since internal data structures are shared. Declaration public string GroupName { get; set; } Property Value Type Description System.String KeyConfiguration Gets or sets the key configuration. Declaration public ICollection<CacheKeyConfiguration> KeyConfiguration { get; set; } Property Value Type Description System.Collections.Generic.ICollection < CacheKeyConfiguration > LockTimeout Gets or sets default lock acquisition timeout. Declaration public TimeSpan LockTimeout { get; set; } Property Value Type Description System.TimeSpan MaxConcurrentAsyncOperations Gets or sets maximum number of allowed concurrent asynchronous operations, 0 for unlimited. Declaration public int MaxConcurrentAsyncOperations { get; set; } Property Value Type Description System.Int32 MaxQueryIteratorsCount Gets or sets the maximum number of active query iterators. Declaration public int MaxQueryIteratorsCount { get; set; } Property Value Type Description System.Int32 Name Gets or sets the cache name. Declaration public string Name { get; set; } Property Value Type Description System.String OnheapCacheEnabled Gets or sets a value indicating whether on-heap cache is enabled for the off-heap based page memory. Declaration public bool OnheapCacheEnabled { get; set; } Property Value Type Description System.Boolean PartitionLossPolicy Gets or sets the partition loss policy. This policy defines how Ignite will react to a situation when all nodes for some partition leave the cluster. Declaration public PartitionLossPolicy PartitionLossPolicy { get; set; } Property Value Type Description PartitionLossPolicy QueryDetailMetricsSize Gets or sets the size of the query detail metrics to be stored in memory. 0 means disabled metrics. Declaration public int QueryDetailMetricsSize { get; set; } Property Value Type Description System.Int32 QueryEntities Gets or sets the query entity configuration. Declaration public ICollection<QueryEntity> QueryEntities { get; set; } Property Value Type Description System.Collections.Generic.ICollection < QueryEntity > QueryParallelism Gets or sets the desired query parallelism within a single node. Query executor may or may not use this hint, depending on estimated query cost. Default is DefaultQueryParallelism . Declaration public int QueryParallelism { get; set; } Property Value Type Description System.Int32 ReadFromBackup Gets or sets flag indicating whether data can be read from backup. Declaration public bool ReadFromBackup { get; set; } Property Value Type Description System.Boolean RebalanceBatchesPrefetchCount Gets or sets the rebalance batches prefetch count. Source node can provide more than one batch at rebalance start to improve performance. Default is DefaultRebalanceBatchesPrefetchCount , minimum is 2. Declaration public long RebalanceBatchesPrefetchCount { get; set; } Property Value Type Description System.Int64 RebalanceBatchSize Gets or sets size (in number bytes) to be loaded within a single rebalance message. Rebalancing algorithm will split total data set on every node into multiple batches prior to sending data. Declaration public int RebalanceBatchSize { get; set; } Property Value Type Description System.Int32 RebalanceDelay Gets or sets delay upon a node joining or leaving topology (or crash) after which rebalancing should be started automatically. Rebalancing should be delayed if you plan to restart nodes after they leave topology, or if you plan to start multiple nodes at once or one after another and don't want to repartition and rebalance until all nodes are started. Declaration public TimeSpan RebalanceDelay { get; set; } Property Value Type Description System.TimeSpan RebalanceMode Gets or sets cache rebalance mode. Declaration public CacheRebalanceMode RebalanceMode { get; set; } Property Value Type Description CacheRebalanceMode RebalanceOrder Gets or sets the cache rebalance order. Caches with bigger RebalanceOrder are rebalanced later than caches with smaller RebalanceOrder. Default is 0, which means unordered rebalance. All caches with RebalanceOrder=0 are rebalanced without any delay concurrently. This parameter is applicable only for caches with RebalanceMode of Sync and Async . Declaration public int RebalanceOrder { get; set; } Property Value Type Description System.Int32 RebalanceThrottle Time to wait between rebalance messages to avoid overloading of CPU or network. When rebalancing large data sets, the CPU or network can get over-consumed with rebalancing messages, which consecutively may slow down the application performance. This parameter helps tune the amount of time to wait between rebalance messages to make sure that rebalancing process does not have any negative performance impact. Note that application will continue to work properly while rebalancing is still in progress. Value of 0 means that throttling is disabled. Declaration public TimeSpan RebalanceThrottle { get; set; } Property Value Type Description System.TimeSpan RebalanceTimeout Gets or sets rebalance timeout. Declaration public TimeSpan RebalanceTimeout { get; set; } Property Value Type Description System.TimeSpan SqlEscapeAll If true all the SQL table and field names will be escaped with double quotes like ({ \"tableName\".\"fieldsName\"}). This enforces case sensitivity for field names and also allows having special characters in table and field names. Declaration public bool SqlEscapeAll { get; set; } Property Value Type Description System.Boolean SqlIndexMaxInlineSize Gets or sets maximum inline size in bytes for sql indexes. See also InlineSize . -1 for automatic. Declaration public int SqlIndexMaxInlineSize { get; set; } Property Value Type Description System.Int32 SqlSchema Gets or sets the SQL schema. Non-quoted identifiers are not case sensitive. Quoted identifiers are case sensitive. Quoted Name is used by default. Declaration public string SqlSchema { get; set; } Property Value Type Description System.String WriteSynchronizationMode Gets or sets write synchronization mode. This mode controls whether the main caller should wait for update on other nodes to complete or not. Declaration public CacheWriteSynchronizationMode WriteSynchronizationMode { get; set; } Property Value Type Description CacheWriteSynchronizationMode Methods ToCacheConfiguration() Converts this instance to full CacheConfiguration . Declaration public CacheConfiguration ToCacheConfiguration() Returns Type Description CacheConfiguration"
  },
  "api/Apache.Ignite.Core.Client.Cache.ICacheClient-2.html": {
    "href": "api/Apache.Ignite.Core.Client.Cache.ICacheClient-2.html",
    "title": "Interface ICacheClient<TK, TV> | Apache Ignite.NET",
    "keywords": "Interface ICacheClient<TK, TV> Client cache API. See GetCache<TK, TV>(String) . Namespace : Apache.Ignite.Core.Client.Cache Assembly : Apache.Ignite.Core.dll Syntax public interface ICacheClient<TK, TV> Type Parameters Name Description TK TV Properties Item[TK] Gets or sets a cache value with the specified key. Shortcut to Get(TK) and Put(TK, TV) Declaration TV this[TK key] { get; set; } Parameters Type Name Description TK key Key. Property Value Type Description TV Cache value with the specified key. Exceptions Type Condition System.Collections.Generic.KeyNotFoundException If the key is not present in the cache. Name Name of this cache ( null for default cache). Declaration string Name { get; } Property Value Type Description System.String Methods Clear() Clears the contents of the cache, without notifying listeners or CacheWriters. Declaration void Clear() Clear(TK) Clear entry from the cache, without notifying listeners or CacheWriters. Declaration void Clear(TK key) Parameters Type Name Description TK key Key to clear. ClearAll(IEnumerable<TK>) Clear entries from the cache, without notifying listeners or CacheWriters. Declaration void ClearAll(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys to clear. ClearAllAsync(IEnumerable<TK>) Clear entries from the cache, without notifying listeners or CacheWriters. Declaration Task ClearAllAsync(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys to clear. Returns Type Description System.Threading.Tasks.Task ClearAsync() Clears the contents of the cache, without notifying listeners or CacheWriters. Declaration Task ClearAsync() Returns Type Description System.Threading.Tasks.Task ClearAsync(TK) Clear entry from the cache, without notifying listeners or CacheWriters. Declaration Task ClearAsync(TK key) Parameters Type Name Description TK key Key to clear. Returns Type Description System.Threading.Tasks.Task ContainsKey(TK) Check if cache contains mapping for this key. Declaration bool ContainsKey(TK key) Parameters Type Name Description TK key Key. Returns Type Description System.Boolean True if cache contains mapping for this key. ContainsKeyAsync(TK) Check if cache contains mapping for this key. Declaration Task<bool> ContainsKeyAsync(TK key) Parameters Type Name Description TK key Key. Returns Type Description System.Threading.Tasks.Task < System.Boolean > True if cache contains mapping for this key. ContainsKeys(IEnumerable<TK>) Check if cache contains mapping for these keys. Declaration bool ContainsKeys(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys. Returns Type Description System.Boolean True if cache contains mapping for all these keys. ContainsKeysAsync(IEnumerable<TK>) Check if cache contains mapping for these keys. Declaration Task<bool> ContainsKeysAsync(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys. Returns Type Description System.Threading.Tasks.Task < System.Boolean > True if cache contains mapping for all these keys. Get(TK) Retrieves value mapped to the specified key from cache. Declaration TV Get(TK key) Parameters Type Name Description TK key Key. Returns Type Description TV Value. Exceptions Type Condition System.Collections.Generic.KeyNotFoundException If the key is not present in the cache. GetAll(IEnumerable<TK>) Retrieves values mapped to the specified keys from cache. Declaration ICollection<ICacheEntry<TK, TV>> GetAll(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys. Returns Type Description System.Collections.Generic.ICollection < ICacheEntry <TK, TV>> Map of key-value pairs. GetAllAsync(IEnumerable<TK>) Retrieves values mapped to the specified keys from cache. Declaration Task<ICollection<ICacheEntry<TK, TV>>> GetAllAsync(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys. Returns Type Description System.Threading.Tasks.Task < System.Collections.Generic.ICollection < ICacheEntry <TK, TV>>> Map of key-value pairs. GetAndPut(TK, TV) Associates the specified value with the specified key in this cache, returning an existing value if one existed. Declaration CacheResult<TV> GetAndPut(TK key, TV val) Parameters Type Name Description TK key Key with which the specified value is to be associated. TV val Value to be associated with the specified key. Returns Type Description CacheResult <TV> The value associated with the key at the start of the operation. GetAndPutAsync(TK, TV) Associates the specified value with the specified key in this cache, returning an existing value if one existed. Declaration Task<CacheResult<TV>> GetAndPutAsync(TK key, TV val) Parameters Type Name Description TK key Key with which the specified value is to be associated. TV val Value to be associated with the specified key. Returns Type Description System.Threading.Tasks.Task < CacheResult <TV>> The value associated with the key at the start of the operation. GetAndPutIfAbsent(TK, TV) Stores given key-value pair in cache only if cache had no previous mapping for it. Declaration CacheResult<TV> GetAndPutIfAbsent(TK key, TV val) Parameters Type Name Description TK key Key to store in cache. TV val Value to be associated with the given key. Returns Type Description CacheResult <TV> Previously contained value regardless of whether put happened or not. GetAndPutIfAbsentAsync(TK, TV) Stores given key-value pair in cache only if cache had no previous mapping for it. Declaration Task<CacheResult<TV>> GetAndPutIfAbsentAsync(TK key, TV val) Parameters Type Name Description TK key Key to store in cache. TV val Value to be associated with the given key. Returns Type Description System.Threading.Tasks.Task < CacheResult <TV>> Previously contained value regardless of whether put happened or not. GetAndRemove(TK) Atomically removes the entry for a key only if currently mapped to some value. Declaration CacheResult<TV> GetAndRemove(TK key) Parameters Type Name Description TK key Key with which the specified value is associated. Returns Type Description CacheResult <TV> The value if one existed. GetAndRemoveAsync(TK) Atomically removes the entry for a key only if currently mapped to some value. Declaration Task<CacheResult<TV>> GetAndRemoveAsync(TK key) Parameters Type Name Description TK key Key with which the specified value is associated. Returns Type Description System.Threading.Tasks.Task < CacheResult <TV>> The value if one existed. GetAndReplace(TK, TV) Atomically replaces the value for a given key if and only if there is a value currently mapped by the key. Declaration CacheResult<TV> GetAndReplace(TK key, TV val) Parameters Type Name Description TK key Key with which the specified value is to be associated. TV val Value to be associated with the specified key. Returns Type Description CacheResult <TV> The previous value associated with the specified key. GetAndReplaceAsync(TK, TV) Atomically replaces the value for a given key if and only if there is a value currently mapped by the key. Declaration Task<CacheResult<TV>> GetAndReplaceAsync(TK key, TV val) Parameters Type Name Description TK key Key with which the specified value is to be associated. TV val Value to be associated with the specified key. Returns Type Description System.Threading.Tasks.Task < CacheResult <TV>> The previous value associated with the specified key. GetAsync(TK) Retrieves value mapped to the specified key from cache. Declaration Task<TV> GetAsync(TK key) Parameters Type Name Description TK key Key. Returns Type Description System.Threading.Tasks.Task <TV> Value. Exceptions Type Condition System.Collections.Generic.KeyNotFoundException If the key is not present in the cache. GetConfiguration() Gets the cache configuration. Declaration CacheClientConfiguration GetConfiguration() Returns Type Description CacheClientConfiguration GetSize(CachePeekMode[]) Gets the number of all entries cached across all nodes. NOTE: this operation is distributed and will query all participating nodes for their cache sizes. Declaration long GetSize(params CachePeekMode[] modes) Parameters Type Name Description CachePeekMode [] modes Optional peek modes. If not provided, then total cache size is returned. Returns Type Description System.Int64 Cache size across all nodes. GetSizeAsync(CachePeekMode[]) Gets the number of all entries cached across all nodes. NOTE: this operation is distributed and will query all participating nodes for their cache sizes. Declaration Task<long> GetSizeAsync(params CachePeekMode[] modes) Parameters Type Name Description CachePeekMode [] modes Optional peek modes. If not provided, then total cache size is returned. Returns Type Description System.Threading.Tasks.Task < System.Int64 > Cache size across all nodes. Put(TK, TV) Associates the specified value with the specified key in the cache. If the cache previously contained a mapping for the key, the old value is replaced by the specified value. Declaration void Put(TK key, TV val) Parameters Type Name Description TK key Key with which the specified value is to be associated. TV val Value to be associated with the specified key. PutAll(IEnumerable<KeyValuePair<TK, TV>>) Stores given key-value pairs in cache. Declaration void PutAll(IEnumerable<KeyValuePair<TK, TV>> vals) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair <TK, TV>> vals Key-value pairs to store in cache. PutAllAsync(IEnumerable<KeyValuePair<TK, TV>>) Stores given key-value pairs in cache. Declaration Task PutAllAsync(IEnumerable<KeyValuePair<TK, TV>> vals) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair <TK, TV>> vals Key-value pairs to store in cache. Returns Type Description System.Threading.Tasks.Task PutAsync(TK, TV) Associates the specified value with the specified key in the cache. If the cache previously contained a mapping for the key, the old value is replaced by the specified value. Declaration Task PutAsync(TK key, TV val) Parameters Type Name Description TK key Key with which the specified value is to be associated. TV val Value to be associated with the specified key. Returns Type Description System.Threading.Tasks.Task PutIfAbsent(TK, TV) Atomically associates the specified key with the given value if it is not already associated with a value. Declaration bool PutIfAbsent(TK key, TV val) Parameters Type Name Description TK key Key with which the specified value is to be associated. TV val Value to be associated with the specified key. Returns Type Description System.Boolean True if a value was set. PutIfAbsentAsync(TK, TV) Atomically associates the specified key with the given value if it is not already associated with a value. Declaration Task<bool> PutIfAbsentAsync(TK key, TV val) Parameters Type Name Description TK key Key with which the specified value is to be associated. TV val Value to be associated with the specified key. Returns Type Description System.Threading.Tasks.Task < System.Boolean > True if a value was set. Query(ScanQuery<TK, TV>) Executes a Scan query. Declaration IQueryCursor<ICacheEntry<TK, TV>> Query(ScanQuery<TK, TV> scanQuery) Parameters Type Name Description ScanQuery <TK, TV> scanQuery Scan query. Returns Type Description IQueryCursor < ICacheEntry <TK, TV>> Query cursor. Query(SqlFieldsQuery) Executes an SQL Fields query. Declaration IFieldsQueryCursor Query(SqlFieldsQuery sqlFieldsQuery) Parameters Type Name Description SqlFieldsQuery sqlFieldsQuery SQL query. Returns Type Description IFieldsQueryCursor Query cursor. Query(SqlQuery) Executes an SQL query. Declaration [Obsolete(\"Use SqlFieldsQuery instead. For strongly-typed queries use Apache.Ignite.Linq. SqlQuery is a limited subset of SqlFieldsQuery.\")] IQueryCursor<ICacheEntry<TK, TV>> Query(SqlQuery sqlQuery) Parameters Type Name Description SqlQuery sqlQuery SQL query. Returns Type Description IQueryCursor < ICacheEntry <TK, TV>> Query cursor. QueryContinuous(ContinuousQueryClient<TK, TV>) Starts the continuous query execution. Declaration IContinuousQueryHandleClient QueryContinuous(ContinuousQueryClient<TK, TV> continuousQuery) Parameters Type Name Description ContinuousQueryClient <TK, TV> continuousQuery Continuous query. Returns Type Description IContinuousQueryHandleClient Handle to stop the query execution. Remove(TK) Removes given key mapping from cache, notifying listeners and cache writers. Declaration bool Remove(TK key) Parameters Type Name Description TK key Key to remove. Returns Type Description System.Boolean True if entry was removed, false otherwise. Remove(TK, TV) Removes given key mapping from cache if one exists and value is equal to the passed in value. Declaration bool Remove(TK key, TV val) Parameters Type Name Description TK key Key whose mapping is to be removed from cache. TV val Value to match against currently cached value. Returns Type Description System.Boolean True if entry was removed, false otherwise. RemoveAll() Removes all mappings from cache, notifying listeners and cache writers. Declaration void RemoveAll() RemoveAll(IEnumerable<TK>) Removes given key mappings from cache, notifying listeners and cache writers. Declaration void RemoveAll(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys to be removed from cache. RemoveAllAsync() Removes all mappings from cache, notifying listeners and cache writers. Declaration Task RemoveAllAsync() Returns Type Description System.Threading.Tasks.Task RemoveAllAsync(IEnumerable<TK>) Removes given key mappings from cache, notifying listeners and cache writers. Declaration Task RemoveAllAsync(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys to be removed from cache. Returns Type Description System.Threading.Tasks.Task RemoveAsync(TK) Removes given key mapping from cache, notifying listeners and cache writers. Declaration Task<bool> RemoveAsync(TK key) Parameters Type Name Description TK key Key to remove. Returns Type Description System.Threading.Tasks.Task < System.Boolean > True if entry was removed, false otherwise. RemoveAsync(TK, TV) Removes given key mapping from cache if one exists and value is equal to the passed in value. Declaration Task<bool> RemoveAsync(TK key, TV val) Parameters Type Name Description TK key Key whose mapping is to be removed from cache. TV val Value to match against currently cached value. Returns Type Description System.Threading.Tasks.Task < System.Boolean > True if entry was removed, false otherwise. Replace(TK, TV) Stores given key-value pair in cache only if there is a previous mapping for it. Declaration bool Replace(TK key, TV val) Parameters Type Name Description TK key Key to store in cache. TV val Value to be associated with the given key. Returns Type Description System.Boolean True if the value was replaced. Replace(TK, TV, TV) Stores given key-value pair in cache only if only if the previous value is equal to the old value passed as argument. Declaration bool Replace(TK key, TV oldVal, TV newVal) Parameters Type Name Description TK key Key to store in cache. TV oldVal Old value to match. TV newVal Value to be associated with the given key. Returns Type Description System.Boolean True if replace happened, false otherwise. ReplaceAsync(TK, TV) Stores given key-value pair in cache only if there is a previous mapping for it. Declaration Task<bool> ReplaceAsync(TK key, TV val) Parameters Type Name Description TK key Key to store in cache. TV val Value to be associated with the given key. Returns Type Description System.Threading.Tasks.Task < System.Boolean > True if the value was replaced. ReplaceAsync(TK, TV, TV) Stores given key-value pair in cache only if only if the previous value is equal to the old value passed as argument. Declaration Task<bool> ReplaceAsync(TK key, TV oldVal, TV newVal) Parameters Type Name Description TK key Key to store in cache. TV oldVal Old value to match. TV newVal Value to be associated with the given key. Returns Type Description System.Threading.Tasks.Task < System.Boolean > True if replace happened, false otherwise. TryGet(TK, out TV) Retrieves value mapped to the specified key from cache. Declaration bool TryGet(TK key, out TV value) Parameters Type Name Description TK key Key. TV value When this method returns, the value associated with the specified key, if the key is found; otherwise, the default value for the type of the value parameter. This parameter is passed uninitialized. Returns Type Description System.Boolean true if the cache contains an element with the specified key; otherwise, false. TryGetAsync(TK) Retrieves value mapped to the specified key from cache. Declaration Task<CacheResult<TV>> TryGetAsync(TK key) Parameters Type Name Description TK key Key. Returns Type Description System.Threading.Tasks.Task < CacheResult <TV>> CacheResult<T> containing a bool success flag and a value. WithExpiryPolicy(IExpiryPolicy) Returns cache with the specified expired policy set. This policy will be used for each operation invoked on the returned cache. Unlike the WithExpiryPolicy(IExpiryPolicy) method, expiry durations are retrieved from specified IExpiryPolicy on every key-value API operation. Declaration ICacheClient<TK, TV> WithExpiryPolicy(IExpiryPolicy plc) Parameters Type Name Description IExpiryPolicy plc Expiry policy to use. Returns Type Description ICacheClient <TK, TV> Cache instance with the specified expiry policy set. WithKeepBinary<TK1, TV1>() Gets cache with KeepBinary mode enabled, changing key and/or value types if necessary. You can only change key/value types when transitioning from non-binary to binary cache; Changing type of binary cache is not allowed and will throw an System.InvalidOperationException . Declaration ICacheClient<TK1, TV1> WithKeepBinary<TK1, TV1>() Returns Type Description ICacheClient <TK1, TV1> Cache instance with binary mode enabled. Type Parameters Name Description TK1 Key type in binary mode. TV1 Value type in binary mode. Extension Methods CacheClientLinqExtensions.AsCacheQueryable<TKey, TValue>(ICacheClient<TKey, TValue>) CacheClientLinqExtensions.AsCacheQueryable<TKey, TValue>(ICacheClient<TKey, TValue>, Boolean) CacheClientLinqExtensions.AsCacheQueryable<TKey, TValue>(ICacheClient<TKey, TValue>, Boolean, String) CacheClientLinqExtensions.AsCacheQueryable<TKey, TValue>(ICacheClient<TKey, TValue>, QueryOptions)"
  },
  "api/Apache.Ignite.Core.Client.IgniteClientConfigurationSection.html": {
    "href": "api/Apache.Ignite.Core.Client.IgniteClientConfigurationSection.html",
    "title": "Class IgniteClientConfigurationSection | Apache Ignite.NET",
    "keywords": "Class IgniteClientConfigurationSection Ignite configuration section for app.config and web.config files. Inheritance System.Object System.Configuration.ConfigurationElement System.Configuration.ConfigurationSection IgniteClientConfigurationSection Inherited Members System.Configuration.ConfigurationSection.GetRuntimeObject() System.Configuration.ConfigurationSection.IsModified() System.Configuration.ConfigurationSection.ResetModified() System.Configuration.ConfigurationSection.ShouldSerializePropertyInTargetVersion(System.Configuration.ConfigurationProperty, System.String, System.Runtime.Versioning.FrameworkName, System.Configuration.ConfigurationElement) System.Configuration.ConfigurationSection.ShouldSerializeElementInTargetVersion(System.Configuration.ConfigurationElement, System.String, System.Runtime.Versioning.FrameworkName) System.Configuration.ConfigurationSection.ShouldSerializeSectionInTargetVersion(System.Runtime.Versioning.FrameworkName) System.Configuration.ConfigurationSection.SectionInformation System.Configuration.ConfigurationElement.Init() System.Configuration.ConfigurationElement.IsReadOnly() System.Configuration.ConfigurationElement.SetReadOnly() System.Configuration.ConfigurationElement.ListErrors(System.Collections.IList) System.Configuration.ConfigurationElement.InitializeDefault() System.Configuration.ConfigurationElement.Reset(System.Configuration.ConfigurationElement) System.Configuration.ConfigurationElement.Equals(System.Object) System.Configuration.ConfigurationElement.GetHashCode() System.Configuration.ConfigurationElement.SetPropertyValue(System.Configuration.ConfigurationProperty, System.Object, System.Boolean) System.Configuration.ConfigurationElement.Unmerge(System.Configuration.ConfigurationElement, System.Configuration.ConfigurationElement, System.Configuration.ConfigurationSaveMode) System.Configuration.ConfigurationElement.SerializeToXmlElement(System.Xml.XmlWriter, System.String) System.Configuration.ConfigurationElement.SerializeElement(System.Xml.XmlWriter, System.Boolean) System.Configuration.ConfigurationElement.DeserializeElement(System.Xml.XmlReader, System.Boolean) System.Configuration.ConfigurationElement.OnRequiredPropertyNotFound(System.String) System.Configuration.ConfigurationElement.PostDeserialize() System.Configuration.ConfigurationElement.PreSerialize(System.Xml.XmlWriter) System.Configuration.ConfigurationElement.OnDeserializeUnrecognizedAttribute(System.String, System.String) System.Configuration.ConfigurationElement.OnDeserializeUnrecognizedElement(System.String, System.Xml.XmlReader) System.Configuration.ConfigurationElement.GetTransformedTypeString(System.String) System.Configuration.ConfigurationElement.GetTransformedAssemblyString(System.String) System.Configuration.ConfigurationElement.LockAttributes System.Configuration.ConfigurationElement.LockAllAttributesExcept System.Configuration.ConfigurationElement.LockElements System.Configuration.ConfigurationElement.LockAllElementsExcept System.Configuration.ConfigurationElement.LockItem System.Configuration.ConfigurationElement.Item[System.Configuration.ConfigurationProperty] System.Configuration.ConfigurationElement.Item[System.String] System.Configuration.ConfigurationElement.Properties System.Configuration.ConfigurationElement.ElementInformation System.Configuration.ConfigurationElement.EvaluationContext System.Configuration.ConfigurationElement.ElementProperty System.Configuration.ConfigurationElement.CurrentConfiguration System.Object.ToString() System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Client Assembly : Apache.Ignite.Core.dll Syntax public class IgniteClientConfigurationSection : ConfigurationSection Properties IgniteClientConfiguration Gets the Ignite client configuration. Declaration public IgniteClientConfiguration IgniteClientConfiguration { get; } Property Value Type Description IgniteClientConfiguration Methods DeserializeSection(XmlReader) Reads XML from the configuration file. Declaration protected override void DeserializeSection(XmlReader reader) Parameters Type Name Description System.Xml.XmlReader reader The reader object, which reads from the configuration file. Overrides System.Configuration.ConfigurationSection.DeserializeSection(System.Xml.XmlReader) SerializeSection(ConfigurationElement, String, ConfigurationSaveMode) Creates an XML string containing an unmerged view of the System.Configuration.ConfigurationSection object as a single section to write to a file. Declaration protected override string SerializeSection(ConfigurationElement parentElement, string name, ConfigurationSaveMode saveMode) Parameters Type Name Description System.Configuration.ConfigurationElement parentElement The System.Configuration.ConfigurationElement instance to use as the parent when performing the un-merge. System.String name The name of the section to create. System.Configuration.ConfigurationSaveMode saveMode The System.Configuration.ConfigurationSaveMode instance to use when writing to a string. Returns Type Description System.String An XML string containing an unmerged view of the System.Configuration.ConfigurationSection object. Overrides System.Configuration.ConfigurationSection.SerializeSection(System.Configuration.ConfigurationElement, System.String, System.Configuration.ConfigurationSaveMode)"
  },
  "api/Apache.Ignite.Core.Client.IgniteClientException.html": {
    "href": "api/Apache.Ignite.Core.Client.IgniteClientException.html",
    "title": "Class IgniteClientException | Apache Ignite.NET",
    "keywords": "Class IgniteClientException Ignite thin client exception. Inheritance System.Object System.Exception IgniteException IgniteClientException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Client Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class IgniteClientException : IgniteException, ISerializable, _Exception Constructors IgniteClientException() Initializes a new instance of the IgniteClientException class. Declaration public IgniteClientException() IgniteClientException(SerializationInfo, StreamingContext) Initializes a new instance of the IgniteClientException class. Declaration protected IgniteClientException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. IgniteClientException(String) Initializes a new instance of the IgniteClientException class. Declaration public IgniteClientException(string message) Parameters Type Name Description System.String message The message that describes the error. IgniteClientException(String, Exception) Initializes a new instance of the IgniteClientException class. Declaration public IgniteClientException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. IgniteClientException(String, Exception, ClientStatusCode) Initializes a new instance of the IgniteClientException class. Declaration public IgniteClientException(string message, Exception cause, ClientStatusCode statusCode) Parameters Type Name Description System.String message The message. System.Exception cause The cause. ClientStatusCode statusCode The error code. Properties StatusCode Gets the status code code. Declaration public ClientStatusCode StatusCode { get; } Property Value Type Description ClientStatusCode Methods GetObjectData(SerializationInfo, StreamingContext) When overridden in a derived class, sets the System.Runtime.Serialization.SerializationInfo with information about the exception. Declaration public override void GetObjectData(SerializationInfo info, StreamingContext context) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info The System.Runtime.Serialization.SerializationInfo that holds the serialized object data about the exception being thrown. System.Runtime.Serialization.StreamingContext context The System.Runtime.Serialization.StreamingContext that contains contextual information about the source or destination. Overrides System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) ToString() Returns a System.String that represents this instance. Declaration public override string ToString() Returns Type Description System.String Overrides System.Exception.ToString() Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Cluster.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.Common.html": {
    "href": "api/Apache.Ignite.Core.Common.html",
    "title": "Namespace Apache.Ignite.Core.Common | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Common Classes ClientDisconnectedException Indicates that client-mode local node has been disconnected from the cluster. IgniteException General Ignite exception. Indicates any error condition within Ignite. IgniteExperimentalAttribute This attribute marks API elements (such as interfaces and methods) as experimental meaning that the API is not finalized yet and may be changed or replaced in future Ignite releases. Such APIs are exposed so that users can make use of a feature before the API has been stabilized. The expectation is that an API element should be \"eventually\" stabilized. Incompatible changes are allowed for such APIs: API may be removed, changed or stabilized in future Ignite releases (both minor and maintenance). IgniteFutureCancelledException Indicates future cancellation within Ignite. IgniteIllegalStateException Indicates that ignite in invalid state was accessed. IgniteProductVersion Represents node version. JavaException Indicates an error on Java side and contains full Java stack trace. Structs IgniteGuid Ignite guid with additional local ID. Interfaces IFactory<T> Factory that produces instances of a specific type. Implementation can be passed over the wire and thus should be marked with System.SerializableAttribute . Delegates ExceptionFactory Exception factory delegate."
  },
  "api/Apache.Ignite.Core.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.Compute.ComputeUserUndeclaredException.html": {
    "href": "api/Apache.Ignite.Core.Compute.ComputeUserUndeclaredException.html",
    "title": "Class ComputeUserUndeclaredException | Apache Ignite.NET",
    "keywords": "Class ComputeUserUndeclaredException This exception is thrown when user's code throws undeclared runtime exception. By user core it is assumed the code in Ignite task, Ignite job or SPI. In most cases it should be an indication of unrecoverable error condition such as assertion, out of memory error, etc. Inheritance System.Object System.Exception IgniteException ComputeUserUndeclaredException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Compute Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class ComputeUserUndeclaredException : IgniteException, ISerializable, _Exception Constructors ComputeUserUndeclaredException() Initializes a new instance of the ComputeUserUndeclaredException class. Declaration public ComputeUserUndeclaredException() ComputeUserUndeclaredException(SerializationInfo, StreamingContext) Initializes a new instance of the ComputeUserUndeclaredException class. Declaration protected ComputeUserUndeclaredException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. ComputeUserUndeclaredException(String) Initializes a new instance of the ComputeUserUndeclaredException class. Declaration public ComputeUserUndeclaredException(string message) Parameters Type Name Description System.String message The message that describes the error. ComputeUserUndeclaredException(String, Exception) Initializes a new instance of the ComputeUserUndeclaredException class. Declaration public ComputeUserUndeclaredException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Compute.ICompute.html": {
    "href": "api/Apache.Ignite.Core.Compute.ICompute.html",
    "title": "Interface ICompute | Apache Ignite.NET",
    "keywords": "Interface ICompute Defines Ignite functionality for executing tasks and closures over nodes in the IClusterGroup . Instance of ICompute is obtained from grid projection using GetCompute() method. Note that if attempt is made to execute a computation over an empty projection (i.e. projection that does not have any alive nodes), ClusterGroupEmptyException will be thrown out of result task. Ignite must select a node for a computation to be executed. The node will be selected based on the underlying GridLoadBalancingSpi , which by default sequentially picks next available node from grid projection. Other load balancing policies, such as random or adaptive , can be configured as well by selecting different load balancing SPI in Ignite configuration. If your logic requires some custom load balancing behavior, consider implementing ComputeTask in Java directly. Ignite guarantees that as long as there is at least one Ignite node standing, every job will be executed. Jobs will automatically failover to another node if a remote node crashed or has rejected execution due to lack of resources. By default, in case of failover, next load balanced node will be picked for job execution. Also jobs will never be re-routed to the nodes they have failed on. This behavior can be changed by configuring any of the existing or a custom FailoverSpi in Ignite configuration. All members are thread-safe and may be used concurrently from multiple threads. Namespace : Apache.Ignite.Core.Compute Assembly : Apache.Ignite.Core.dll Syntax public interface ICompute Properties ClusterGroup Grid projection to which this compute instance belongs. Declaration IClusterGroup ClusterGroup { get; } Property Value Type Description IClusterGroup Methods AffinityCall<TRes>(IEnumerable<String>, Int32, IComputeFunc<TRes>) Executes given job on the node where data for provided partition is located. Declaration TRes AffinityCall<TRes>(IEnumerable<string> cacheNames, int partition, IComputeFunc<TRes> func) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.String > cacheNames Names of the caches to reserve the partition in. The first cache is used for affinity co-location. System.Int32 partition Partition number. IComputeFunc <TRes> func Job to execute. Returns Type Description TRes Job result for this execution. Type Parameters Name Description TRes Type of job result. AffinityCall<TRes>(String, Object, IComputeFunc<TRes>) Executes given job on the node where data for provided affinity key is located (a.k.a. affinity co-location). Declaration TRes AffinityCall<TRes>(string cacheName, object affinityKey, IComputeFunc<TRes> clo) Parameters Type Name Description System.String cacheName Name of the cache to use for affinity co-location. System.Object affinityKey Affinity key. IComputeFunc <TRes> clo Job to execute. Returns Type Description TRes Job result for this execution. Type Parameters Name Description TRes Type of job result. AffinityCallAsync<TRes>(IEnumerable<String>, Int32, IComputeFunc<TRes>) Executes given job on the node where data for provided partition is located. Declaration Task<TRes> AffinityCallAsync<TRes>(IEnumerable<string> cacheNames, int partition, IComputeFunc<TRes> func) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.String > cacheNames Names of the caches to reserve the partition in. The first cache is used for affinity co-location. System.Int32 partition Partition number. IComputeFunc <TRes> func Job to execute. Returns Type Description System.Threading.Tasks.Task <TRes> Job result for this execution. Type Parameters Name Description TRes Type of job result. AffinityCallAsync<TRes>(IEnumerable<String>, Int32, IComputeFunc<TRes>, CancellationToken) Executes given job on the node where data for provided partition is located. Declaration Task<TRes> AffinityCallAsync<TRes>(IEnumerable<string> cacheNames, int partition, IComputeFunc<TRes> func, CancellationToken cancellationToken) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.String > cacheNames Names of the caches to reserve the partition in. The first cache is used for affinity co-location. System.Int32 partition Partition number. IComputeFunc <TRes> func Job to execute. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task <TRes> Job result for this execution. Type Parameters Name Description TRes Type of job result. AffinityCallAsync<TRes>(String, Object, IComputeFunc<TRes>) Executes given job on the node where data for provided affinity key is located (a.k.a. affinity co-location). Declaration Task<TRes> AffinityCallAsync<TRes>(string cacheName, object affinityKey, IComputeFunc<TRes> clo) Parameters Type Name Description System.String cacheName Name of the cache to use for affinity co-location. System.Object affinityKey Affinity key. IComputeFunc <TRes> clo Job to execute. Returns Type Description System.Threading.Tasks.Task <TRes> Job result for this execution. Type Parameters Name Description TRes Type of job result. AffinityCallAsync<TRes>(String, Object, IComputeFunc<TRes>, CancellationToken) Executes given job on the node where data for provided affinity key is located (a.k.a. affinity co-location). Declaration Task<TRes> AffinityCallAsync<TRes>(string cacheName, object affinityKey, IComputeFunc<TRes> clo, CancellationToken cancellationToken) Parameters Type Name Description System.String cacheName Name of the cache to use for affinity co-location. System.Object affinityKey Affinity key. IComputeFunc <TRes> clo Job to execute. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task <TRes> Job result for this execution. Type Parameters Name Description TRes Type of job result. AffinityRun(IEnumerable<String>, Int32, IComputeAction) Executes given job on the node where data for provided partition is located (a.k.a. affinity co-location). Declaration void AffinityRun(IEnumerable<string> cacheNames, int partition, IComputeAction action) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.String > cacheNames Names of the caches to reserve the partition in. The first cache is used for affinity co-location. System.Int32 partition Partition number. IComputeAction action Job to execute. AffinityRun(String, Object, IComputeAction) Executes given job on the node where data for provided affinity key is located (a.k.a. affinity co-location). Declaration void AffinityRun(string cacheName, object affinityKey, IComputeAction action) Parameters Type Name Description System.String cacheName Name of the cache to use for affinity co-location. System.Object affinityKey Affinity key. IComputeAction action Job to execute. AffinityRunAsync(IEnumerable<String>, Int32, IComputeAction) Executes given job on the node where data for provided partition is located (a.k.a. affinity co-location). Declaration Task AffinityRunAsync(IEnumerable<string> cacheNames, int partition, IComputeAction action) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.String > cacheNames Names of the caches to reserve the partition in. The first cache is used for affinity co-location. System.Int32 partition Partition number. IComputeAction action Job to execute. Returns Type Description System.Threading.Tasks.Task AffinityRunAsync(IEnumerable<String>, Int32, IComputeAction, CancellationToken) Executes given job on the node where data for provided partition is located (a.k.a. affinity co-location). Declaration Task AffinityRunAsync(IEnumerable<string> cacheNames, int partition, IComputeAction action, CancellationToken cancellationToken) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.String > cacheNames Names of the caches to reserve the partition in. The first cache is used for affinity co-location. System.Int32 partition Partition number. IComputeAction action Job to execute. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task AffinityRunAsync(String, Object, IComputeAction) Executes given job on the node where data for provided affinity key is located (a.k.a. affinity co-location). Declaration Task AffinityRunAsync(string cacheName, object affinityKey, IComputeAction action) Parameters Type Name Description System.String cacheName Name of the cache to use for affinity co-location. System.Object affinityKey Affinity key. IComputeAction action Job to execute. Returns Type Description System.Threading.Tasks.Task AffinityRunAsync(String, Object, IComputeAction, CancellationToken) Executes given job on the node where data for provided affinity key is located (a.k.a. affinity co-location). Declaration Task AffinityRunAsync(string cacheName, object affinityKey, IComputeAction action, CancellationToken cancellationToken) Parameters Type Name Description System.String cacheName Name of the cache to use for affinity co-location. System.Object affinityKey Affinity key. IComputeAction action Job to execute. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task Task. Apply<TArg, TRes>(IComputeFunc<TArg, TRes>, TArg) Executes provided closure job on a node in this grid projection. Declaration TRes Apply<TArg, TRes>(IComputeFunc<TArg, TRes> clo, TArg arg) Parameters Type Name Description IComputeFunc <TArg, TRes> clo Job to run. TArg arg Job argument. Returns Type Description TRes Job result for this execution. Type Parameters Name Description TArg Type of argument. TRes Type of job result. Apply<TArg, TRes>(IComputeFunc<TArg, TRes>, IEnumerable<TArg>) Executes provided closure job on nodes within this grid projection. A new job is executed for every argument in the passed in collection. The number of actual job executions will be equal to size of the job arguments collection. Declaration ICollection<TRes> Apply<TArg, TRes>(IComputeFunc<TArg, TRes> clo, IEnumerable<TArg> args) Parameters Type Name Description IComputeFunc <TArg, TRes> clo Job to run. System.Collections.Generic.IEnumerable <TArg> args Job arguments. Returns Type Description System.Collections.Generic.ICollection <TRes> Collection of job results. Type Parameters Name Description TArg Type of argument. TRes Type of job result. Apply<TArg, TFuncRes, TRes>(IComputeFunc<TArg, TFuncRes>, IEnumerable<TArg>, IComputeReducer<TFuncRes, TRes>) Executes provided closure job on nodes within this grid projection. A new job is executed for every argument in the passed in collection. The number of actual job executions will be equal to size of the job arguments collection. The returned job results will be reduced into an individual result by provided reducer. Declaration TRes Apply<TArg, TFuncRes, TRes>(IComputeFunc<TArg, TFuncRes> clo, IEnumerable<TArg> args, IComputeReducer<TFuncRes, TRes> rdc) Parameters Type Name Description IComputeFunc <TArg, TFuncRes> clo Job to run. System.Collections.Generic.IEnumerable <TArg> args Job arguments. IComputeReducer <TFuncRes, TRes> rdc Reducer to reduce all job results into one individual return value. Returns Type Description TRes Reduced job result for this execution. Type Parameters Name Description TArg Type of argument. TFuncRes Type of function result. TRes Type of result after reduce. ApplyAsync<TArg, TRes>(IComputeFunc<TArg, TRes>, TArg) Executes provided closure job on a node in this grid projection. Declaration Task<TRes> ApplyAsync<TArg, TRes>(IComputeFunc<TArg, TRes> clo, TArg arg) Parameters Type Name Description IComputeFunc <TArg, TRes> clo Job to run. TArg arg Job argument. Returns Type Description System.Threading.Tasks.Task <TRes> Job result for this execution. Type Parameters Name Description TArg Type of argument. TRes Type of job result. ApplyAsync<TArg, TRes>(IComputeFunc<TArg, TRes>, TArg, CancellationToken) Executes provided closure job on a node in this grid projection. Declaration Task<TRes> ApplyAsync<TArg, TRes>(IComputeFunc<TArg, TRes> clo, TArg arg, CancellationToken cancellationToken) Parameters Type Name Description IComputeFunc <TArg, TRes> clo Job to run. TArg arg Job argument. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task <TRes> Job result for this execution. Type Parameters Name Description TArg Type of argument. TRes Type of job result. ApplyAsync<TArg, TRes>(IComputeFunc<TArg, TRes>, IEnumerable<TArg>) Executes provided closure job on nodes within this grid projection. A new job is executed for every argument in the passed in collection. The number of actual job executions will be equal to size of the job arguments collection. Declaration Task<ICollection<TRes>> ApplyAsync<TArg, TRes>(IComputeFunc<TArg, TRes> clo, IEnumerable<TArg> args) Parameters Type Name Description IComputeFunc <TArg, TRes> clo Job to run. System.Collections.Generic.IEnumerable <TArg> args Job arguments. Returns Type Description System.Threading.Tasks.Task < System.Collections.Generic.ICollection <TRes>> Collection of job results. Type Parameters Name Description TArg Type of argument. TRes Type of job result. ApplyAsync<TArg, TRes>(IComputeFunc<TArg, TRes>, IEnumerable<TArg>, CancellationToken) Executes provided closure job on nodes within this grid projection. A new job is executed for every argument in the passed in collection. The number of actual job executions will be equal to size of the job arguments collection. Declaration Task<ICollection<TRes>> ApplyAsync<TArg, TRes>(IComputeFunc<TArg, TRes> clo, IEnumerable<TArg> args, CancellationToken cancellationToken) Parameters Type Name Description IComputeFunc <TArg, TRes> clo Job to run. System.Collections.Generic.IEnumerable <TArg> args Job arguments. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task < System.Collections.Generic.ICollection <TRes>> Collection of job results. Type Parameters Name Description TArg Type of argument. TRes Type of job result. ApplyAsync<TArg, TFuncRes, TRes>(IComputeFunc<TArg, TFuncRes>, IEnumerable<TArg>, IComputeReducer<TFuncRes, TRes>) Executes provided closure job on nodes within this grid projection. A new job is executed for every argument in the passed in collection. The number of actual job executions will be equal to size of the job arguments collection. The returned job results will be reduced into an individual result by provided reducer. Declaration Task<TRes> ApplyAsync<TArg, TFuncRes, TRes>(IComputeFunc<TArg, TFuncRes> clo, IEnumerable<TArg> args, IComputeReducer<TFuncRes, TRes> rdc) Parameters Type Name Description IComputeFunc <TArg, TFuncRes> clo Job to run. System.Collections.Generic.IEnumerable <TArg> args Job arguments. IComputeReducer <TFuncRes, TRes> rdc Reducer to reduce all job results into one individual return value. Returns Type Description System.Threading.Tasks.Task <TRes> Reduced job result for this execution. Type Parameters Name Description TArg Type of argument. TFuncRes Type of function result. TRes Type of result after reduce. ApplyAsync<TArg, TFuncRes, TRes>(IComputeFunc<TArg, TFuncRes>, IEnumerable<TArg>, IComputeReducer<TFuncRes, TRes>, CancellationToken) Executes provided closure job on nodes within this grid projection. A new job is executed for every argument in the passed in collection. The number of actual job executions will be equal to size of the job arguments collection. The returned job results will be reduced into an individual result by provided reducer. Declaration Task<TRes> ApplyAsync<TArg, TFuncRes, TRes>(IComputeFunc<TArg, TFuncRes> clo, IEnumerable<TArg> args, IComputeReducer<TFuncRes, TRes> rdc, CancellationToken cancellationToken) Parameters Type Name Description IComputeFunc <TArg, TFuncRes> clo Job to run. System.Collections.Generic.IEnumerable <TArg> args Job arguments. IComputeReducer <TFuncRes, TRes> rdc Reducer to reduce all job results into one individual return value. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task <TRes> Reduced job result for this execution. Type Parameters Name Description TArg Type of argument. TFuncRes Type of function result. TRes Type of result after reduce. Broadcast(IComputeAction) Broadcasts given job to all nodes in grid projection. Declaration void Broadcast(IComputeAction action) Parameters Type Name Description IComputeAction action Job to broadcast to all projection nodes. Broadcast<TRes>(IComputeFunc<TRes>) Broadcasts given job to all nodes in grid projection. Every participating node will return a job result. Declaration ICollection<TRes> Broadcast<TRes>(IComputeFunc<TRes> clo) Parameters Type Name Description IComputeFunc <TRes> clo Job to broadcast to all projection nodes. Returns Type Description System.Collections.Generic.ICollection <TRes> Collection of results for this execution. Type Parameters Name Description TRes Broadcast<TArg, TRes>(IComputeFunc<TArg, TRes>, TArg) Broadcasts given closure job with passed in argument to all nodes in grid projection. Every participating node will return a job result. Declaration ICollection<TRes> Broadcast<TArg, TRes>(IComputeFunc<TArg, TRes> clo, TArg arg) Parameters Type Name Description IComputeFunc <TArg, TRes> clo Job to broadcast to all projection nodes. TArg arg Job closure argument. Returns Type Description System.Collections.Generic.ICollection <TRes> Collection of results for this execution. Type Parameters Name Description TArg Type of argument. TRes Type of job result. BroadcastAsync(IComputeAction) Broadcasts given job to all nodes in grid projection. Declaration Task BroadcastAsync(IComputeAction action) Parameters Type Name Description IComputeAction action Job to broadcast to all projection nodes. Returns Type Description System.Threading.Tasks.Task BroadcastAsync(IComputeAction, CancellationToken) Broadcasts given job to all nodes in grid projection. Declaration Task BroadcastAsync(IComputeAction action, CancellationToken cancellationToken) Parameters Type Name Description IComputeAction action Job to broadcast to all projection nodes. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task Task. BroadcastAsync<TRes>(IComputeFunc<TRes>) Broadcasts given job to all nodes in grid projection. Every participating node will return a job result. Declaration Task<ICollection<TRes>> BroadcastAsync<TRes>(IComputeFunc<TRes> clo) Parameters Type Name Description IComputeFunc <TRes> clo Job to broadcast to all projection nodes. Returns Type Description System.Threading.Tasks.Task < System.Collections.Generic.ICollection <TRes>> Collection of results for this execution. Type Parameters Name Description TRes BroadcastAsync<TRes>(IComputeFunc<TRes>, CancellationToken) Broadcasts given job to all nodes in grid projection. Every participating node will return a job result. Declaration Task<ICollection<TRes>> BroadcastAsync<TRes>(IComputeFunc<TRes> clo, CancellationToken cancellationToken) Parameters Type Name Description IComputeFunc <TRes> clo Job to broadcast to all projection nodes. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task < System.Collections.Generic.ICollection <TRes>> Collection of results for this execution. Type Parameters Name Description TRes The type of the resource. BroadcastAsync<TArg, TRes>(IComputeFunc<TArg, TRes>, TArg) Broadcasts given closure job with passed in argument to all nodes in grid projection. Every participating node will return a job result. Declaration Task<ICollection<TRes>> BroadcastAsync<TArg, TRes>(IComputeFunc<TArg, TRes> clo, TArg arg) Parameters Type Name Description IComputeFunc <TArg, TRes> clo Job to broadcast to all projection nodes. TArg arg Job closure argument. Returns Type Description System.Threading.Tasks.Task < System.Collections.Generic.ICollection <TRes>> Collection of results for this execution. Type Parameters Name Description TArg Type of argument. TRes Type of job result. BroadcastAsync<TArg, TRes>(IComputeFunc<TArg, TRes>, TArg, CancellationToken) Broadcasts given closure job with passed in argument to all nodes in grid projection. Every participating node will return a job result. Declaration Task<ICollection<TRes>> BroadcastAsync<TArg, TRes>(IComputeFunc<TArg, TRes> clo, TArg arg, CancellationToken cancellationToken) Parameters Type Name Description IComputeFunc <TArg, TRes> clo Job to broadcast to all projection nodes. TArg arg Job closure argument. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task < System.Collections.Generic.ICollection <TRes>> Collection of results for this execution. Type Parameters Name Description TArg Type of argument. TRes Type of job result. Call<TRes>(IComputeFunc<TRes>) Executes provided job on a node in this grid projection. The result of the job execution is returned from the result closure. Declaration TRes Call<TRes>(IComputeFunc<TRes> clo) Parameters Type Name Description IComputeFunc <TRes> clo Job to execute. Returns Type Description TRes Job result for this execution. Type Parameters Name Description TRes Type of job result. Call<TRes>(IEnumerable<IComputeFunc<TRes>>) Executes collection of jobs on nodes within this grid projection. Declaration ICollection<TRes> Call<TRes>(IEnumerable<IComputeFunc<TRes>> clos) Parameters Type Name Description System.Collections.Generic.IEnumerable < IComputeFunc <TRes>> clos Collection of jobs to execute. Returns Type Description System.Collections.Generic.ICollection <TRes> Collection of job results for this execution. Type Parameters Name Description TRes Type of job result. Call<TFuncRes, TRes>(IEnumerable<IComputeFunc<TFuncRes>>, IComputeReducer<TFuncRes, TRes>) Executes collection of jobs on nodes within this grid projection. Declaration TRes Call<TFuncRes, TRes>(IEnumerable<IComputeFunc<TFuncRes>> clos, IComputeReducer<TFuncRes, TRes> reducer) Parameters Type Name Description System.Collections.Generic.IEnumerable < IComputeFunc <TFuncRes>> clos Collection of jobs to execute. IComputeReducer <TFuncRes, TRes> reducer Reducer to reduce all job results into one individual return value. Returns Type Description TRes Reduced job result for this execution. Type Parameters Name Description TFuncRes Type of function result. TRes Type of result after reduce. CallAsync<TRes>(IComputeFunc<TRes>) Executes provided job on a node in this grid projection. The result of the job execution is returned from the result closure. Declaration Task<TRes> CallAsync<TRes>(IComputeFunc<TRes> clo) Parameters Type Name Description IComputeFunc <TRes> clo Job to execute. Returns Type Description System.Threading.Tasks.Task <TRes> Job result for this execution. Type Parameters Name Description TRes Type of job result. CallAsync<TRes>(IComputeFunc<TRes>, CancellationToken) Executes provided job on a node in this grid projection. The result of the job execution is returned from the result closure. Declaration Task<TRes> CallAsync<TRes>(IComputeFunc<TRes> clo, CancellationToken cancellationToken) Parameters Type Name Description IComputeFunc <TRes> clo Job to execute. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task <TRes> Job result for this execution. Type Parameters Name Description TRes Type of job result. CallAsync<TRes>(IEnumerable<IComputeFunc<TRes>>) Executes collection of jobs on nodes within this grid projection. Declaration Task<ICollection<TRes>> CallAsync<TRes>(IEnumerable<IComputeFunc<TRes>> clos) Parameters Type Name Description System.Collections.Generic.IEnumerable < IComputeFunc <TRes>> clos Collection of jobs to execute. Returns Type Description System.Threading.Tasks.Task < System.Collections.Generic.ICollection <TRes>> Collection of job results for this execution. Type Parameters Name Description TRes Type of job result. CallAsync<TRes>(IEnumerable<IComputeFunc<TRes>>, CancellationToken) Executes collection of jobs on nodes within this grid projection. Declaration Task<ICollection<TRes>> CallAsync<TRes>(IEnumerable<IComputeFunc<TRes>> clos, CancellationToken cancellationToken) Parameters Type Name Description System.Collections.Generic.IEnumerable < IComputeFunc <TRes>> clos Collection of jobs to execute. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task < System.Collections.Generic.ICollection <TRes>> Collection of job results for this execution. Type Parameters Name Description TRes Type of job result. CallAsync<TFuncRes, TRes>(IEnumerable<IComputeFunc<TFuncRes>>, IComputeReducer<TFuncRes, TRes>) Executes collection of jobs on nodes within this grid projection. Declaration Task<TRes> CallAsync<TFuncRes, TRes>(IEnumerable<IComputeFunc<TFuncRes>> clos, IComputeReducer<TFuncRes, TRes> reducer) Parameters Type Name Description System.Collections.Generic.IEnumerable < IComputeFunc <TFuncRes>> clos Collection of jobs to execute. IComputeReducer <TFuncRes, TRes> reducer Reducer to reduce all job results into one individual return value. Returns Type Description System.Threading.Tasks.Task <TRes> Reduced job result for this execution. Type Parameters Name Description TFuncRes Type of function result. TRes Type of result after reduce. CallAsync<TFuncRes, TRes>(IEnumerable<IComputeFunc<TFuncRes>>, IComputeReducer<TFuncRes, TRes>, CancellationToken) Executes collection of jobs on nodes within this grid projection. Declaration Task<TRes> CallAsync<TFuncRes, TRes>(IEnumerable<IComputeFunc<TFuncRes>> clos, IComputeReducer<TFuncRes, TRes> reducer, CancellationToken cancellationToken) Parameters Type Name Description System.Collections.Generic.IEnumerable < IComputeFunc <TFuncRes>> clos Collection of jobs to execute. IComputeReducer <TFuncRes, TRes> reducer Reducer to reduce all job results into one individual return value. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task <TRes> Reduced job result for this execution. Type Parameters Name Description TFuncRes Type of function result. TRes Type of result after reduce. Execute<TJobRes, TRes>(IComputeTask<TJobRes, TRes>) Executes given task on the grid projection. For step-by-step explanation of task execution process refer to IComputeTask<TArg, TJobRes, TRes> documentation. Declaration TRes Execute<TJobRes, TRes>(IComputeTask<TJobRes, TRes> task) Parameters Type Name Description IComputeTask <TJobRes, TRes> task Task to execute. Returns Type Description TRes Task result. Type Parameters Name Description TJobRes Type of job result. TRes Type of reduce result. Execute<TJobRes, TRes>(Type) Executes given task on the grid projection. For step-by-step explanation of task execution process refer to IComputeTask<TArg, TJobRes, TRes> documentation. Declaration TRes Execute<TJobRes, TRes>(Type taskType) Parameters Type Name Description System.Type taskType Task type. Returns Type Description TRes Task result. Type Parameters Name Description TJobRes Type of job result. TRes Type of reduce result. Execute<TArg, TJobRes, TRes>(IComputeTask<TArg, TJobRes, TRes>, TArg) Executes given task on the grid projection. For step-by-step explanation of task execution process refer to IComputeTask<TArg, TJobRes, TRes> documentation. Declaration TRes Execute<TArg, TJobRes, TRes>(IComputeTask<TArg, TJobRes, TRes> task, TArg taskArg) Parameters Type Name Description IComputeTask <TArg, TJobRes, TRes> task Task to execute. TArg taskArg Optional task argument. Returns Type Description TRes Task result. Type Parameters Name Description TArg Argument type. TJobRes Type of job result. TRes Type of final task result. Execute<TArg, TJobRes, TRes>(Type, TArg) Executes given task on the grid projection. For step-by-step explanation of task execution process refer to IComputeTask<TArg, TJobRes, TRes> documentation. Declaration TRes Execute<TArg, TJobRes, TRes>(Type taskType, TArg taskArg) Parameters Type Name Description System.Type taskType Task type. TArg taskArg Optional task argument. Returns Type Description TRes Task result. Type Parameters Name Description TArg Argument type. TJobRes Type of job result. TRes Type of reduce result. ExecuteAsync<TJobRes, TRes>(IComputeTask<TJobRes, TRes>) Executes given task on the grid projection. For step-by-step explanation of task execution process refer to IComputeTask<TArg, TJobRes, TRes> documentation. Declaration Task<TRes> ExecuteAsync<TJobRes, TRes>(IComputeTask<TJobRes, TRes> task) Parameters Type Name Description IComputeTask <TJobRes, TRes> task Task to execute. Returns Type Description System.Threading.Tasks.Task <TRes> Task result. Type Parameters Name Description TJobRes Type of job result. TRes Type of reduce result. ExecuteAsync<TJobRes, TRes>(IComputeTask<TJobRes, TRes>, CancellationToken) Executes given task on the grid projection. For step-by-step explanation of task execution process refer to IComputeTask<TArg, TJobRes, TRes> documentation. Declaration Task<TRes> ExecuteAsync<TJobRes, TRes>(IComputeTask<TJobRes, TRes> task, CancellationToken cancellationToken) Parameters Type Name Description IComputeTask <TJobRes, TRes> task Task to execute. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task <TRes> Task result. Type Parameters Name Description TJobRes Type of job result. TRes Type of reduce result. ExecuteAsync<TJobRes, TRes>(Type) Executes given task on the grid projection. For step-by-step explanation of task execution process refer to IComputeTask<TArg, TJobRes, TRes> documentation. Declaration Task<TRes> ExecuteAsync<TJobRes, TRes>(Type taskType) Parameters Type Name Description System.Type taskType Task type. Returns Type Description System.Threading.Tasks.Task <TRes> Task result. Type Parameters Name Description TJobRes Type of job result. TRes Type of reduce result. ExecuteAsync<TJobRes, TRes>(Type, CancellationToken) Executes given task on the grid projection. For step-by-step explanation of task execution process refer to IComputeTask<TArg, TJobRes, TRes> documentation. Declaration Task<TRes> ExecuteAsync<TJobRes, TRes>(Type taskType, CancellationToken cancellationToken) Parameters Type Name Description System.Type taskType Task type. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task <TRes> Task result. Type Parameters Name Description TJobRes Type of job result. TRes Type of reduce result. ExecuteAsync<TArg, TJobRes, TRes>(IComputeTask<TArg, TJobRes, TRes>, TArg) Executes given task on the grid projection. For step-by-step explanation of task execution process refer to IComputeTask<TArg, TJobRes, TRes> documentation. Declaration Task<TRes> ExecuteAsync<TArg, TJobRes, TRes>(IComputeTask<TArg, TJobRes, TRes> task, TArg taskArg) Parameters Type Name Description IComputeTask <TArg, TJobRes, TRes> task Task to execute. TArg taskArg Optional task argument. Returns Type Description System.Threading.Tasks.Task <TRes> Task result. Type Parameters Name Description TArg Argument type. TJobRes Type of job result. TRes Type of final task result. ExecuteAsync<TArg, TJobRes, TRes>(IComputeTask<TArg, TJobRes, TRes>, TArg, CancellationToken) Executes given task on the grid projection. For step-by-step explanation of task execution process refer to IComputeTask<TArg, TJobRes, TRes> documentation. Declaration Task<TRes> ExecuteAsync<TArg, TJobRes, TRes>(IComputeTask<TArg, TJobRes, TRes> task, TArg taskArg, CancellationToken cancellationToken) Parameters Type Name Description IComputeTask <TArg, TJobRes, TRes> task Task to execute. TArg taskArg Optional task argument. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task <TRes> Task result. Type Parameters Name Description TArg Argument type. TJobRes Type of job result. TRes Type of final task result. ExecuteAsync<TArg, TJobRes, TRes>(Type, TArg) Executes given task on the grid projection. For step-by-step explanation of task execution process refer to IComputeTask<TArg, TJobRes, TRes> documentation. Declaration Task<TRes> ExecuteAsync<TArg, TJobRes, TRes>(Type taskType, TArg taskArg) Parameters Type Name Description System.Type taskType Task type. TArg taskArg Optional task argument. Returns Type Description System.Threading.Tasks.Task <TRes> Task result. Type Parameters Name Description TArg Argument type. TJobRes Type of job result. TRes Type of reduce result. ExecuteAsync<TArg, TJobRes, TRes>(Type, TArg, CancellationToken) Executes given task on the grid projection. For step-by-step explanation of task execution process refer to IComputeTask<TArg, TJobRes, TRes> documentation. Declaration Task<TRes> ExecuteAsync<TArg, TJobRes, TRes>(Type taskType, TArg taskArg, CancellationToken cancellationToken) Parameters Type Name Description System.Type taskType Task type. TArg taskArg Optional task argument. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task <TRes> Task result. Type Parameters Name Description TArg Argument type. TJobRes Type of job result. TRes Type of reduce result. ExecuteJavaTask<TRes>(String, Object) Executes given Java task on the grid projection. If task for given name has not been deployed yet, then 'taskName' will be used as task class name to auto-deploy the task. Declaration TRes ExecuteJavaTask<TRes>(string taskName, object taskArg) Parameters Type Name Description System.String taskName Java task name System.Object taskArg Optional argument of task execution, can be null. Returns Type Description TRes Task result. Type Parameters Name Description TRes Type of task result. ExecuteJavaTaskAsync<TRes>(String, Object) Executes given Java task on the grid projection. If task for given name has not been deployed yet, then 'taskName' will be used as task class name to auto-deploy the task. Declaration Task<TRes> ExecuteJavaTaskAsync<TRes>(string taskName, object taskArg) Parameters Type Name Description System.String taskName Java task name System.Object taskArg Optional argument of task execution, can be null. Returns Type Description System.Threading.Tasks.Task <TRes> Task result. Type Parameters Name Description TRes Type of task result. ExecuteJavaTaskAsync<TRes>(String, Object, CancellationToken) Executes given Java task on the grid projection. If task for given name has not been deployed yet, then 'taskName' will be used as task class name to auto-deploy the task. Declaration Task<TRes> ExecuteJavaTaskAsync<TRes>(string taskName, object taskArg, CancellationToken cancellationToken) Parameters Type Name Description System.String taskName Java task name System.Object taskArg Optional argument of task execution, can be null. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task <TRes> Task result. Type Parameters Name Description TRes Type of task result. Run(IComputeAction) Executes provided job on a node in this grid projection. Declaration void Run(IComputeAction action) Parameters Type Name Description IComputeAction action Job to execute. Run(IEnumerable<IComputeAction>) Executes collection of jobs on Ignite nodes within this grid projection. Declaration void Run(IEnumerable<IComputeAction> actions) Parameters Type Name Description System.Collections.Generic.IEnumerable < IComputeAction > actions Jobs to execute. RunAsync(IComputeAction) Executes provided job on a node in this grid projection. Declaration Task RunAsync(IComputeAction action) Parameters Type Name Description IComputeAction action Job to execute. Returns Type Description System.Threading.Tasks.Task RunAsync(IComputeAction, CancellationToken) Executes provided job on a node in this grid projection. Declaration Task RunAsync(IComputeAction action, CancellationToken cancellationToken) Parameters Type Name Description IComputeAction action Job to execute. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task RunAsync(IEnumerable<IComputeAction>) Executes collection of jobs on Ignite nodes within this grid projection. Declaration Task RunAsync(IEnumerable<IComputeAction> actions) Parameters Type Name Description System.Collections.Generic.IEnumerable < IComputeAction > actions Jobs to execute. Returns Type Description System.Threading.Tasks.Task RunAsync(IEnumerable<IComputeAction>, CancellationToken) Executes collection of jobs on Ignite nodes within this grid projection. Declaration Task RunAsync(IEnumerable<IComputeAction> actions, CancellationToken cancellationToken) Parameters Type Name Description System.Collections.Generic.IEnumerable < IComputeAction > actions Jobs to execute. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task Task. WithExecutor(String) Gets instance of the compute API associated with custom executor. All tasks and closures submitted to returned instance will be processed by this executor on both remote and local nodes. If an executor with the given name doesn't exist, task will be processed in default (\"public\") pool. Executor should be defined in ExecutorConfiguration . Declaration ICompute WithExecutor(string executorName) Parameters Type Name Description System.String executorName Executor name. Returns Type Description ICompute New Compute instance associated with a custom executor. WithKeepBinary() Sets keep-binary flag for the next executed Java task on this projection in the current thread so that task argument passed to Java and returned task results will not be deserialized. Declaration ICompute WithKeepBinary() Returns Type Description ICompute This compute instance for chaining calls. WithNoFailover() Sets no-failover flag for the next executed task on this projection in the current thread. If flag is set, job will be never failed over even if remote node crashes or rejects execution. When task starts execution, the no-failover flag is reset, so all other task will use default failover policy, unless this flag is set again. Declaration ICompute WithNoFailover() Returns Type Description ICompute This compute instance for chaining calls. WithNoResultCache() Disables caching for the next executed task in the current thread. Declaration ICompute WithNoResultCache() Returns Type Description ICompute This compute instance for chaining calls. WithTimeout(Int64) Sets task timeout for the next executed task on this projection in the current thread. When task starts execution, the timeout is reset, so one timeout is used only once. Declaration ICompute WithTimeout(long timeout) Parameters Type Name Description System.Int64 timeout Computation timeout in milliseconds. Returns Type Description ICompute This compute instance for chaining calls."
  },
  "api/Apache.Ignite.Core.Compute.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.Configuration.AsyncContinuationExecutor.html": {
    "href": "api/Apache.Ignite.Core.Configuration.AsyncContinuationExecutor.html",
    "title": "Enum AsyncContinuationExecutor | Apache Ignite.NET",
    "keywords": "Enum AsyncContinuationExecutor Defines async continuations behavior. Namespace : Apache.Ignite.Core.Configuration Assembly : Apache.Ignite.Core.dll Syntax public enum AsyncContinuationExecutor Fields Name Description Custom Indicates that custom executor is configured on the Java side. This value should not be used explicitly. ThreadPool Executes async continuations on the thread pool (default). UnsafeSynchronous Executes async continuations synchronously on the same thread that completes the previous operation. WARNING: can cause deadlocks and performance issues when not used correctly. Ignite performs cache operations using a special \"striped\" thread pool (see StripedThreadPoolSize ). Using this synchronous mode means that async continuations (any code coming after await cache.DoAsync() , or code in ContinueWith() ) will run on the striped pool: Cache operations can't execute while user code runs on the striped thread. Attempting other cache operations on the striped thread can cause a deadlock. This mode can improve performance, because continuations do not have to be scheduled on another thread. However, special care is required to release striped threads as soon as possible."
  },
  "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.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.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.Interop.IPlatformTarget.html": {
    "href": "api/Apache.Ignite.Core.Interop.IPlatformTarget.html",
    "title": "Interface IPlatformTarget | Apache Ignite.NET",
    "keywords": "Interface IPlatformTarget Interface to interoperate with org.apache.ignite.internal.processors.platform.PlatformTarget on Java side. Namespace : Apache.Ignite.Core.Interop Assembly : Apache.Ignite.Core.dll Syntax public interface IPlatformTarget Methods DoOutOpAsync<T>(Int32, Action<IBinaryRawWriter>, Func<IBinaryRawReader, T>) Performs asynchronous operation. Declaration Task<T> DoOutOpAsync<T>(int type, Action<IBinaryRawWriter> writeAction, Func<IBinaryRawReader, T> readAction) Parameters Type Name Description System.Int32 type Operation type code. System.Action < IBinaryRawWriter > writeAction Write action (can be null). System.Func < IBinaryRawReader , T> readAction Read function (can be null). Returns Type Description System.Threading.Tasks.Task <T> Task. Type Parameters Name Description T Result type DoOutOpAsync<T>(Int32, Action<IBinaryRawWriter>, Func<IBinaryRawReader, T>, CancellationToken) Performs asynchronous operation. Declaration Task<T> DoOutOpAsync<T>(int type, Action<IBinaryRawWriter> writeAction, Func<IBinaryRawReader, T> readAction, CancellationToken cancellationToken) Parameters Type Name Description System.Int32 type Operation type code. System.Action < IBinaryRawWriter > writeAction Write action (can be null). System.Func < IBinaryRawReader , T> readAction Read function (can be null). System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task <T> Task. Type Parameters Name Description T Result type InLongOutLong(Int32, Int64) Performs InLongOutLong operation. Declaration long InLongOutLong(int type, long val) Parameters Type Name Description System.Int32 type Operation type code. System.Int64 val Value. Returns Type Description System.Int64 Result. InObjectStreamOutObjectStream<T>(Int32, IPlatformTarget, Action<IBinaryRawWriter>, Func<IBinaryRawReader, IPlatformTarget, T>) Performs InObjectStreamOutObjectStream operation. Declaration T InObjectStreamOutObjectStream<T>(int type, IPlatformTarget arg, Action<IBinaryRawWriter> writeAction, Func<IBinaryRawReader, IPlatformTarget, T> readAction) Parameters Type Name Description System.Int32 type Operation type code. IPlatformTarget arg Target argument. System.Action < IBinaryRawWriter > writeAction Write action. System.Func < IBinaryRawReader , IPlatformTarget , T> readAction Read action. Returns Type Description T Result. Type Parameters Name Description T Result type. InStreamOutLong(Int32, Action<IBinaryRawWriter>) Performs InStreamOutLong operation. Declaration long InStreamOutLong(int type, Action<IBinaryRawWriter> writeAction) Parameters Type Name Description System.Int32 type Operation type code. System.Action < IBinaryRawWriter > writeAction Write action. Returns Type Description System.Int64 Result. InStreamOutObject(Int32, Action<IBinaryRawWriter>) Performs InStreamOutObject operation. Declaration IPlatformTarget InStreamOutObject(int type, Action<IBinaryRawWriter> writeAction) Parameters Type Name Description System.Int32 type Operation type code. System.Action < IBinaryRawWriter > writeAction Write action. Returns Type Description IPlatformTarget Result. InStreamOutStream<T>(Int32, Action<IBinaryRawWriter>, Func<IBinaryRawReader, T>) Performs InStreamOutStream operation. Declaration T InStreamOutStream<T>(int type, Action<IBinaryRawWriter> writeAction, Func<IBinaryRawReader, T> readAction) Parameters Type Name Description System.Int32 type Operation type code. System.Action < IBinaryRawWriter > writeAction Write action. System.Func < IBinaryRawReader , T> readAction Read action. Returns Type Description T Result. Type Parameters Name Description T Result type. OutObject(Int32) Performs the OutObject operation. Declaration IPlatformTarget OutObject(int type) Parameters Type Name Description System.Int32 type Operation type code. Returns Type Description IPlatformTarget Result. OutStream<T>(Int32, Func<IBinaryRawReader, T>) Performs OutStream operation. Declaration T OutStream<T>(int type, Func<IBinaryRawReader, T> readAction) Parameters Type Name Description System.Int32 type Operation type code. System.Func < IBinaryRawReader , T> readAction Read action. Returns Type Description T Result. Type Parameters Name Description T Result type."
  },
  "api/Apache.Ignite.Core.Interop.JavaObject.html": {
    "href": "api/Apache.Ignite.Core.Interop.JavaObject.html",
    "title": "Class JavaObject | Apache Ignite.NET",
    "keywords": "Class JavaObject Represents a Java object wrapper. JavaObject can be converted to Ignite filters and predicates which can be used on non-.NET Ignite nodes. Workflow is as follows: Instantiate specified Java class; Set property values; If the resulting object implements PlatformJavaObjectFactory, call create() method and use the result, otherwise use the original object. Inheritance System.Object JavaObject Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Interop Assembly : Apache.Ignite.Core.dll Syntax public class JavaObject Constructors JavaObject(String) Initializes a new instance of the JavaObject class. Declaration public JavaObject(string className) Parameters Type Name Description System.String className Name of the Java class. JavaObject(String, IDictionary<String, Object>) Initializes a new instance of the JavaObject class. Declaration public JavaObject(string className, IDictionary<string, object> properties) Parameters Type Name Description System.String className Name of the Java class. System.Collections.Generic.IDictionary < System.String , System.Object > properties The properties to set on the Java object. Properties ClassName Gets the Java class name. Declaration public string ClassName { get; } Property Value Type Description System.String Properties Gets the properties to be set on the Java object. Declaration public IDictionary<string, object> Properties { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.Object > Extension Methods ContinuousQueryExtensions.ToCacheEntryEventFilter<TK, TV>(JavaObject)"
  },
  "api/Apache.Ignite.Core.Interop.html": {
    "href": "api/Apache.Ignite.Core.Interop.html",
    "title": "Namespace Apache.Ignite.Core.Interop | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Interop Classes JavaObject Represents a Java object wrapper. JavaObject can be converted to Ignite filters and predicates which can be used on non-.NET Ignite nodes. Workflow is as follows: Instantiate specified Java class; Set property values; If the resulting object implements PlatformJavaObjectFactory, call create() method and use the result, otherwise use the original object. Interfaces IPlatformTarget Interface to interoperate with org.apache.ignite.internal.processors.platform.PlatformTarget on Java side."
  },
  "api/Apache.Ignite.Core.Lifecycle.ClientReconnectEventArgs.html": {
    "href": "api/Apache.Ignite.Core.Lifecycle.ClientReconnectEventArgs.html",
    "title": "Class ClientReconnectEventArgs | Apache Ignite.NET",
    "keywords": "Class ClientReconnectEventArgs Contains client reconnect event data. Inheritance System.Object System.EventArgs ClientReconnectEventArgs Inherited Members System.EventArgs.Empty System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Lifecycle Assembly : Apache.Ignite.Core.dll Syntax public class ClientReconnectEventArgs : EventArgs Constructors ClientReconnectEventArgs(Boolean) Initializes a new instance of the ClientReconnectEventArgs class. Declaration public ClientReconnectEventArgs(bool hasClusterRestarted) Parameters Type Name Description System.Boolean hasClusterRestarted Cluster restarted flag. Properties HasClusterRestarted Gets a value indicating whether this cluster has been restarted during reconnect. Declaration public bool HasClusterRestarted { get; } Property Value Type Description System.Boolean"
  },
  "api/Apache.Ignite.Core.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.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.Core.Events.NoopEventStorageSpi.html": {
    "href": "api/Apache.Ignite.Core.Events.NoopEventStorageSpi.html",
    "title": "Class NoopEventStorageSpi | Apache Ignite.NET",
    "keywords": "Class NoopEventStorageSpi No-op event storage interface, does not store anything. Inheritance System.Object NoopEventStorageSpi Implements IEventStorageSpi Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Events Assembly : Apache.Ignite.Core.dll Syntax public class NoopEventStorageSpi : IEventStorageSpi Implements IEventStorageSpi"
  },
  "api/Apache.Ignite.Core.Events.TaskEvent.html": {
    "href": "api/Apache.Ignite.Core.Events.TaskEvent.html",
    "title": "Class TaskEvent | Apache Ignite.NET",
    "keywords": "Class TaskEvent Ignite task event. Inheritance System.Object EventBase TaskEvent Implements IEvent System.IEquatable < EventBase > Inherited Members EventBase.Id EventBase.LocalOrder EventBase.Node EventBase.Message EventBase.Type EventBase.Name EventBase.Timestamp EventBase.Equals(EventBase) EventBase.Equals(Object) EventBase.GetHashCode() EventBase.ToString() EventBase.ReadNode(IBinaryRawReader) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Events Assembly : Apache.Ignite.Core.dll Syntax public sealed class TaskEvent : EventBase, IEvent, IEquatable<EventBase> Properties Internal Returns true if task is created by Ignite and is used for system needs. Declaration public bool Internal { get; } Property Value Type Description System.Boolean SubjectId Gets security subject ID initiated this task event, if available. This property is not available for TaskSessionAttrSet task event. Subject ID will be set either to node ID or client ID initiated task execution. Declaration public Guid? SubjectId { get; } Property Value Type Description System.Nullable < System.Guid > TaskClassName Gets name of task class that triggered this event. Declaration public string TaskClassName { get; } Property Value Type Description System.String TaskName Gets name of the task that triggered the event. Declaration public string TaskName { get; } Property Value Type Description System.String TaskSessionId Gets session ID of the task that triggered the event. Declaration public IgniteGuid? TaskSessionId { get; } Property Value Type Description System.Nullable < IgniteGuid > Methods ToShortString() Gets shortened version of ToString result. Declaration public override string ToShortString() Returns Type Description System.String Overrides EventBase.ToShortString() Implements IEvent System.IEquatable<T>"
  },
  "api/Apache.Ignite.Core.Events.html": {
    "href": "api/Apache.Ignite.Core.Events.html",
    "title": "Namespace Apache.Ignite.Core.Events | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Events Classes CacheEvent In-memory database (cache) event. CacheQueryExecutedEvent Cache query execution event. CacheQueryReadEvent Cache query read event. CacheRebalancingEvent In-memory database (cache) rebalancing event. Rebalance event happens every time there is a change CheckpointEvent Grid checkpoint event. DiscoveryEvent Grid discovery event. EventBase Base event implementation. EventType Contains event type constants. The decision to use class and not enumeration is dictated by allowing users to create their own events and/or event types which would be impossible with enumerations. Note that this interface defines not only individual type constants, but arrays of types as well to be conveniently used with IEvents methods. NOTE: all types in range from 1 to 1000 are reserved for internal Ignite events and should not be used by user-defined events. JobEvent Ignite job event. LocalEventListener Abstract local event listener holder for LocalEventListeners . Use LocalEventListener<T> derived class. LocalEventListener<T> Generic local event listener holder, see LocalEventListeners . MemoryEventStorageSpi In-memory event storage. NoopEventStorageSpi No-op event storage interface, does not store anything. TaskEvent Ignite task event. Interfaces IEvent Represents a Ignite event. IEventFilter<T> Represents an event filter. IEventListener<T> Represents an event listener. IEvents Provides functionality for event notifications on nodes defined by ClusterGroup . All members are thread-safe and may be used concurrently from multiple threads. IEventStorageSpi Manages local event storage. Only predefined implementations are supported: NoopEventStorageSpi , MemoryEventStorageSpi ."
  },
  "api/Apache.Ignite.Core.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.html": {
    "href": "api/Apache.Ignite.Core.html",
    "title": "Namespace Apache.Ignite.Core | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core Classes IgniteConfiguration Grid configuration. IgniteConfigurationSection Ignite configuration section for app.config and web.config files. Ignition This class defines a factory for the main Ignite API. Use Start() method to start Ignite with default configuration. All members are thread-safe and may be used concurrently from multiple threads. Interfaces IDataRegionMetrics Memory usage metrics. IDataStorageMetrics Persistent store metrics. IIgnite Main entry point for all Ignite APIs. You can obtain an instance of IIgnite through GetIgnite() , or for named grids you can use GetIgnite(String) . Note that you can have multiple instances of IIgnite running in the same process by giving each instance a different name. All members are thread-safe and may be used concurrently from multiple threads. IIgniteLock Distributed reentrant monitor (lock). The functionality is similar to the standard System.Threading.Monitor class, but works across all cluster nodes. This API corresponds to IgniteLock in Java."
  },
  "api/Apache.Ignite.EntityFramework.DbCachingMode.html": {
    "href": "api/Apache.Ignite.EntityFramework.DbCachingMode.html",
    "title": "Enum DbCachingMode | Apache Ignite.NET",
    "keywords": "Enum DbCachingMode Represents a second-level caching strategy. Namespace : Apache.Ignite.EntityFramework Assembly : Apache.Ignite.EntityFramework.dll Syntax public enum DbCachingMode Fields Name Description ReadOnly Read-only mode, never invalidates. Database updates are ignored in this mode. Once query results have been cached, they are kept in cache until expired (forever when no expiration is specified). This mode is suitable for data that is not expected to change (like a list of countries and other dictionary data). ReadWrite Read-write mode. Cached data is invalidated when underlying entity set changes. This is \"normal\" cache mode which always provides correct query results. Keep in mind that this mode works correctly only when all database changes are performed via System.Data.Entity.DbContext with Ignite caching configured. Other database updates are not tracked."
  },
  "api/Apache.Ignite.EntityFramework.DbCachingPolicy.html": {
    "href": "api/Apache.Ignite.EntityFramework.DbCachingPolicy.html",
    "title": "Class DbCachingPolicy | Apache Ignite.NET",
    "keywords": "Class DbCachingPolicy Default caching policy implementation: everything is cached with ReadWrite , no expiration. Inheritance System.Object DbCachingPolicy Implements IDbCachingPolicy Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.EntityFramework Assembly : Apache.Ignite.EntityFramework.dll Syntax public class DbCachingPolicy : IDbCachingPolicy Methods CanBeCached(DbQueryInfo) Determines whether the specified query can be cached. Declaration public virtual bool CanBeCached(DbQueryInfo queryInfo) Parameters Type Name Description DbQueryInfo queryInfo The query information. Returns Type Description System.Boolean true if the specified query can be cached; otherwise, false . CanBeCached(DbQueryInfo, Int32) Determines whether specified number of rows should be cached. Declaration public virtual bool CanBeCached(DbQueryInfo queryInfo, int rowCount) Parameters Type Name Description DbQueryInfo queryInfo The query information. System.Int32 rowCount The count of fetched rows. Returns Type Description System.Boolean GetCachingMode(DbQueryInfo) Gets the caching strategy for a give query. Declaration public virtual DbCachingMode GetCachingMode(DbQueryInfo queryInfo) Parameters Type Name Description DbQueryInfo queryInfo The query information. Returns Type Description DbCachingMode Caching strategy for the query. GetExpirationTimeout(DbQueryInfo) Gets the absolute expiration timeout for a given query. Declaration public virtual TimeSpan GetExpirationTimeout(DbQueryInfo queryInfo) Parameters Type Name Description DbQueryInfo queryInfo The query information. Returns Type Description System.TimeSpan Expiration timeout. System.TimeSpan.MaxValue for no expiration. Implements IDbCachingPolicy"
  },
  "api/Apache.Ignite.EntityFramework.DbQueryInfo.html": {
    "href": "api/Apache.Ignite.EntityFramework.DbQueryInfo.html",
    "title": "Class DbQueryInfo | Apache Ignite.NET",
    "keywords": "Class DbQueryInfo Query info. Inheritance System.Object DbQueryInfo Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.EntityFramework Assembly : Apache.Ignite.EntityFramework.dll Syntax public class DbQueryInfo Properties AffectedEntitySets Gets the affected entity sets. Declaration public ICollection<EntitySetBase> AffectedEntitySets { get; } Property Value Type Description System.Collections.Generic.ICollection < System.Data.Entity.Core.Metadata.Edm.EntitySetBase > CommandText Gets the command text. Declaration public string CommandText { get; } Property Value Type Description System.String Parameters Gets the parameters. Declaration public DbParameterCollection Parameters { get; } Property Value Type Description System.Data.Common.DbParameterCollection"
  },
  "api/Apache.Ignite.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.IBinaryObjectBuilder.html": {
    "href": "api/Apache.Ignite.Core.Binary.IBinaryObjectBuilder.html",
    "title": "Interface IBinaryObjectBuilder | Apache Ignite.NET",
    "keywords": "Interface IBinaryObjectBuilder binary object builder. Provides ability to build binary objects dynamically without having class definitions. Note that type ID is required in order to build binary object. Usually it is enough to provide a simple type name and Ignite will generate the type ID automatically. Namespace : Apache.Ignite.Core.Binary Assembly : Apache.Ignite.Core.dll Syntax public interface IBinaryObjectBuilder Methods Build() Build the object. Declaration IBinaryObject Build() Returns Type Description IBinaryObject Resulting binary object. GetField<T>(String) Get object field value. If value is another binary object, then builder for this object will be returned. If value is a container for other objects (array, ICollection, IDictionary), then container will be returned with primitive types in deserialized form and binary objects as builders. Any change in builder or collection returned through this method will be reflected in the resulting binary object after build. Declaration T GetField<T>(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description T Field value. Type Parameters Name Description T RemoveField(String) Remove object field. Declaration IBinaryObjectBuilder RemoveField(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description IBinaryObjectBuilder Current builder instance. SetArrayField<T>(String, T[]) Sets the array field. Declaration IBinaryObjectBuilder SetArrayField<T>(string fieldName, T[] val) Parameters Type Name Description System.String fieldName Name of the field. T[] val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. Type Parameters Name Description T SetBooleanArrayField(String, Boolean[]) Sets the boolean array field. Declaration IBinaryObjectBuilder SetBooleanArrayField(string fieldName, bool[] val) Parameters Type Name Description System.String fieldName Name of the field. System.Boolean [] val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetBooleanField(String, Boolean) Sets the boolean field. Declaration IBinaryObjectBuilder SetBooleanField(string fieldName, bool val) Parameters Type Name Description System.String fieldName Name of the field. System.Boolean val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetByteArrayField(String, Byte[]) Sets the byte array field. Declaration IBinaryObjectBuilder SetByteArrayField(string fieldName, byte[] val) Parameters Type Name Description System.String fieldName Name of the field. System.Byte [] val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetByteField(String, Byte) Sets the byte field. Declaration IBinaryObjectBuilder SetByteField(string fieldName, byte val) Parameters Type Name Description System.String fieldName Name of the field. System.Byte val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetCharArrayField(String, Char[]) Sets the char array field. Declaration IBinaryObjectBuilder SetCharArrayField(string fieldName, char[] val) Parameters Type Name Description System.String fieldName Name of the field. System.Char [] val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetCharField(String, Char) Sets the char field. Declaration IBinaryObjectBuilder SetCharField(string fieldName, char val) Parameters Type Name Description System.String fieldName Name of the field. System.Char val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetCollectionField(String, ICollection) Sets the collection field. Declaration IBinaryObjectBuilder SetCollectionField(string fieldName, ICollection val) Parameters Type Name Description System.String fieldName Name of the field. System.Collections.ICollection val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetDecimalArrayField(String, Nullable<Decimal>[]) Sets the decimal array field. Declaration IBinaryObjectBuilder SetDecimalArrayField(string fieldName, decimal ? [] val) Parameters Type Name Description System.String fieldName Name of the field. System.Nullable < System.Decimal >[] val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetDecimalField(String, Nullable<Decimal>) Sets the decimal field. Declaration IBinaryObjectBuilder SetDecimalField(string fieldName, decimal ? val) Parameters Type Name Description System.String fieldName Name of the field. System.Nullable < System.Decimal > val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetDictionaryField(String, IDictionary) Sets the dictionary field. Declaration IBinaryObjectBuilder SetDictionaryField(string fieldName, IDictionary val) Parameters Type Name Description System.String fieldName Name of the field. System.Collections.IDictionary val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetDoubleArrayField(String, Double[]) Sets the double array field. Declaration IBinaryObjectBuilder SetDoubleArrayField(string fieldName, double[] val) Parameters Type Name Description System.String fieldName Name of the field. System.Double [] val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetDoubleField(String, Double) Sets the double field. Declaration IBinaryObjectBuilder SetDoubleField(string fieldName, double val) Parameters Type Name Description System.String fieldName Name of the field. System.Double val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetEnumArrayField<T>(String, T[]) Sets the enum array field. Declaration IBinaryObjectBuilder SetEnumArrayField<T>(string fieldName, T[] val) Parameters Type Name Description System.String fieldName Name of the field. T[] val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. Type Parameters Name Description T SetEnumField<T>(String, T) Sets the enum field. Declaration IBinaryObjectBuilder SetEnumField<T>(string fieldName, T val) Parameters Type Name Description System.String fieldName Name of the field. T val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. Type Parameters Name Description T SetField<T>(String, T) Set object field value. Value can be of any type including other IBinaryObject and other builders. Value type for metadata is determined as typeof(T) ; use SetField<T>(String, T, Type) overload to override. Declaration IBinaryObjectBuilder SetField<T>(string fieldName, T val) Parameters Type Name Description System.String fieldName Field name. T val Field value. Returns Type Description IBinaryObjectBuilder Current builder instance. Type Parameters Name Description T SetField<T>(String, T, Type) Set object field value. Value can be of any type including other IBinaryObject and other builders. Declaration IBinaryObjectBuilder SetField<T>(string fieldName, T val, Type valType) Parameters Type Name Description System.String fieldName Field name. T val Field value. System.Type valType Field value type for metadata (see also GetFieldTypeName(String) ). Returns Type Description IBinaryObjectBuilder Current builder instance. Type Parameters Name Description T SetFloatArrayField(String, Single[]) Sets the float array field. Declaration IBinaryObjectBuilder SetFloatArrayField(string fieldName, float[] val) Parameters Type Name Description System.String fieldName Name of the field. System.Single [] val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetFloatField(String, Single) Sets the float field. Declaration IBinaryObjectBuilder SetFloatField(string fieldName, float val) Parameters Type Name Description System.String fieldName Name of the field. System.Single val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetGuidArrayField(String, Nullable<Guid>[]) Sets the guid array field. Declaration IBinaryObjectBuilder SetGuidArrayField(string fieldName, Guid? [] val) Parameters Type Name Description System.String fieldName Name of the field. System.Nullable < System.Guid >[] val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetGuidField(String, Nullable<Guid>) Sets the guid field. Declaration IBinaryObjectBuilder SetGuidField(string fieldName, Guid? val) Parameters Type Name Description System.String fieldName Name of the field. System.Nullable < System.Guid > val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetIntArrayField(String, Int32[]) Sets the int array field. Declaration IBinaryObjectBuilder SetIntArrayField(string fieldName, int[] val) Parameters Type Name Description System.String fieldName Name of the field. System.Int32 [] val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetIntField(String, Int32) Sets the int field. Declaration IBinaryObjectBuilder SetIntField(string fieldName, int val) Parameters Type Name Description System.String fieldName Name of the field. System.Int32 val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetLongArrayField(String, Int64[]) Sets the long array field. Declaration IBinaryObjectBuilder SetLongArrayField(string fieldName, long[] val) Parameters Type Name Description System.String fieldName Name of the field. System.Int64 [] val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetLongField(String, Int64) Sets the long field. Declaration IBinaryObjectBuilder SetLongField(string fieldName, long val) Parameters Type Name Description System.String fieldName Name of the field. System.Int64 val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetShortArrayField(String, Int16[]) Sets the short array field. Declaration IBinaryObjectBuilder SetShortArrayField(string fieldName, short[] val) Parameters Type Name Description System.String fieldName Name of the field. System.Int16 [] val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetShortField(String, Int16) Sets the short field. Declaration IBinaryObjectBuilder SetShortField(string fieldName, short val) Parameters Type Name Description System.String fieldName Name of the field. System.Int16 val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetStringArrayField(String, String[]) Sets the string array field. Declaration IBinaryObjectBuilder SetStringArrayField(string fieldName, string[] val) Parameters Type Name Description System.String fieldName Name of the field. System.String [] val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetStringField(String, String) Sets the string field. Declaration IBinaryObjectBuilder SetStringField(string fieldName, string val) Parameters Type Name Description System.String fieldName Name of the field. System.String val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetTimestampArrayField(String, Nullable<DateTime>[]) Sets the timestamp array field. Declaration IBinaryObjectBuilder SetTimestampArrayField(string fieldName, DateTime? [] val) Parameters Type Name Description System.String fieldName Name of the field. System.Nullable < System.DateTime >[] val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetTimestampField(String, Nullable<DateTime>) Sets the timestamp field. Declaration IBinaryObjectBuilder SetTimestampField(string fieldName, DateTime? val) Parameters Type Name Description System.String fieldName Name of the field. System.Nullable < System.DateTime > val The value. Returns Type Description IBinaryObjectBuilder Current builder instance."
  },
  "api/Apache.Ignite.Core.Binary.ITimestampConverter.html": {
    "href": "api/Apache.Ignite.Core.Binary.ITimestampConverter.html",
    "title": "Interface ITimestampConverter | Apache Ignite.NET",
    "keywords": "Interface ITimestampConverter Converts System.DateTime values to Java Timestamp and back. Namespace : Apache.Ignite.Core.Binary Assembly : Apache.Ignite.Core.dll Syntax public interface ITimestampConverter Methods FromJavaTicks(Int64, Int32) Converts date from Java ticks. Declaration DateTime FromJavaTicks(long high, int low) Parameters Type Name Description System.Int64 high High part (milliseconds). System.Int32 low Low part (nanoseconds) Returns Type Description System.DateTime ToJavaTicks(DateTime, out Int64, out Int32) Converts date to Java ticks. Declaration void ToJavaTicks(DateTime date, out long high, out int low) Parameters Type Name Description System.DateTime date Date System.Int64 high High part (milliseconds). System.Int32 low Low part (nanoseconds)"
  },
  "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.PersistentStore.PersistentStoreConfiguration.html": {
    "href": "api/Apache.Ignite.Core.PersistentStore.PersistentStoreConfiguration.html",
    "title": "Class PersistentStoreConfiguration | Apache Ignite.NET",
    "keywords": "Class PersistentStoreConfiguration Configures Apache Ignite persistent store. Obsolete, use DataStorageConfiguration . Inheritance System.Object PersistentStoreConfiguration Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.PersistentStore Assembly : Apache.Ignite.Core.dll Syntax [Obsolete(\"Use DataStorageConfiguration.\")] public class PersistentStoreConfiguration Constructors PersistentStoreConfiguration() Initializes a new instance of the PersistentStoreConfiguration class. Declaration public PersistentStoreConfiguration() Fields DefaultCheckpointingFrequency Default value for CheckpointingFrequency . Declaration public static readonly TimeSpan DefaultCheckpointingFrequency Field Value Type Description System.TimeSpan DefaultCheckpointingThreads Default value for CheckpointingThreads . Declaration public const int DefaultCheckpointingThreads = 4 Field Value Type Description System.Int32 DefaultCheckpointWriteOrder Default value for CheckpointWriteOrder . Declaration public const CheckpointWriteOrder DefaultCheckpointWriteOrder = CheckpointWriteOrder.Sequential Field Value Type Description CheckpointWriteOrder DefaultLockWaitTime Default value for LockWaitTime . Declaration public static readonly TimeSpan DefaultLockWaitTime Field Value Type Description System.TimeSpan DefaultRateTimeInterval The default rate time interval. Declaration public static readonly TimeSpan DefaultRateTimeInterval Field Value Type Description System.TimeSpan DefaultSubIntervals The default sub intervals. Declaration public const int DefaultSubIntervals = 5 Field Value Type Description System.Int32 DefaultTlbSize Default value for TlbSize . Declaration public const int DefaultTlbSize = 131072 Field Value Type Description System.Int32 DefaultWalArchivePath Default value for WalArchivePath . Declaration public const string DefaultWalArchivePath = \"db/wal/archive\" Field Value Type Description System.String DefaultWalFlushFrequency Default value for WalFlushFrequency . Declaration public static readonly TimeSpan DefaultWalFlushFrequency Field Value Type Description System.TimeSpan DefaultWalFsyncDelayNanos Default value for WalFsyncDelayNanos . Declaration public const long DefaultWalFsyncDelayNanos = 1000L Field Value Type Description System.Int64 DefaultWalHistorySize Default value for WalHistorySize . Declaration public const int DefaultWalHistorySize = 20 Field Value Type Description System.Int32 DefaultWalRecordIteratorBufferSize Default value for WalRecordIteratorBufferSize . Declaration public const int DefaultWalRecordIteratorBufferSize = 67108864 Field Value Type Description System.Int32 DefaultWalSegments Default value for WalSegments . Declaration public const int DefaultWalSegments = 10 Field Value Type Description System.Int32 DefaultWalSegmentSize Default value for WalSegmentSize . Declaration public const int DefaultWalSegmentSize = 67108864 Field Value Type Description System.Int32 DefaultWalStorePath Default value for WalStorePath . Declaration public const string DefaultWalStorePath = \"db/wal\" Field Value Type Description System.String DefaultWriteThrottlingEnabled Default value for WriteThrottlingEnabled . Declaration public const bool DefaultWriteThrottlingEnabled = false Field Value Type Description System.Boolean Properties AlwaysWriteFullPages Gets or sets a value indicating whether full pages should always be written. Declaration public bool AlwaysWriteFullPages { get; set; } Property Value Type Description System.Boolean CheckpointingFrequency Gets or sets the checkpointing frequency which is a minimal interval when the dirty pages will be written to the Persistent Store. Declaration public TimeSpan CheckpointingFrequency { get; set; } Property Value Type Description System.TimeSpan CheckpointingPageBufferSize Gets or sets the size of the checkpointing page buffer. Default is 0 : Ignite will choose buffer size automatically. Declaration public long CheckpointingPageBufferSize { get; set; } Property Value Type Description System.Int64 CheckpointingThreads Gets or sets the number of threads for checkpointing. Declaration public int CheckpointingThreads { get; set; } Property Value Type Description System.Int32 CheckpointWriteOrder Gets or sets the checkpoint page write order on disk. Declaration public CheckpointWriteOrder CheckpointWriteOrder { get; set; } Property Value Type Description CheckpointWriteOrder LockWaitTime Gets or sets the persistent manager file lock wait time. Declaration public TimeSpan LockWaitTime { get; set; } Property Value Type Description System.TimeSpan MetricsEnabled Gets or sets a value indicating whether to enable persistent store metrics. See GetPersistentStoreMetrics() . Declaration public bool MetricsEnabled { get; set; } Property Value Type Description System.Boolean PersistentStorePath Gets or sets the path where data and indexes will be persisted. Declaration public string PersistentStorePath { get; set; } Property Value Type Description System.String RateTimeInterval Gets or sets the length of the time interval for rate-based metrics. This interval defines a window over which hits will be tracked. Declaration public TimeSpan RateTimeInterval { get; set; } Property Value Type Description System.TimeSpan SubIntervals Number of sub-intervals to split the RateTimeInterval into to track the update history. Declaration public int SubIntervals { get; set; } Property Value Type Description System.Int32 TlbSize Gets or sets the size of the TLB (Thread-Local Buffer), in bytes. Declaration public int TlbSize { get; set; } Property Value Type Description System.Int32 WalArchivePath Gets or sets the path to the directory where WAL (Write Ahead Log) archive is stored. Every WAL segment will be fully copied to this directory before it can be reused for WAL purposes. Declaration public string WalArchivePath { get; set; } Property Value Type Description System.String WalFlushFrequency Gets or sets the WAL (Write Ahead Log) flush frequency. Declaration public TimeSpan WalFlushFrequency { get; set; } Property Value Type Description System.TimeSpan WalFsyncDelayNanos Gets or sets the WAL (Write Ahead Log) fsync (disk sync) delay, in nanoseconds Declaration public long WalFsyncDelayNanos { get; set; } Property Value Type Description System.Int64 WalHistorySize Gets or sets the number of checkpoints to store in WAL (Write Ahead Log) history. Declaration public int WalHistorySize { get; set; } Property Value Type Description System.Int32 WalMode Gets or sets the WAL (Write Ahead Log) mode. Declaration public WalMode WalMode { get; set; } Property Value Type Description WalMode WalRecordIteratorBufferSize Gets or sets the size of the WAL (Write Ahead Log) record iterator buffer, in bytes. Declaration public int WalRecordIteratorBufferSize { get; set; } Property Value Type Description System.Int32 WalSegments Gets or sets a number of WAL (Write Ahead Log) segments to work with. For performance reasons, the whole WAL is split into files of fixed length called segments. Declaration public int WalSegments { get; set; } Property Value Type Description System.Int32 WalSegmentSize Gets or sets the size of the WAL (Write Ahead Log) segment. For performance reasons, the whole WAL is split into files of fixed length called segments. Declaration public int WalSegmentSize { get; set; } Property Value Type Description System.Int32 WalStorePath Gets or sets the path to the directory where WAL (Write Ahead Log) is stored. Declaration public string WalStorePath { get; set; } Property Value Type Description System.String WriteThrottlingEnabled Gets or sets a value indicating whether threads that generate dirty pages too fast during ongoing checkpoint will be throttled. Declaration public bool WriteThrottlingEnabled { get; set; } Property Value Type Description System.Boolean"
  },
  "api/Apache.Ignite.Core.PersistentStore.WalMode.html": {
    "href": "api/Apache.Ignite.Core.PersistentStore.WalMode.html",
    "title": "Enum WalMode | Apache Ignite.NET",
    "keywords": "Enum WalMode Write Ahead Log mode. Namespace : Apache.Ignite.Core.PersistentStore Assembly : Apache.Ignite.Core.dll Syntax [Obsolete(\"Use Apache.Ignite.Core.Data.WalMode\")] public enum WalMode Fields Name Description Background Background mode. Does not force application buffer flush. Data may be lost in case of process crash. Default Default mode: full-sync disk writes. These writes survive power loss scenarios. LogOnly Log only mode: flushes application buffers. These writes survive process crash. None WAL disabled."
  },
  "api/Apache.Ignite.Core.PersistentStore.html": {
    "href": "api/Apache.Ignite.Core.PersistentStore.html",
    "title": "Namespace Apache.Ignite.Core.PersistentStore | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.PersistentStore Classes PersistentStoreConfiguration Configures Apache Ignite persistent store. Obsolete, use DataStorageConfiguration . Interfaces IPersistentStoreMetrics Persistent store metrics. Obsolete, see IDataStorageMetrics . Enums CheckpointWriteOrder Defines checkpoint pages order on disk. WalMode Write Ahead Log mode."
  },
  "api/Apache.Ignite.Core.Plugin.Cache.ICachePluginConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Plugin.Cache.ICachePluginConfiguration.html",
    "title": "Interface ICachePluginConfiguration | Apache Ignite.NET",
    "keywords": "Interface ICachePluginConfiguration Cache plugin configuration marker interface. Starting point to extend CacheConfiguration and extend existing cache functionality. Namespace : Apache.Ignite.Core.Plugin.Cache Assembly : Apache.Ignite.Core.dll Syntax public interface ICachePluginConfiguration Properties CachePluginConfigurationClosureFactoryId Gets the id to locate PlatformCachePluginConfigurationClosureFactory on Java side and read the data written by WriteBinary(IBinaryRawWriter) method. Declaration int ? CachePluginConfigurationClosureFactoryId { get; } Property Value Type Description System.Nullable < System.Int32 > Methods WriteBinary(IBinaryRawWriter) Writes this instance to a raw writer. This method will be called when CachePluginConfigurationClosureFactoryId is not null to propagate configuration to the Java side. Declaration void WriteBinary(IBinaryRawWriter writer) Parameters Type Name Description IBinaryRawWriter writer The writer."
  },
  "api/Apache.Ignite.Core.Transactions.ITransactionMetrics.html": {
    "href": "api/Apache.Ignite.Core.Transactions.ITransactionMetrics.html",
    "title": "Interface ITransactionMetrics | Apache Ignite.NET",
    "keywords": "Interface ITransactionMetrics Transaction metrics, shared across all caches. Namespace : Apache.Ignite.Core.Transactions Assembly : Apache.Ignite.Core.dll Syntax public interface ITransactionMetrics Properties CommitTime Gets the last time transaction was committed. Declaration DateTime CommitTime { get; } Property Value Type Description System.DateTime RollbackTime Gets the last time transaction was rolled back. Declaration DateTime RollbackTime { get; } Property Value Type Description System.DateTime TxCommits Gets the total number of transaction commits. Declaration int TxCommits { get; } Property Value Type Description System.Int32 TxRollbacks Gets the total number of transaction rollbacks. Declaration int TxRollbacks { get; } Property Value Type Description System.Int32"
  },
  "api/Apache.Ignite.Core.Transactions.ITransactions.html": {
    "href": "api/Apache.Ignite.Core.Transactions.ITransactions.html",
    "title": "Interface ITransactions | Apache Ignite.NET",
    "keywords": "Interface ITransactions Transactions facade. All members are thread-safe and may be used concurrently from multiple threads. Namespace : Apache.Ignite.Core.Transactions Assembly : Apache.Ignite.Core.dll Syntax public interface ITransactions Properties DefaultTimeout Gets the default transaction timeout. Declaration TimeSpan DefaultTimeout { get; } Property Value Type Description System.TimeSpan DefaultTimeoutOnPartitionMapExchange Gets the default transaction timeout on partition map exchange. Declaration TimeSpan DefaultTimeoutOnPartitionMapExchange { get; } Property Value Type Description System.TimeSpan DefaultTransactionConcurrency Gets the default transaction concurrency. Declaration TransactionConcurrency DefaultTransactionConcurrency { get; } Property Value Type Description TransactionConcurrency DefaultTransactionIsolation Gets the default transaction isolation. Declaration TransactionIsolation DefaultTransactionIsolation { get; } Property Value Type Description TransactionIsolation Tx Gets transaction started by this thread or null if this thread does not have a transaction. Declaration ITransaction Tx { get; } Property Value Type Description ITransaction Transaction started by this thread or null if this thread does not have a transaction. Methods GetLocalActiveTransactions() Returns a list of active transactions initiated by this node. Returned transactions do not support next operations: Commit() . CommitAsync() . Get ThreadId . Get StartTime . Get Meta<TV>(String) . Get AddMeta<TV>(String, TV) . Get RemoveMeta<TV>(String) . Declaration ITransactionCollection GetLocalActiveTransactions() Returns Type Description ITransactionCollection Collection of ITransactionCollection GetMetrics() Gets the metrics. Declaration ITransactionMetrics GetMetrics() Returns Type Description ITransactionMetrics ResetMetrics() Resets the metrics. Declaration void ResetMetrics() TxStart() Starts a transaction with default isolation ( DefaultTransactionIsolation , concurrency ( DefaultTransactionConcurrency ), timeout ( DefaultTimeout ), and invalidation policy. All defaults are set in CacheConfiguration at startup. Declaration ITransaction TxStart() Returns Type Description ITransaction New transaction. TxStart(TransactionConcurrency, TransactionIsolation) Starts new transaction with the specified concurrency and isolation. Declaration ITransaction TxStart(TransactionConcurrency concurrency, TransactionIsolation isolation) Parameters Type Name Description TransactionConcurrency concurrency Concurrency. TransactionIsolation isolation Isolation. Returns Type Description ITransaction New transaction. TxStart(TransactionConcurrency, TransactionIsolation, TimeSpan, Int32) Starts new transaction with the specified concurrency and isolation. Declaration ITransaction TxStart(TransactionConcurrency concurrency, TransactionIsolation isolation, TimeSpan timeout, int txSize) Parameters Type Name Description TransactionConcurrency concurrency Concurrency. TransactionIsolation isolation Isolation. System.TimeSpan timeout Timeout. TimeSpan.Zero for indefinite timeout. System.Int32 txSize Number of entries participating in transaction (may be approximate). Returns Type Description ITransaction New transaction. WithLabel(String) Returns instance of Ignite Transactions to mark a transaction with a special label. Declaration ITransactions WithLabel(string label) Parameters Type Name Description System.String label Returns Type Description ITransactions ITransactions WithTracing() Returns instance of Ignite Transactions to enable tracing for a transaction. Declaration ITransactions WithTracing() Returns Type Description ITransactions ITransactions"
  },
  "api/Apache.Ignite.Core.Transactions.TransactionConcurrency.html": {
    "href": "api/Apache.Ignite.Core.Transactions.TransactionConcurrency.html",
    "title": "Enum TransactionConcurrency | Apache Ignite.NET",
    "keywords": "Enum TransactionConcurrency Transaction concurrency control. See ITransaction for more information on transaction concurrency controls. Namespace : Apache.Ignite.Core.Transactions Assembly : Apache.Ignite.Core.dll Syntax public enum TransactionConcurrency Fields Name Description Optimistic Optimistic concurrency control. Pessimistic Pessimistic concurrency control."
  },
  "api/Apache.Ignite.Core.Transactions.TransactionConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Transactions.TransactionConfiguration.html",
    "title": "Class TransactionConfiguration | Apache Ignite.NET",
    "keywords": "Class TransactionConfiguration Transactions configuration. Inheritance System.Object TransactionConfiguration Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Transactions Assembly : Apache.Ignite.Core.dll Syntax public class TransactionConfiguration Constructors TransactionConfiguration() Initializes a new instance of the TransactionConfiguration class. Declaration public TransactionConfiguration() Fields DefaultDeadlockTimeout The default value for DeadlockTimeout Declaration public static readonly TimeSpan DefaultDeadlockTimeout Field Value Type Description System.TimeSpan DefaultDefaultTimeout The default value for DefaultTransactionIsolation property. Declaration public static readonly TimeSpan DefaultDefaultTimeout Field Value Type Description System.TimeSpan DefaultDefaultTimeoutOnPartitionMapExchange The default value for DefaultTimeoutOnPartitionMapExchange Declaration public static readonly TimeSpan DefaultDefaultTimeoutOnPartitionMapExchange Field Value Type Description System.TimeSpan DefaultDefaultTransactionConcurrency The default value for DefaultTransactionConcurrency property. Declaration public const TransactionConcurrency DefaultDefaultTransactionConcurrency = TransactionConcurrency.Pessimistic Field Value Type Description TransactionConcurrency DefaultDefaultTransactionIsolation The default value for DefaultTransactionIsolation property. Declaration public const TransactionIsolation DefaultDefaultTransactionIsolation = TransactionIsolation.RepeatableRead Field Value Type Description TransactionIsolation DefaultPessimisticTransactionLogLinger The default value for PessimisticTransactionLogLinger property. Declaration public static readonly TimeSpan DefaultPessimisticTransactionLogLinger Field Value Type Description System.TimeSpan DefaultPessimisticTransactionLogSize The default value for PessimisticTransactionLogSize property. Declaration public const int DefaultPessimisticTransactionLogSize = 0 Field Value Type Description System.Int32 Properties DeadlockTimeout This is an experimental feature. Transactional SQL is currently in a beta status. Gets or sets timeout before starting deadlock detection for caches configured with TransactionalSnapshot cache atomicity mode. System.TimeSpan.Zero for disabling deadlock detection. Declaration public TimeSpan DeadlockTimeout { get; set; } Property Value Type Description System.TimeSpan DefaultTimeout Gets or sets the cache transaction timeout to use when one is not explicitly specified. System.TimeSpan.Zero for infinite timeout. Declaration public TimeSpan DefaultTimeout { get; set; } Property Value Type Description System.TimeSpan DefaultTimeoutOnPartitionMapExchange Gets or sets transaction timeout for partition map synchronization. System.TimeSpan.Zero for infinite timeout. Declaration public TimeSpan DefaultTimeoutOnPartitionMapExchange { get; set; } Property Value Type Description System.TimeSpan DefaultTransactionConcurrency Gets or sets the cache transaction concurrency to use when one is not explicitly specified. Declaration public TransactionConcurrency DefaultTransactionConcurrency { get; set; } Property Value Type Description TransactionConcurrency DefaultTransactionIsolation Gets or sets the cache transaction isolation to use when one is not explicitly specified. Declaration public TransactionIsolation DefaultTransactionIsolation { get; set; } Property Value Type Description TransactionIsolation PessimisticTransactionLogLinger Gets or sets the delay after which pessimistic recovery entries will be cleaned up for failed node. Declaration public TimeSpan PessimisticTransactionLogLinger { get; set; } Property Value Type Description System.TimeSpan PessimisticTransactionLogSize Gets or sets the size of pessimistic transactions log stored on node in order to recover transaction commit if originating node has left grid before it has sent all messages to transaction nodes. 0 for unlimited. Declaration public int PessimisticTransactionLogSize { get; set; } Property Value Type Description System.Int32"
  },
  "api/Apache.Ignite.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 NamespacePrefix Gets or sets the prefix to be added to the full type name. For example, Java package names usually begin with org. or com. . In combination with NamespaceToLower , we can map .NET type name Apache.Ignite.Foo to a corresponding Java type name org.apache.ignite.Foo , conforming to the naming conventions for both languages. Declaration public string NamespacePrefix { get; set; } Property Value Type Description System.String NamespaceToLower Gets or sets a value indicating whether this instance converts the namespace part to the lower case. For example, Java package names are usually lowercase. In combination with NamespacePrefix , we can map .NET type name Apache.Ignite.Foo to a corresponding Java type name org.apache.ignite.Foo , conforming to the naming conventions for both languages. Declaration public bool NamespaceToLower { 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.TimestampAttribute.html": {
    "href": "api/Apache.Ignite.Core.Binary.TimestampAttribute.html",
    "title": "Class TimestampAttribute | Apache Ignite.NET",
    "keywords": "Class TimestampAttribute Instructs the serializer to write DateTime fields and properties in Timestamp format, which is interoperable with other platforms and works in SQL, but does not allow non-UTC values. When applied to a struct or a class, changes behavior for all fields and properties. Normally serializer uses WriteObject<T>(String, T) for DateTime fields. This attribute changes the behavior to WriteTimestamp(String, Nullable<DateTime>) . See also ForceTimestamp . Inheritance System.Object System.Attribute TimestampAttribute Implements System.Runtime.InteropServices._Attribute Inherited Members System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Boolean) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Boolean) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Module) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.IsDefined(System.Reflection.Module, System.Type) System.Attribute.IsDefined(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Boolean) System.Attribute.IsDefined(System.Reflection.Assembly, System.Type) System.Attribute.IsDefined(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.Equals(System.Object) System.Attribute.GetHashCode() System.Attribute.Match(System.Object) System.Attribute.IsDefaultAttribute() System.Attribute.System.Runtime.InteropServices._Attribute.GetTypeInfoCount(System.UInt32) System.Attribute.System.Runtime.InteropServices._Attribute.GetTypeInfo(System.UInt32, System.UInt32, System.IntPtr) System.Attribute.System.Runtime.InteropServices._Attribute.GetIDsOfNames(System.Guid, System.IntPtr, System.UInt32, System.UInt32, System.IntPtr) System.Attribute.System.Runtime.InteropServices._Attribute.Invoke(System.UInt32, System.Guid, System.UInt32, System.Int16, System.IntPtr, System.IntPtr, System.IntPtr, System.IntPtr) System.Attribute.TypeId System.Object.ToString() System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Binary Assembly : Apache.Ignite.Core.dll Syntax [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Property | AttributeTargets.Field)] public sealed class TimestampAttribute : Attribute, _Attribute Implements System.Runtime.InteropServices._Attribute"
  },
  "api/Apache.Ignite.Core.Cache.Affinity.Rendezvous.html": {
    "href": "api/Apache.Ignite.Core.Cache.Affinity.Rendezvous.html",
    "title": "Namespace Apache.Ignite.Core.Cache.Affinity.Rendezvous | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Cache.Affinity.Rendezvous Classes ClusterNodeAttributeAffinityBackupFilter Attribute-based affinity backup filter, see Attributes , AffinityBackupFilter . This filter can be used to ensure that, for a given partition, primary and backup nodes are selected from different racks in a datacenter, or from different availability zones in a cloud environment, so that a single hardware failure does not cause data loss. This implementation will discard backups rather than place multiple on the same set of nodes. This avoids trying to cram more data onto remaining nodes when some have failed. This class is constructed with a set of node attribute names, and a candidate node will be rejected if any of the previously selected nodes for a partition have identical values for all of those attributes on the candidate node. Another way to understand this is the set of attribute values defines the key of a group into which a node is placed, and the primaries and backups for a partition cannot share nodes in the same group. A null attribute is treated as a distinct value, so two nodes with a null attribute will be treated as having the same value. For example, let's say Ignite cluster of 12 nodes is deployed into 3 racks - r1, r2, r3. Ignite nodes have \"SITE\" attributes set accordingly to \"r1\", \"r2\", \"r3\". For a cache with 1 backup ( Backups set to 1 ), every partition is assigned to 2 nodes. When the primary node has \"SITE\" attribute set to \"r1\", all other nodes with \"SITE\"=\"r1\" are excluded by this filter when selecting the backup node. RendezvousAffinityFunction Affinity function for partitioned cache based on Highest Random Weight algorithm."
  },
  "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.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 DefaultForceTimestamp Default ForceTimestamp setting. Declaration public const bool DefaultForceTimestamp = false 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 ForceTimestamp Gets or sets a value indicating whether all DateTime keys, values and object fields should be written as a 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, unless TimestampConverter is provided. Normally Ignite serializer uses WriteObject<T>(String, T) for DateTime fields, keys and values. This attribute changes the behavior to WriteTimestamp(String, Nullable<DateTime>) . See also TimestampAttribute , ForceTimestamp . Declaration public bool ForceTimestamp { 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 TimestampConverter Gets or sets a converter between System.DateTime and Java Timestamp. Called from WriteTimestamp(String, Nullable<DateTime>) , WriteTimestampArray(String, Nullable<DateTime>[]) , ReadTimestamp(String) , ReadTimestampArray(String) . See also ForceTimestamp . Declaration public ITimestampConverter TimestampConverter { get; set; } Property Value Type Description ITimestampConverter 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.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.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.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.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 IAffinityBackupFilter Represents a backup filter for an affinity function - see AffinityBackupFilter . Only one predefined implementation is supported for now: ClusterNodeAttributeAffinityBackupFilter . IAffinityFunction Represents a function that maps cache keys to cluster nodes. Predefined implementations: RendezvousAffinityFunction ."
  },
  "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.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.Log.ConsoleLogger.html": {
    "href": "api/Apache.Ignite.Core.Log.ConsoleLogger.html",
    "title": "Class ConsoleLogger | Apache Ignite.NET",
    "keywords": "Class ConsoleLogger Logs to Console. Simple logger implementation without dependencies, provided out of the box for convenience. For anything more complex please use NLog/log4net integrations. Inheritance System.Object ConsoleLogger Implements ILogger Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Log Assembly : Apache.Ignite.Core.dll Syntax public class ConsoleLogger : ILogger Constructors ConsoleLogger() Initializes a new instance of ConsoleLogger class. Uses Warn minimum level. Declaration public ConsoleLogger() Properties DateTimeProvider Gets or sets DateTime provider. Declaration public IDateTimeProvider DateTimeProvider { get; set; } Property Value Type Description IDateTimeProvider MinLevel Gets the minimum level to be logged. Any levels lower than that are ignored. Default is Warn . Declaration public LogLevel MinLevel { get; set; } Property Value Type Description LogLevel Methods IsEnabled(LogLevel) Determines whether the specified log level is enabled. Declaration public bool IsEnabled(LogLevel level) Parameters Type Name Description LogLevel level The level. Returns Type Description System.Boolean Value indicating whether the specified log level is enabled Log(LogLevel, String, Object[], IFormatProvider, String, String, Exception) Logs the specified message. Declaration public void Log(LogLevel level, string message, object[] args, IFormatProvider formatProvider, string category, string nativeErrorInfo, Exception ex) Parameters Type Name Description LogLevel level The level. System.String message The message. System.Object [] args The arguments to format message . Can be null (formatting will not occur). System.IFormatProvider formatProvider The format provider. Can be null if args is null. System.String category The logging category name. System.String nativeErrorInfo The native error information. System.Exception ex The exception. Can be null. Implements ILogger Extension Methods LoggerExtensions.Trace(ILogger, String) LoggerExtensions.Trace(ILogger, String, Object[]) LoggerExtensions.Trace(ILogger, Exception, String) LoggerExtensions.Trace(ILogger, Exception, String, Object[]) LoggerExtensions.Debug(ILogger, String) LoggerExtensions.Debug(ILogger, String, Object[]) LoggerExtensions.Debug(ILogger, Exception, String) LoggerExtensions.Debug(ILogger, Exception, String, Object[]) LoggerExtensions.Info(ILogger, String) LoggerExtensions.Info(ILogger, String, Object[]) LoggerExtensions.Info(ILogger, Exception, String) LoggerExtensions.Info(ILogger, Exception, String, Object[]) LoggerExtensions.Warn(ILogger, String) LoggerExtensions.Warn(ILogger, String, Object[]) LoggerExtensions.Warn(ILogger, Exception, String) LoggerExtensions.Warn(ILogger, Exception, String, Object[]) LoggerExtensions.Error(ILogger, String) LoggerExtensions.Error(ILogger, String, Object[]) LoggerExtensions.Error(ILogger, Exception, String) LoggerExtensions.Error(ILogger, Exception, String, Object[]) LoggerExtensions.Log(ILogger, LogLevel, String) LoggerExtensions.Log(ILogger, LogLevel, String, Object[]) LoggerExtensions.Log(ILogger, LogLevel, Exception, String) LoggerExtensions.Log(ILogger, LogLevel, Exception, String, Object[]) LoggerExtensions.GetLogger(ILogger, String) LoggerExtensions.GetLogger(ILogger, Type)"
  },
  "api/Apache.Ignite.Core.Log.IDateTimeProvider.html": {
    "href": "api/Apache.Ignite.Core.Log.IDateTimeProvider.html",
    "title": "Interface IDateTimeProvider | Apache Ignite.NET",
    "keywords": "Interface IDateTimeProvider System.DateTime abstraction for logging. Namespace : Apache.Ignite.Core.Log Assembly : Apache.Ignite.Core.dll Syntax public interface IDateTimeProvider Methods Now() Gets current System.DateTime . Declaration DateTime Now() Returns Type Description System.DateTime"
  },
  "api/Apache.Ignite.Core.Log.ILogger.html": {
    "href": "api/Apache.Ignite.Core.Log.ILogger.html",
    "title": "Interface ILogger | Apache Ignite.NET",
    "keywords": "Interface ILogger Defines Ignite logging interface. This interface only provides essential log methods. All convenience overloads are in LoggerExtensions . Namespace : Apache.Ignite.Core.Log Assembly : Apache.Ignite.Core.dll Syntax public interface ILogger Methods IsEnabled(LogLevel) Determines whether the specified log level is enabled. Declaration bool IsEnabled(LogLevel level) Parameters Type Name Description LogLevel level The level. Returns Type Description System.Boolean Value indicating whether the specified log level is enabled Log(LogLevel, String, Object[], IFormatProvider, String, String, Exception) Logs the specified message. Declaration void Log(LogLevel level, string message, object[] args, IFormatProvider formatProvider, string category, string nativeErrorInfo, Exception ex) Parameters Type Name Description LogLevel level The level. System.String message The message. System.Object [] args The arguments to format message . Can be null (formatting will not occur). System.IFormatProvider formatProvider The format provider. Can be null if args is null. System.String category The logging category name. System.String nativeErrorInfo The native error information. System.Exception ex The exception. Can be null. Extension Methods LoggerExtensions.Trace(ILogger, String) LoggerExtensions.Trace(ILogger, String, Object[]) LoggerExtensions.Trace(ILogger, Exception, String) LoggerExtensions.Trace(ILogger, Exception, String, Object[]) LoggerExtensions.Debug(ILogger, String) LoggerExtensions.Debug(ILogger, String, Object[]) LoggerExtensions.Debug(ILogger, Exception, String) LoggerExtensions.Debug(ILogger, Exception, String, Object[]) LoggerExtensions.Info(ILogger, String) LoggerExtensions.Info(ILogger, String, Object[]) LoggerExtensions.Info(ILogger, Exception, String) LoggerExtensions.Info(ILogger, Exception, String, Object[]) LoggerExtensions.Warn(ILogger, String) LoggerExtensions.Warn(ILogger, String, Object[]) LoggerExtensions.Warn(ILogger, Exception, String) LoggerExtensions.Warn(ILogger, Exception, String, Object[]) LoggerExtensions.Error(ILogger, String) LoggerExtensions.Error(ILogger, String, Object[]) LoggerExtensions.Error(ILogger, Exception, String) LoggerExtensions.Error(ILogger, Exception, String, Object[]) LoggerExtensions.Log(ILogger, LogLevel, String) LoggerExtensions.Log(ILogger, LogLevel, String, Object[]) LoggerExtensions.Log(ILogger, LogLevel, Exception, String) LoggerExtensions.Log(ILogger, LogLevel, Exception, String, Object[]) LoggerExtensions.GetLogger(ILogger, String) LoggerExtensions.GetLogger(ILogger, Type)"
  },
  "api/Apache.Ignite.Core.Log.LocalDateTimeProvider.html": {
    "href": "api/Apache.Ignite.Core.Log.LocalDateTimeProvider.html",
    "title": "Class LocalDateTimeProvider | Apache Ignite.NET",
    "keywords": "Class LocalDateTimeProvider Returns System.DateTime.Now . Inheritance System.Object LocalDateTimeProvider Implements IDateTimeProvider Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Log Assembly : Apache.Ignite.Core.dll Syntax public class LocalDateTimeProvider : IDateTimeProvider Fields Instance Default instance. Declaration public static readonly LocalDateTimeProvider Instance Field Value Type Description LocalDateTimeProvider Methods Now() Gets current System.DateTime . Declaration public DateTime Now() Returns Type Description System.DateTime Implements IDateTimeProvider"
  },
  "api/Apache.Ignite.Core.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: using (var tx = cache.Ignite.GetTransactions().TxStart()) { 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.Remove(\"k2\"); // Commit the transaction. tx.Commit(); } Inherited Members System.IDisposable.Dispose() Namespace : Apache.Ignite.Core.Transactions Assembly : Apache.Ignite.Core.dll Syntax public interface ITransaction : IDisposable Properties Concurrency Transaction concurrency mode. Declaration TransactionConcurrency Concurrency { get; } Property Value Type Description TransactionConcurrency Isolation Transaction isolation level. Declaration TransactionIsolation Isolation { get; } Property Value Type Description TransactionIsolation IsRollbackOnly Gets a value indicating whether this transaction was marked as rollback-only. Declaration bool IsRollbackOnly { get; } Property Value Type Description System.Boolean Label Label of current transaction. Declaration string Label { get; } Property Value Type Description System.String NodeId ID of the node on which this transaction started. Declaration Guid NodeId { get; } Property Value Type Description System.Guid Originating node ID. StartTime Start time of this transaction on this node. Declaration DateTime StartTime { get; } Property Value Type Description System.DateTime State Current transaction state. Declaration TransactionState State { get; } Property Value Type Description TransactionState ThreadId ID of the thread in which this transaction started. Declaration long ThreadId { get; } Property Value Type Description System.Int64 Timeout Timeout for this transaction. If transaction times out prior to it's completion, an exception will be thrown. System.TimeSpan.Zero for infinite timeout. Declaration TimeSpan Timeout { get; } Property Value Type Description System.TimeSpan Methods AddMeta<TV>(String, TV) Adds a new metadata. Declaration void AddMeta<TV>(string name, TV val) Parameters Type Name Description System.String name Metadata name. TV val Metadata value. Type Parameters Name Description TV Commit() Commits this transaction. Declaration void Commit() CommitAsync() Commits this transaction. Declaration Task CommitAsync() Returns Type Description System.Threading.Tasks.Task Meta<TV>(String) Gets metadata by name. Declaration TV Meta<TV>(string name) Parameters Type Name Description System.String name Metadata name. Returns Type Description TV Metadata value. Type Parameters Name Description TV Exceptions Type Condition System.Collections.Generic.KeyNotFoundException If metadata key was not found. RemoveMeta<TV>(String) Removes metadata by name. Declaration TV RemoveMeta<TV>(string name) Parameters Type Name Description System.String name Metadata name. Returns Type Description TV Value of removed metadata or default value for V type. Type Parameters Name Description TV Rollback() Rolls back this transaction. Declaration void Rollback() RollbackAsync() Rolls back this transaction. Declaration Task RollbackAsync() Returns Type Description System.Threading.Tasks.Task SetRollbackonly() Modify the transaction associated with the current thread such that the only possible outcome of the transaction is to roll back the transaction. Declaration bool SetRollbackonly() Returns Type Description System.Boolean True if rollback-only flag was set as a result of this operation, false if it was already set prior to this call or could not be set because transaction is already finishing up committing or rolling back."
  },
  "api/Apache.Ignite.Core.Transactions.ITransactionCollection.html": {
    "href": "api/Apache.Ignite.Core.Transactions.ITransactionCollection.html",
    "title": "Interface ITransactionCollection | Apache Ignite.NET",
    "keywords": "Interface ITransactionCollection Disposable readonly collection of ITransaction Inherited Members System.Collections.Generic.ICollection<Apache.Ignite.Core.Transactions.ITransaction>.Add(Apache.Ignite.Core.Transactions.ITransaction) System.Collections.Generic.ICollection<Apache.Ignite.Core.Transactions.ITransaction>.Clear() System.Collections.Generic.ICollection<Apache.Ignite.Core.Transactions.ITransaction>.Contains(Apache.Ignite.Core.Transactions.ITransaction) System.Collections.Generic.ICollection<Apache.Ignite.Core.Transactions.ITransaction>.CopyTo(Apache.Ignite.Core.Transactions.ITransaction[], System.Int32) System.Collections.Generic.ICollection<Apache.Ignite.Core.Transactions.ITransaction>.Remove(Apache.Ignite.Core.Transactions.ITransaction) System.Collections.Generic.ICollection<Apache.Ignite.Core.Transactions.ITransaction>.Count System.Collections.Generic.ICollection<Apache.Ignite.Core.Transactions.ITransaction>.IsReadOnly System.Collections.Generic.IEnumerable<Apache.Ignite.Core.Transactions.ITransaction>.GetEnumerator() System.IDisposable.Dispose() Namespace : Apache.Ignite.Core.Transactions Assembly : Apache.Ignite.Core.dll Syntax public interface ITransactionCollection : ICollection<ITransaction>, IEnumerable<ITransaction>, IEnumerable, IDisposable"
  },
  "api/Apache.Ignite.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 , ForceTimestamp . 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.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.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.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. ITimestampConverter Converts System.DateTime values to Java Timestamp and back."
  },
  "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.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.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.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.Configuration.html": {
    "href": "api/Apache.Ignite.Core.Cache.Configuration.html",
    "title": "Namespace Apache.Ignite.Core.Cache.Configuration | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Cache.Configuration Classes CacheConfiguration Defines grid cache configuration. CacheKeyConfiguration Configuration defining various aspects of cache keys without explicit usage of annotations on user classes. MemoryConfiguration A page memory configuration for an Apache Ignite node. The page memory is a manageable off-heap based memory architecture that divides all continuously allocated memory regions into pages of fixed size. An individual page can store one or many cache key-value entries that allows reusing the memory in the most efficient way and avoid memory fragmentation issues. By default, the page memory allocates a single continuous memory region. All the caches that will be configured in an application will be mapped to this memory region by default, thus, all the cache data will reside in that memory region. If initial size of the default memory region doesn't satisfy requirements or it's required to have multiple memory regions with different properties then MemoryPolicyConfiguration can be used for both scenarios. For instance, using memory policies you can define memory regions of different maximum size, eviction policies, swapping options, etc. Once you define a new memory region you can bind particular Ignite caches to it. To learn more about memory policies refer to MemoryPolicyConfiguration documentation. Obsolete, use DataStorageConfiguration . MemoryPolicyConfiguration Defines page memory policy configuration. See MemoryPolicies . Obsolete, use DataRegionConfiguration . NearCacheConfiguration Defines near cache configuration. Distributed cache can also be fronted by a Near cache, which is a smaller local cache that stores most recently or most frequently accessed data. Just like with a partitioned cache, the user can control the size of the near cache and its eviction policies. PlatformCacheConfiguration Native .NET cache configuration. Enables native .NET cache. Cache entries will be stored in deserialized form in CLR heap. When enabled on server nodes, all primary keys will be stored in platform memory as well. Same eviction policy applies to near cache entries for all keys on client nodes and non-primary keys on server nodes. Enabling this can greatly improve performance for key-value operations and scan queries, at the expense of RAM usage. Supported operations (async counterparts included): Get(TK) , TryGet(TK, out TV) GetAll(IEnumerable<TK>) ContainsKey(TK) , ContainsKeys(IEnumerable<TK>) LocalPeek(TK, CachePeekMode[]) , TryLocalPeek(TK, out TV, CachePeekMode[]) GetLocalEntries(CachePeekMode[]) GetLocalSize(CachePeekMode[]) Query(QueryBase) with ScanQuery<TK, TV> QueryAlias Represents cache query configuration alias. QueryEntity Query entity is a description of cache entry (composed of key and value) in a way of how it must be indexed and can be queried. QueryField Represents a queryable field. QueryIndex Represents cache query index configuration. QueryIndexField Represents an indexed field. QuerySqlFieldAttribute Marks field or property for SQL queries. Using this attribute is an alternative to Fields in CacheConfiguration . QueryTextFieldAttribute Marks field or property for Text queries. Using this attribute is an alternative to Fields in CacheConfiguration . Enums CacheAtomicityMode Cache atomicity mode. CacheMode Caching modes. CacheRebalanceMode Cache rebalance mode. When rebalancing is enabled (i.e. has value other than None ), distributed caches will attempt to rebalance all necessary values from other grid nodes. Replicated caches will try to load the full set of cache entries from other nodes, while partitioned caches will only load the entries for which current node is primary or backup. Note that rebalance mode only makes sense for Replicated and Partitioned caches. Caches with Local mode are local by definition and therefore cannot rebalance any values from neighboring nodes. CacheWriteSynchronizationMode Mode indicating how Ignite should wait for write replies from other nodes. DataPageEvictionMode Memory page eviction mode. Only data pages, that store key-value entries, are eligible for eviction. The other types of pages, like index or system pages, are not evictable. PartitionLossPolicy Partition loss policy. Defines how cache will behave in a case when one or more partitions are lost because of a node(s) failure. All Safe policies prevent a user from interaction with partial data in lost partitions until ResetLostPartitions(IEnumerable<String>) method is called. *All policies allow working with partial data in lost partitions. ReadOnly and ReadWrite* policies do not automatically change partition state and thus do not change rebalancing assignments for such partitions. QueryIndexType Query index type."
  },
  "api/Apache.Ignite.Core.Cache.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 defined explicitly. Interfaces IExpiryPolicy Defines functions to determine when cache entries will expire based on creation, access and modification operations."
  },
  "api/Apache.Ignite.Core.Cache.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.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). InvalidNodeState Invalid node state (node is stopping or not fully started). InvalidOpCode Invalid request operation code. ResourceDoesNotExist Resource does not exist. SecurityViolation Authorization failure. Success Operation succeeded. TooManyComputeTasks Too many compute tasks (see MaxActiveComputeTasksPerConnection ). TooManyCursors Too many cursors (see MaxOpenCursorsPerConnection )."
  },
  "api/Apache.Ignite.Core.Client.Compute.IComputeClient.html": {
    "href": "api/Apache.Ignite.Core.Client.Compute.IComputeClient.html",
    "title": "Interface IComputeClient | Apache Ignite.NET",
    "keywords": "Interface IComputeClient Client Compute API. See GetCompute() and GetCompute() . Namespace : Apache.Ignite.Core.Client.Compute Assembly : Apache.Ignite.Core.dll Syntax public interface IComputeClient Properties ClusterGroup Gets the cluster group for this IComputeClient instance. Declaration IClientClusterGroup ClusterGroup { get; } Property Value Type Description IClientClusterGroup Methods ExecuteJavaTask<TRes>(String, Object) Executes Java task by class name. Declaration TRes ExecuteJavaTask<TRes>(string taskName, object taskArg) Parameters Type Name Description System.String taskName Java task name. System.Object taskArg Optional argument of task execution, can be null. Returns Type Description TRes Task result. Type Parameters Name Description TRes Type of task result. ExecuteJavaTaskAsync<TRes>(String, Object) Executes Java task by class name. Declaration Task<TRes> ExecuteJavaTaskAsync<TRes>(string taskName, object taskArg) Parameters Type Name Description System.String taskName Java task name. System.Object taskArg Optional argument of task execution, can be null. Returns Type Description System.Threading.Tasks.Task <TRes> Task result. Type Parameters Name Description TRes Type of task result. ExecuteJavaTaskAsync<TRes>(String, Object, CancellationToken) Executes Java task by class name. Declaration Task<TRes> ExecuteJavaTaskAsync<TRes>(string taskName, object taskArg, CancellationToken cancellationToken) Parameters Type Name Description System.String taskName Java task name. System.Object taskArg Optional argument of task execution, can be null. System.Threading.CancellationToken cancellationToken Cancellation token. Returns Type Description System.Threading.Tasks.Task <TRes> Task result. Type Parameters Name Description TRes Type of task result. WithKeepBinary() Returns a new instance of IComputeClient with binary mode enabled: Java task argument (on server side) and result (on client side) won't be deserialized. Declaration IComputeClient WithKeepBinary() Returns Type Description IComputeClient New Compute instance with binary mode enabled. WithNoFailover() Returns a new instance of IComputeClient with disabled failover. When failover is disabled, compute jobs won't be retried in case of node crashes. Declaration IComputeClient WithNoFailover() Returns Type Description IComputeClient New Compute instance with disabled failover. WithNoResultCache() Returns a new instance of IComputeClient with disabled result cache. Declaration IComputeClient WithNoResultCache() Returns Type Description IComputeClient New Compute instance with disabled result cache. WithTimeout(TimeSpan) Returns a new instance of IComputeClient with a timeout for all task executions. Declaration IComputeClient WithTimeout(TimeSpan timeout) Parameters Type Name Description System.TimeSpan timeout Timeout. Returns Type Description IComputeClient New Compute instance with timeout."
  },
  "api/Apache.Ignite.Core.Client.IIgniteClient.html": {
    "href": "api/Apache.Ignite.Core.Client.IIgniteClient.html",
    "title": "Interface IIgniteClient | Apache Ignite.NET",
    "keywords": "Interface IIgniteClient Main entry point for Ignite Thin Client APIs. You can obtain an instance of IIgniteClient through one of the StartClient() overloads. Instances of this class and all nested APIs are thread safe. Inherited Members System.IDisposable.Dispose() Namespace : Apache.Ignite.Core.Client Assembly : Apache.Ignite.Core.dll Syntax public interface IIgniteClient : IDisposable Properties LocalEndPoint Gets the current local EndPoint. Declaration EndPoint LocalEndPoint { get; } Property Value Type Description System.Net.EndPoint RemoteEndPoint Gets the current remote EndPoint. Declaration EndPoint RemoteEndPoint { get; } Property Value Type Description System.Net.EndPoint Methods CreateCache<TK, TV>(CacheClientConfiguration) Dynamically starts new cache using provided configuration. Declaration ICacheClient<TK, TV> CreateCache<TK, TV>(CacheClientConfiguration configuration) Parameters Type Name Description CacheClientConfiguration configuration Cache configuration. Returns Type Description ICacheClient <TK, TV> Existing or newly created cache. Type Parameters Name Description TK Cache key type. TV Cache value type. CreateCache<TK, TV>(String) Dynamically starts new cache using template configuration. Declaration ICacheClient<TK, TV> CreateCache<TK, TV>(string name) Parameters Type Name Description System.String name Cache name. Returns Type Description ICacheClient <TK, TV> Existing or newly created cache. Type Parameters Name Description TK Cache key type. TV Cache value type. DestroyCache(String) Destroys dynamically created (with CreateCache<TK, TV>(String) or GetOrCreateCache<TK, TV>(String) ) cache. Declaration void DestroyCache(string name) Parameters Type Name Description System.String name The name of the cache to stop. GetBinary() Gets Ignite binary services. Declaration IBinary GetBinary() Returns Type Description IBinary Instance of IBinary interface GetCache<TK, TV>(String) Gets the cache instance for the given name to work with keys and values of specified types. You can get instances of ICacheClient<TK, TV> of the same name, but with different key/value types. These will use the same named cache, but only allow working with entries of specified types. Attempt to retrieve an entry of incompatible type will result in System.InvalidCastException . Use GetCache<TK, TV>(String) in order to work with entries of arbitrary types. Declaration ICacheClient<TK, TV> GetCache<TK, TV>(string name) Parameters Type Name Description System.String name Cache name. Returns Type Description ICacheClient <TK, TV> Cache instance for given name. Type Parameters Name Description TK Cache key type. TV Cache value type. GetCacheNames() Gets the collection of names of currently available caches, or empty collection if there are no caches. Declaration ICollection<string> GetCacheNames() Returns Type Description System.Collections.Generic.ICollection < System.String > Collection of names of currently available caches. GetCluster() Gets Ignite cluster. Declaration IClientCluster GetCluster() Returns Type Description IClientCluster Instance of IClientCluster interface. GetCompute() Gets the compute API. Declaration IComputeClient GetCompute() Returns Type Description IComputeClient GetConfiguration() Gets the configuration. Declaration IgniteClientConfiguration GetConfiguration() Returns Type Description IgniteClientConfiguration GetConnections() Gets all active connections. Ignite Thin Client maintains connections to multiple server nodes when EnablePartitionAwareness is true. Declaration IEnumerable<IClientConnection> GetConnections() Returns Type Description System.Collections.Generic.IEnumerable < IClientConnection > GetDataStreamer<TK, TV>(String) Gets a new instance of the data streamer associated with the given cache name. Data streamer loads data efficiently into cache. See IDataStreamerClient<TK, TV> for more information. Declaration IDataStreamerClient<TK, TV> GetDataStreamer<TK, TV>(string cacheName) Parameters Type Name Description System.String cacheName Cache name. Returns Type Description IDataStreamerClient <TK, TV> Data streamer. Type Parameters Name Description TK TV GetDataStreamer<TK, TV>(String, DataStreamerClientOptions) Gets a new instance of the data streamer associated with the given cache name. Data streamer loads data efficiently into cache. See IDataStreamerClient<TK, TV> for more information. Declaration IDataStreamerClient<TK, TV> GetDataStreamer<TK, TV>(string cacheName, DataStreamerClientOptions options) Parameters Type Name Description System.String cacheName Cache name. DataStreamerClientOptions options Data streamer options. Returns Type Description IDataStreamerClient <TK, TV> Data streamer. Type Parameters Name Description TK TV GetDataStreamer<TK, TV>(String, DataStreamerClientOptions<TK, TV>) Gets a new instance of the data streamer associated with the given cache name. Data streamer loads data efficiently into cache. See IDataStreamerClient<TK, TV> for more information. Declaration IDataStreamerClient<TK, TV> GetDataStreamer<TK, TV>(string cacheName, DataStreamerClientOptions<TK, TV> options) Parameters Type Name Description System.String cacheName Cache name. DataStreamerClientOptions <TK, TV> options Data streamer options. Returns Type Description IDataStreamerClient <TK, TV> Data streamer. Type Parameters Name Description TK TV 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. GetServices() Gets the services API. Declaration IServicesClient GetServices() Returns Type Description IServicesClient GetTransactions() Gets Ignite transactions facade ITransactionsClient . Transactions are bound to the thread started the transaction. After that, each cache operation within this thread will belong to the corresponding transaction until the transaction is committed, rolled back or closed. Should not be used with async calls. Declaration ITransactionsClient GetTransactions() Returns Type Description ITransactionsClient"
  },
  "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.Cluster.ICluster.html": {
    "href": "api/Apache.Ignite.Core.Cluster.ICluster.html",
    "title": "Interface ICluster | Apache Ignite.NET",
    "keywords": "Interface ICluster Represents whole cluster (group of all nodes in a cluster). All members are thread-safe and may be used concurrently from multiple threads. Inherited Members IClusterGroup.Ignite IClusterGroup.GetCompute() IClusterGroup.ForNodes(IEnumerable<IClusterNode>) IClusterGroup.ForNodes(IClusterNode[]) IClusterGroup.ForNodeIds(IEnumerable<Guid>) IClusterGroup.ForNodeIds(Guid[]) IClusterGroup.ForPredicate(Func<IClusterNode, Boolean>) IClusterGroup.ForAttribute(String, String) IClusterGroup.ForCacheNodes(String) IClusterGroup.ForDataNodes(String) IClusterGroup.ForClientNodes(String) IClusterGroup.ForRemotes() IClusterGroup.ForDaemons() IClusterGroup.ForHost(IClusterNode) IClusterGroup.ForRandom() IClusterGroup.ForOldest() IClusterGroup.ForYoungest() IClusterGroup.ForDotNet() IClusterGroup.ForServers() IClusterGroup.GetNodes() IClusterGroup.GetNode(Guid) IClusterGroup.GetNode() IClusterGroup.GetMetrics() IClusterGroup.GetMessaging() IClusterGroup.GetEvents() IClusterGroup.GetServices() IClusterGroup.EnableStatistics(IEnumerable<String>, Boolean) IClusterGroup.ClearStatistics(IEnumerable<String>) Namespace : Apache.Ignite.Core.Cluster Assembly : Apache.Ignite.Core.dll Syntax public interface ICluster : IClusterGroup Properties ClientReconnectTask Gets the reconnect task, which will transition to Completed state when local client node reconnects to the cluster. Result of the task indicates whether cluster has been restarted. If local node is not in client mode or is not disconnected, returns completed task. Declaration Task<bool> ClientReconnectTask { get; } Property Value Type Description System.Threading.Tasks.Task < System.Boolean > The reconnect task. TopologyVersion Gets current topology version. In case of TCP discovery topology versions are sequential they start from 1 and get incremented every time whenever a node joins or leaves. For other discovery SPIs topology versions may not be (and likely are not) sequential. Declaration long TopologyVersion { get; } Property Value Type Description System.Int64 Current topology version. Methods DisableWal(String) Disables write-ahead logging for specified cache. When WAL is disabled, changes are not logged to disk. This significantly improves cache update speed.The drawback is absence of local crash-recovery guarantees. If node is crashed, local content of WAL-disabled cache will be cleared on restart to avoid data corruption. Internally this method will wait for all current cache operations to finish and prevent new cache operations from being executed.Then checkpoint is initiated to flush all data to disk.Control is returned to the callee when all dirty pages are prepared for checkpoint, but not necessarily flushed to disk. WAL state can be changed only for persistent caches. Declaration void DisableWal(string cacheName) Parameters Type Name Description System.String cacheName Name of the cache. EnableWal(String) Enables write-ahead logging for specified cache. Restoring crash-recovery guarantees of a previous call to DisableWal(String) . Internally this method will wait for all current cache operations to finish and prevent new cache operations from being executed. Then checkpoint is initiated to flush all data to disk. Control is returned to the callee when all data is persisted to disk. WAL state can be changed only for persistent caches. Declaration void EnableWal(string cacheName) Parameters Type Name Description System.String cacheName Name of the cache. ForLocal() Gets monadic projection consisting from the local node. Declaration IClusterGroup ForLocal() Returns Type Description IClusterGroup Monadic projection consisting from the local node. GetBaselineAutoAdjustTimeout() Gets the value of time which we would wait before the actual topology change since last server topology change(node join/left/fail). Declaration long GetBaselineAutoAdjustTimeout() Returns Type Description System.Int64 Timeout value GetBaselineTopology() Gets the baseline topology. Returns null if SetBaselineTopology(Int64) has not been called. Declaration ICollection<IBaselineNode> GetBaselineTopology() Returns Type Description System.Collections.Generic.ICollection < IBaselineNode > GetLocalNode() Gets local Ignite node. Declaration IClusterNode GetLocalNode() Returns Type Description IClusterNode Local Ignite node. GetTopology(Int64) Gets a topology by version. Returns null if topology history storage doesn't contain specified topology version (history currently keeps the last 1000 snapshots). Declaration ICollection<IClusterNode> GetTopology(long ver) Parameters Type Name Description System.Int64 ver Topology version. Returns Type Description System.Collections.Generic.ICollection < IClusterNode > Collection of Ignite nodes which represented by specified topology version, if it is present in history storage, null otherwise. Exceptions Type Condition IgniteException If underlying SPI implementation does not support topology history. Currently only org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi supports topology history. IsActive() Determines whether this grid is in active state. Declaration bool IsActive() Returns Type Description System.Boolean true if the grid is active; otherwise, false . IsBaselineAutoAdjustEnabled() Returns value of manual baseline control or auto adjusting baseline. Declaration bool IsBaselineAutoAdjustEnabled() Returns Type Description System.Boolean true If cluster in auto-adjust. false If cluster in manual. IsWalEnabled(String) Determines whether write-ahead logging is enabled for specified cache. Declaration bool IsWalEnabled(string cacheName) Parameters Type Name Description System.String cacheName Name of the cache. Returns Type Description System.Boolean PingNode(Guid) Pings a remote node. Declaration bool PingNode(Guid nodeId) Parameters Type Name Description System.Guid nodeId ID of a node to ping. Returns Type Description System.Boolean True if node for a given ID is alive, false otherwise. ResetMetrics() Resets local I/O, job, and task execution metrics. Declaration void ResetMetrics() SetActive(Boolean) Changes Ignite grid state to active or inactive. Declaration void SetActive(bool isActive) Parameters Type Name Description System.Boolean isActive SetBaselineAutoAdjustEnabledFlag(Boolean) Sets the value of manual baseline control or auto adjusting baseline. Declaration void SetBaselineAutoAdjustEnabledFlag(bool isBaselineAutoAdjustEnabled) Parameters Type Name Description System.Boolean isBaselineAutoAdjustEnabled true If cluster in auto-adjust. false If cluster in manual. SetBaselineAutoAdjustTimeout(Int64) Sets the value of time which we would wait before the actual topology change since last server topology change(node join/left/fail). Declaration void SetBaselineAutoAdjustTimeout(long baselineAutoAdjustTimeout) Parameters Type Name Description System.Int64 baselineAutoAdjustTimeout Timeout value SetBaselineTopology(IEnumerable<IBaselineNode>) Sets the baseline topology nodes. Declaration void SetBaselineTopology(IEnumerable<IBaselineNode> nodes) Parameters Type Name Description System.Collections.Generic.IEnumerable < IBaselineNode > nodes The nodes. SetBaselineTopology(Int64) Sets the baseline topology from the cluster topology of the given version. This method requires active cluster ( IsActive() ). Declaration void SetBaselineTopology(long topologyVersion) Parameters Type Name Description System.Int64 topologyVersion The topology version. SetTxTimeoutOnPartitionMapExchange(TimeSpan) Set transaction timeout on partition map exchange Declaration void SetTxTimeoutOnPartitionMapExchange(TimeSpan timeout) Parameters Type Name Description System.TimeSpan timeout"
  },
  "api/Apache.Ignite.Core.Cluster.IClusterGroup.html": {
    "href": "api/Apache.Ignite.Core.Cluster.IClusterGroup.html",
    "title": "Interface IClusterGroup | Apache Ignite.NET",
    "keywords": "Interface IClusterGroup Defines grid projection which represents a common functionality over a group of nodes. Grid projection allows to group Ignite nodes into various subgroups to perform distributed operations on them. All ForXXX(...)' methods will create a child grid projection from existing projection. If you create a new projection from current one, then the resulting projection will include a subset of nodes from current projection. The following code snippet shows how to create grid projections: var g = Ignition.GetIgnite(); // Projection over remote nodes. var remoteNodes = g.ForRemotes(); // Projection over random remote node. var randomNode = g.ForRandom(); // Projection over all nodes with cache named \"myCache\" enabled. var cacheNodes = g.ForCacheNodes(\"myCache\"); // Projection over all nodes that have user attribute \"group\" set to value \"worker\". var workerNodes = g.ForAttribute(\"group\", \"worker\"); Grid projection provides functionality for executing tasks and closures over nodes in this projection using GetCompute() . All members are thread-safe and may be used concurrently from multiple threads. Namespace : Apache.Ignite.Core.Cluster Assembly : Apache.Ignite.Core.dll Syntax public interface IClusterGroup Properties Ignite Instance of Ignite. Declaration IIgnite Ignite { get; } Property Value Type Description IIgnite Methods ClearStatistics(IEnumerable<String>) Clears statistics for caches cluster wide. Declaration void ClearStatistics(IEnumerable<string> caches) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.String > caches Collection of cache names. EnableStatistics(IEnumerable<String>, Boolean) Sets statistics enabled flag globally for the caches Declaration void EnableStatistics(IEnumerable<string> cacheNames, bool enabled) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.String > cacheNames Collection of cache names to set the flag System.Boolean enabled Enabled flag ForAttribute(String, String) Creates projection for nodes containing given name and value specified in user attributes. Declaration IClusterGroup ForAttribute(string name, string val) Parameters Type Name Description System.String name Name of the attribute. System.String val Optional attribute value to match. Returns Type Description IClusterGroup Grid projection for nodes containing specified attribute. ForCacheNodes(String) Creates projection for all nodes that have cache with specified name running. Declaration IClusterGroup ForCacheNodes(string name) Parameters Type Name Description System.String name Cache name to include into projection. Returns Type Description IClusterGroup Projection over nodes that have specified cache running. ForClientNodes(String) Creates projection for all nodes that have cache with specified name running and cache distribution mode is CLIENT_ONLY or NEAR_ONLY. Declaration IClusterGroup ForClientNodes(string name) Parameters Type Name Description System.String name Cache name to include into projection. Returns Type Description IClusterGroup Projection over nodes that have specified cache running. ForDaemons() Gets a cluster group consisting of the daemon nodes. Daemon nodes are the usual grid nodes that participate in topology but not visible on the main APIs, i.e. they are not part of any cluster group. The only way to see daemon nodes is to use this method. Daemon nodes are used primarily for management and monitoring functionality that is build on Ignite and needs to participate in the topology, but also needs to be excluded from the \"normal\" topology, so that it won't participate in the task execution or in-memory data grid storage. Declaration IClusterGroup ForDaemons() Returns Type Description IClusterGroup Cluster group consisting of the daemon nodes. ForDataNodes(String) Creates projection for all nodes that have cache with specified name running and cache distribution mode is PARTITIONED_ONLY or NEAR_PARTITIONED. Declaration IClusterGroup ForDataNodes(string name) Parameters Type Name Description System.String name Cache name to include into projection. Returns Type Description IClusterGroup Projection over nodes that have specified cache running. ForDotNet() Creates grid projection for nodes supporting .Net, i.e. for nodes started with Apache.Ignite.exe. Declaration IClusterGroup ForDotNet() Returns Type Description IClusterGroup Grid projection for nodes supporting .Net. ForHost(IClusterNode) Gets grid projection consisting from the nodes in this projection residing on the same host as given node. Declaration IClusterGroup ForHost(IClusterNode node) Parameters Type Name Description IClusterNode node Node residing on the host for which projection is created. Returns Type Description IClusterGroup Projection for nodes residing on the same host as passed in node. ForNodeIds(IEnumerable<Guid>) Creates a grid projection over a given set of node IDs. Declaration IClusterGroup ForNodeIds(IEnumerable<Guid> ids) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Guid > ids Collection of node IDs to create a projection from. Returns Type Description IClusterGroup Projection over provided Ignite node IDs. ForNodeIds(Guid[]) Creates a grid projection over a given set of node IDs. Declaration IClusterGroup ForNodeIds(params Guid[] ids) Parameters Type Name Description System.Guid [] ids Collection of node IDs to create a projection from. Returns Type Description IClusterGroup Projection over provided Ignite node IDs. ForNodes(IClusterNode[]) Creates a grid projection over a given set of nodes. Declaration IClusterGroup ForNodes(params IClusterNode[] nodes) Parameters Type Name Description IClusterNode [] nodes Collection of nodes to create a projection from. Returns Type Description IClusterGroup Projection over provided Ignite nodes. ForNodes(IEnumerable<IClusterNode>) Creates a grid projection over a given set of nodes. Declaration IClusterGroup ForNodes(IEnumerable<IClusterNode> nodes) Parameters Type Name Description System.Collections.Generic.IEnumerable < IClusterNode > nodes Collection of nodes to create a projection from. Returns Type Description IClusterGroup Projection over provided Ignite nodes. ForOldest() Creates grid projection with one oldest node in the current projection. The resulting projection is dynamic and will always pick the next oldest node if the previous one leaves topology even after the projection has been created. Declaration IClusterGroup ForOldest() Returns Type Description IClusterGroup Grid projection with one oldest node from the current projection. ForPredicate(Func<IClusterNode, Boolean>) Creates a grid projection which includes all nodes that pass the given predicate filter. Declaration IClusterGroup ForPredicate(Func<IClusterNode, bool> p) Parameters Type Name Description System.Func < IClusterNode , System.Boolean > p Predicate filter for nodes to include into this projection. Returns Type Description IClusterGroup Grid projection for nodes that passed the predicate filter. ForRandom() Creates grid projection with one random node from current projection. Declaration IClusterGroup ForRandom() Returns Type Description IClusterGroup Grid projection with one random node from current projection. ForRemotes() Gets grid projection consisting from the nodes in this projection excluding the local node. Declaration IClusterGroup ForRemotes() Returns Type Description IClusterGroup Grid projection consisting from the nodes in this projection excluding the local node. ForServers() Creates a cluster group of nodes started in server mode ( ClientMode ). Declaration IClusterGroup ForServers() Returns Type Description IClusterGroup Cluster group of nodes started in server mode. ForYoungest() Creates grid projection with one youngest node in the current projection. The resulting projection is dynamic and will always pick the newest node in the topology, even if more nodes entered after the projection has been created. Declaration IClusterGroup ForYoungest() Returns Type Description IClusterGroup Grid projection with one youngest node from the current projection. GetCompute() Gets compute functionality over this grid projection. All operations on the returned ICompute instance will only include nodes from this projection. Declaration ICompute GetCompute() Returns Type Description ICompute Compute instance over this grid projection. GetEvents() Gets events facade over nodes within this cluster group. All operations on the returned IEvents > instance will only include nodes from current cluster group. Declaration IEvents GetEvents() Returns Type Description IEvents Events instance over this cluster group. GetMessaging() Gets messaging facade over nodes within this cluster group. All operations on the returned IMessaging > instance will only include nodes from current cluster group. Declaration IMessaging GetMessaging() Returns Type Description IMessaging Messaging instance over this cluster group. GetMetrics() Gets a metrics snapshot for this projection Declaration IClusterMetrics GetMetrics() Returns Type Description IClusterMetrics Grid projection metrics snapshot. GetNode() Gets first node from the list of nodes in this projection. Declaration IClusterNode GetNode() Returns Type Description IClusterNode Node. GetNode(Guid) Gets a node for given ID from this grid projection. Declaration IClusterNode GetNode(Guid id) Parameters Type Name Description System.Guid id Node ID. Returns Type Description IClusterNode Node with given ID from this projection or null if such node does not exist in this projection. GetNodes() Gets read-only collections of nodes in this projection. Declaration ICollection<IClusterNode> GetNodes() Returns Type Description System.Collections.Generic.ICollection < IClusterNode > All nodes in this projection. GetServices() Gets services facade over nodes within this cluster group. All operations on the returned IServices > instance will only include nodes from current cluster group. Declaration IServices GetServices() Returns Type Description IServices Services instance over this cluster group."
  },
  "api/Apache.Ignite.Core.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.Common.IgniteIllegalStateException.html": {
    "href": "api/Apache.Ignite.Core.Common.IgniteIllegalStateException.html",
    "title": "Class IgniteIllegalStateException | Apache Ignite.NET",
    "keywords": "Class IgniteIllegalStateException Indicates that ignite in invalid state was accessed. Inheritance System.Object System.Exception IgniteException IgniteIllegalStateException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Common Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class IgniteIllegalStateException : IgniteException, ISerializable, _Exception Constructors IgniteIllegalStateException() Initializes a new instance of the IgniteIllegalStateException class. Declaration public IgniteIllegalStateException() IgniteIllegalStateException(SerializationInfo, StreamingContext) Initializes a new instance of the IgniteIllegalStateException class. Declaration protected IgniteIllegalStateException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. IgniteIllegalStateException(String) Initializes a new instance of the IgniteIllegalStateException class. Declaration public IgniteIllegalStateException(string message) Parameters Type Name Description System.String message The message that describes the error. IgniteIllegalStateException(String, Exception) Initializes a new instance of the IgniteIllegalStateException class. Declaration public IgniteIllegalStateException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.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.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.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.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.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 loads data efficiently into cache. Updates are buffered and mapped to primary nodes to ensure minimal data movement and optimal resource utilization. Note that streamer loads data to remote nodes in parallel, so cache updates can be reordered. 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.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"
  },
  "index.html": {
    "href": "index.html",
    "title": "Apache Ignite.NET | Apache Ignite.NET",
    "keywords": "Apache Ignite.NET Apache Ignite is a distributed database for high-performance computing with in-memory speed. Gettting Started API Documentation"
  },
  "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.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.BinaryTypeNames.html": {
    "href": "api/Apache.Ignite.Core.Binary.BinaryTypeNames.html",
    "title": "Class BinaryTypeNames | Apache Ignite.NET",
    "keywords": "Class BinaryTypeNames Binary type name constants. Inheritance System.Object BinaryTypeNames Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Binary Assembly : Apache.Ignite.Core.dll Syntax public static class BinaryTypeNames Fields TypeNameArrayBool Type name: boolean array. Declaration public const string TypeNameArrayBool = \"boolean[]\" Field Value Type Description System.String TypeNameArrayByte Type name: byte array. Declaration public const string TypeNameArrayByte = \"byte[]\" Field Value Type Description System.String TypeNameArrayChar Type name: char array. Declaration public const string TypeNameArrayChar = \"char[]\" Field Value Type Description System.String TypeNameArrayDate Type name: timestamp array. Declaration public const string TypeNameArrayDate = \"Date[]\" Field Value Type Description System.String TypeNameArrayDecimal Type name: decimal array. Declaration public const string TypeNameArrayDecimal = \"decimal[]\" Field Value Type Description System.String TypeNameArrayDouble Type name: double array. Declaration public const string TypeNameArrayDouble = \"double[]\" Field Value Type Description System.String TypeNameArrayEnum Type name: Enum array. Declaration public const string TypeNameArrayEnum = \"Enum[]\" Field Value Type Description System.String TypeNameArrayFloat Type name: float array. Declaration public const string TypeNameArrayFloat = \"float[]\" Field Value Type Description System.String TypeNameArrayGuid Type name: UUID array. Declaration public const string TypeNameArrayGuid = \"UUID[]\" Field Value Type Description System.String TypeNameArrayInt Type name: int array. Declaration public const string TypeNameArrayInt = \"int[]\" Field Value Type Description System.String TypeNameArrayLong Type name: long array. Declaration public const string TypeNameArrayLong = \"long[]\" Field Value Type Description System.String TypeNameArrayObject Type name: Object array. Declaration public const string TypeNameArrayObject = \"Object[]\" Field Value Type Description System.String TypeNameArrayShort Type name: short array. Declaration public const string TypeNameArrayShort = \"short[]\" Field Value Type Description System.String TypeNameArrayString Type name: String array. Declaration public const string TypeNameArrayString = \"String[]\" Field Value Type Description System.String TypeNameArrayTimestamp Type name: timestamp array. Declaration public const string TypeNameArrayTimestamp = \"Timestamp[]\" Field Value Type Description System.String TypeNameBool Type name: boolean. Declaration public const string TypeNameBool = \"boolean\" Field Value Type Description System.String TypeNameByte Type name: byte. Declaration public const string TypeNameByte = \"byte\" Field Value Type Description System.String TypeNameChar Type name: char. Declaration public const string TypeNameChar = \"char\" Field Value Type Description System.String TypeNameCollection Type name: Collection. Declaration public const string TypeNameCollection = \"Collection\" Field Value Type Description System.String TypeNameDate Type name: date. Declaration public const string TypeNameDate = \"Date\" Field Value Type Description System.String TypeNameDecimal Type name: decimal. Declaration public const string TypeNameDecimal = \"decimal\" Field Value Type Description System.String TypeNameDouble Type name: double. Declaration public const string TypeNameDouble = \"double\" Field Value Type Description System.String TypeNameEnum Type name: Enum. Declaration public const string TypeNameEnum = \"Enum\" Field Value Type Description System.String TypeNameFloat Type name: float. Declaration public const string TypeNameFloat = \"float\" Field Value Type Description System.String TypeNameGuid Type name: UUID. Declaration public const string TypeNameGuid = \"UUID\" Field Value Type Description System.String TypeNameInt Type name: int. Declaration public const string TypeNameInt = \"int\" Field Value Type Description System.String TypeNameLong Type name: long. Declaration public const string TypeNameLong = \"long\" Field Value Type Description System.String TypeNameMap Type name: Map. Declaration public const string TypeNameMap = \"Map\" Field Value Type Description System.String TypeNameObject Type name: Object. Declaration public const string TypeNameObject = \"Object\" Field Value Type Description System.String TypeNameShort Type name: short. Declaration public const string TypeNameShort = \"short\" Field Value Type Description System.String TypeNameString Type name: String. Declaration public const string TypeNameString = \"String\" Field Value Type Description System.String TypeNameTimestamp Type name: timestamp. Declaration public const string TypeNameTimestamp = \"Timestamp\" Field Value Type Description System.String"
  },
  "api/Apache.Ignite.Core.Binary.IBinaryRawWriter.html": {
    "href": "api/Apache.Ignite.Core.Binary.IBinaryRawWriter.html",
    "title": "Interface IBinaryRawWriter | Apache Ignite.NET",
    "keywords": "Interface IBinaryRawWriter Raw writer for binary objects. Namespace : Apache.Ignite.Core.Binary Assembly : Apache.Ignite.Core.dll Syntax public interface IBinaryRawWriter Methods WriteArray<T>(T[]) Write object array. Declaration void WriteArray<T>(T[] val) Parameters Type Name Description T[] val Object array. Type Parameters Name Description T WriteBoolean(Boolean) Write boolean value. Declaration void WriteBoolean(bool val) Parameters Type Name Description System.Boolean val Boolean value. WriteBooleanArray(Boolean[]) Write boolean array. Declaration void WriteBooleanArray(bool[] val) Parameters Type Name Description System.Boolean [] val Boolean array. WriteByte(Byte) Write byte value. Declaration void WriteByte(byte val) Parameters Type Name Description System.Byte val Byte value. WriteByteArray(Byte[]) Write byte array. Declaration void WriteByteArray(byte[] val) Parameters Type Name Description System.Byte [] val Byte array. WriteChar(Char) Write char value. Declaration void WriteChar(char val) Parameters Type Name Description System.Char val Char value. WriteCharArray(Char[]) Write char array. Declaration void WriteCharArray(char[] val) Parameters Type Name Description System.Char [] val Char array. WriteCollection(ICollection) Writes a collection in interoperable form. Use this method to communicate with other platforms or with nodes that need to read collection elements in binary form. When there is no need for binarization or interoperability, please use WriteObject<T>(T) , which will properly preserve generic collection type. Declaration void WriteCollection(ICollection val) Parameters Type Name Description System.Collections.ICollection val Collection. WriteDecimal(Nullable<Decimal>) Write decimal value. Declaration void WriteDecimal(decimal ? val) Parameters Type Name Description System.Nullable < System.Decimal > val Decimal value. WriteDecimalArray(Nullable<Decimal>[]) Write decimal array. Declaration void WriteDecimalArray(decimal ? [] val) Parameters Type Name Description System.Nullable < System.Decimal >[] val Decimal array. WriteDictionary(IDictionary) Writes a dictionary in interoperable form. Use this method to communicate with other platforms or with nodes that need to read dictionary elements in binary form. When there is no need for binarization or interoperability, please use WriteObject<T>(T) , which will properly preserve generic dictionary type. Declaration void WriteDictionary(IDictionary val) Parameters Type Name Description System.Collections.IDictionary val Dictionary. WriteDouble(Double) Write double value. Declaration void WriteDouble(double val) Parameters Type Name Description System.Double val Double value. WriteDoubleArray(Double[]) Write double array. Declaration void WriteDoubleArray(double[] val) Parameters Type Name Description System.Double [] val Double array. WriteEnum<T>(T) Write enum value. Declaration void WriteEnum<T>(T val) Parameters Type Name Description T val Enum value. Type Parameters Name Description T WriteEnumArray<T>(T[]) Write enum array. Declaration void WriteEnumArray<T>(T[] val) Parameters Type Name Description T[] val Enum array. Type Parameters Name Description T WriteFloat(Single) Write float value. Declaration void WriteFloat(float val) Parameters Type Name Description System.Single val Float value. WriteFloatArray(Single[]) Write float array. Declaration void WriteFloatArray(float[] val) Parameters Type Name Description System.Single [] val Float array. WriteGuid(Nullable<Guid>) Write GUID value. Declaration void WriteGuid(Guid? val) Parameters Type Name Description System.Nullable < System.Guid > val GUID value. WriteGuidArray(Nullable<Guid>[]) Write GUID array. Declaration void WriteGuidArray(Guid? [] val) Parameters Type Name Description System.Nullable < System.Guid >[] val GUID array. WriteInt(Int32) Write int value. Declaration void WriteInt(int val) Parameters Type Name Description System.Int32 val Int value. WriteIntArray(Int32[]) Write int array. Declaration void WriteIntArray(int[] val) Parameters Type Name Description System.Int32 [] val Int array. WriteLong(Int64) Write long value. Declaration void WriteLong(long val) Parameters Type Name Description System.Int64 val Long value. WriteLongArray(Int64[]) Write long array. Declaration void WriteLongArray(long[] val) Parameters Type Name Description System.Int64 [] val Long array. WriteObject<T>(T) Write object value. Declaration void WriteObject<T>(T val) Parameters Type Name Description T val Object value. Type Parameters Name Description T WriteShort(Int16) Write short value. Declaration void WriteShort(short val) Parameters Type Name Description System.Int16 val Short value. WriteShortArray(Int16[]) Write short array. Declaration void WriteShortArray(short[] val) Parameters Type Name Description System.Int16 [] val Short array. WriteString(String) Write string value. Declaration void WriteString(string val) Parameters Type Name Description System.String val String value. WriteStringArray(String[]) Write string array. Declaration void WriteStringArray(string[] val) Parameters Type Name Description System.String [] val String array. WriteTimestamp(Nullable<DateTime>) Write date value. Declaration void WriteTimestamp(DateTime? val) Parameters Type Name Description System.Nullable < System.DateTime > val Date value. WriteTimestampArray(Nullable<DateTime>[]) Write date array. Declaration void WriteTimestampArray(DateTime? [] val) Parameters Type Name Description System.Nullable < System.DateTime >[] val Date array."
  },
  "api/Apache.Ignite.Core.Cache.Affinity.AffinityFunctionBase.html": {
    "href": "api/Apache.Ignite.Core.Cache.Affinity.AffinityFunctionBase.html",
    "title": "Class AffinityFunctionBase | Apache Ignite.NET",
    "keywords": "Class AffinityFunctionBase Base class for predefined affinity functions. Inheritance System.Object AffinityFunctionBase RendezvousAffinityFunction Implements IAffinityFunction Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Affinity Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public abstract class AffinityFunctionBase : IAffinityFunction Fields DefaultPartitions The default value for Partitions property. Declaration public const int DefaultPartitions = 1024 Field Value Type Description System.Int32 Properties ExcludeNeighbors Gets or sets a value indicating whether to exclude same-host-neighbors from being backups of each other. Declaration public virtual bool ExcludeNeighbors { get; set; } Property Value Type Description System.Boolean Partitions Gets or sets the total number of partitions. Declaration public virtual int Partitions { get; set; } Property Value Type Description System.Int32 Methods AssignPartitions(AffinityFunctionContext) Gets affinity nodes for a partition. In case of replicated cache, all returned nodes are updated in the same manner. In case of partitioned cache, the returned list should contain only the primary and back up nodes with primary node being always first. Note that partitioned affinity must obey the following contract: given that node N is primary for some key K , if any other node(s) leave grid and no node joins grid, node N will remain primary for key K . Declaration public virtual IEnumerable<IEnumerable<IClusterNode>> AssignPartitions(AffinityFunctionContext context) Parameters Type Name Description AffinityFunctionContext context The affinity function context. Returns Type Description System.Collections.Generic.IEnumerable < System.Collections.Generic.IEnumerable < IClusterNode >> A collection of partitions, where each partition is a collection of nodes, where first node is a primary node, and other nodes are backup nodes. GetPartition(Object) Gets partition number for a given key starting from 0. Partitioned caches should make sure that keys are about evenly distributed across all partitions from 0 to Partitions for best performance. Note that for fully replicated caches it is possible to segment key sets among different grid node groups. In that case each node group should return a unique partition number. However, unlike partitioned cache, mappings of keys to nodes in replicated caches are constant and a node cannot migrate from one partition to another. Declaration public virtual int GetPartition(object key) Parameters Type Name Description System.Object key Key to get partition for. Returns Type Description System.Int32 Partition number for a given key. RemoveNode(Guid) Removes node from affinity. This method is called when it is safe to remove disconnected node from affinity mapping. Declaration public virtual void RemoveNode(Guid nodeId) Parameters Type Name Description System.Guid nodeId The node identifier. Implements IAffinityFunction"
  },
  "api/Apache.Ignite.Core.Cache.Affinity.Rendezvous.ClusterNodeAttributeAffinityBackupFilter.html": {
    "href": "api/Apache.Ignite.Core.Cache.Affinity.Rendezvous.ClusterNodeAttributeAffinityBackupFilter.html",
    "title": "Class ClusterNodeAttributeAffinityBackupFilter | Apache Ignite.NET",
    "keywords": "Class ClusterNodeAttributeAffinityBackupFilter Attribute-based affinity backup filter, see Attributes , AffinityBackupFilter . This filter can be used to ensure that, for a given partition, primary and backup nodes are selected from different racks in a datacenter, or from different availability zones in a cloud environment, so that a single hardware failure does not cause data loss. This implementation will discard backups rather than place multiple on the same set of nodes. This avoids trying to cram more data onto remaining nodes when some have failed. This class is constructed with a set of node attribute names, and a candidate node will be rejected if any of the previously selected nodes for a partition have identical values for all of those attributes on the candidate node. Another way to understand this is the set of attribute values defines the key of a group into which a node is placed, and the primaries and backups for a partition cannot share nodes in the same group. A null attribute is treated as a distinct value, so two nodes with a null attribute will be treated as having the same value. For example, let's say Ignite cluster of 12 nodes is deployed into 3 racks - r1, r2, r3. Ignite nodes have \"SITE\" attributes set accordingly to \"r1\", \"r2\", \"r3\". For a cache with 1 backup ( Backups set to 1 ), every partition is assigned to 2 nodes. When the primary node has \"SITE\" attribute set to \"r1\", all other nodes with \"SITE\"=\"r1\" are excluded by this filter when selecting the backup node. Inheritance System.Object ClusterNodeAttributeAffinityBackupFilter Implements IAffinityBackupFilter 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.Rendezvous Assembly : Apache.Ignite.Core.dll Syntax public sealed class ClusterNodeAttributeAffinityBackupFilter : IAffinityBackupFilter Properties AttributeNames Gets or sets the attribute names. Declaration public ICollection<string> AttributeNames { get; set; } Property Value Type Description System.Collections.Generic.ICollection < System.String > Implements IAffinityBackupFilter"
  },
  "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.CacheWriteSynchronizationMode.html": {
    "href": "api/Apache.Ignite.Core.Cache.Configuration.CacheWriteSynchronizationMode.html",
    "title": "Enum CacheWriteSynchronizationMode | Apache Ignite.NET",
    "keywords": "Enum CacheWriteSynchronizationMode Mode indicating how Ignite should wait for write replies from other nodes. Namespace : Apache.Ignite.Core.Cache.Configuration Assembly : Apache.Ignite.Core.dll Syntax public enum CacheWriteSynchronizationMode Fields Name Description FullAsync Flag indicating that Ignite will not wait for write or commit responses from participating nodes, which means that remote nodes may get their state updated a bit after any of the cache write methods complete, or after {@link Transaction#commit()} method completes. FullSync Mode indicating that Ignite should wait for write or commit replies from all nodes. This behavior guarantees that whenever any of the atomic or transactional writes complete, all other participating nodes which cache the written data have been updated. PrimarySync This flag only makes sense for {@link CacheMode#PARTITIONED} mode. When enabled, Ignite will wait for write or commit to complete on primary node, but will not wait for backups to be updated."
  },
  "api/Apache.Ignite.Core.Cache.Configuration.QueryEntity.html": {
    "href": "api/Apache.Ignite.Core.Cache.Configuration.QueryEntity.html",
    "title": "Class QueryEntity | Apache Ignite.NET",
    "keywords": "Class QueryEntity Query entity is a description of cache entry (composed of key and value) in a way of how it must be indexed and can be queried. Inheritance System.Object QueryEntity Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Configuration Assembly : Apache.Ignite.Core.dll Syntax public sealed class QueryEntity : IQueryEntityInternal, IBinaryRawWriteAware, IBinaryRawWriteAware<IBinaryRawWriter> Constructors QueryEntity() Initializes a new instance of the QueryEntity class. Declaration public QueryEntity() QueryEntity(Type) Initializes a new instance of the QueryEntity class. Declaration public QueryEntity(Type valueType) Parameters Type Name Description System.Type valueType Type of the cache entry value. QueryEntity(Type, Type) Initializes a new instance of the QueryEntity class. Declaration public QueryEntity(Type keyType, Type valueType) Parameters Type Name Description System.Type keyType Type of the key. System.Type valueType Type of the value. Properties Aliases Gets or sets field name aliases: mapping from full name in dot notation to an alias that will be used as SQL column name. Example: {\"parent.name\" -> \"parentName\"}. Declaration public ICollection<QueryAlias> Aliases { get; set; } Property Value Type Description System.Collections.Generic.ICollection < QueryAlias > Fields Gets or sets query fields, a map from field name to Java type name. The order of fields defines the order of columns returned by the 'select *' queries. Declaration public ICollection<QueryField> Fields { get; set; } Property Value Type Description System.Collections.Generic.ICollection < QueryField > Indexes Gets or sets the query indexes. Declaration public ICollection<QueryIndex> Indexes { get; set; } Property Value Type Description System.Collections.Generic.ICollection < QueryIndex > KeyFieldName Gets or sets the name of the field that is used to denote the entire key. By default, entity 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, entity 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.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.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.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.Continuous.html": {
    "href": "api/Apache.Ignite.Core.Cache.Query.Continuous.html",
    "title": "Namespace Apache.Ignite.Core.Cache.Query.Continuous | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Cache.Query.Continuous Classes ContinuousQuery Continuous query base class, see ContinuousQuery<TK, TV> . ContinuousQuery<TK, TV> API for configuring continuous cache queries. Continuous queries allow to register a remote and a listener for cache update events. If an update event passes the filter, it will be sent to the node that executed the query and listener will be notified on that node. Continuous query can either be executed on the whole topology or only on local node. In case query is distributed and a new node joins, it will get the filter for the query during discovery process before it actually joins topology, so no updates will be missed. To execute the query use method QueryContinuous(ContinuousQuery<TK, TV>) . ContinuousQueryExtensions Extensions for continuous queries. Interfaces IContinuousQueryHandle Represents a continuous query handle. IContinuousQueryHandle<T> Represents a continuous query handle. IContinuousQueryHandleFields Represents a continuous query handle for SqlFieldsQuery used as initial query."
  },
  "api/Apache.Ignite.Core.Cache.Query.IFieldsQueryCursor.html": {
    "href": "api/Apache.Ignite.Core.Cache.Query.IFieldsQueryCursor.html",
    "title": "Interface IFieldsQueryCursor | Apache Ignite.NET",
    "keywords": "Interface IFieldsQueryCursor Fields query cursor. Inherited Members IQueryCursor<IList<Object>>.GetAll() System.Collections.Generic.IEnumerable<System.Collections.Generic.IList<System.Object>>.GetEnumerator() System.IDisposable.Dispose() Namespace : Apache.Ignite.Core.Cache.Query Assembly : Apache.Ignite.Core.dll Syntax public interface IFieldsQueryCursor : IQueryCursor<IList<object>>, IEnumerable<IList<object>>, IEnumerable, IDisposable Properties FieldNames Gets the field names. Declaration IList<string> FieldNames { get; } Property Value Type Description System.Collections.Generic.IList < System.String > Fields Gets fields metadata. Declaration IList<IQueryCursorField> Fields { get; } Property Value Type Description System.Collections.Generic.IList < IQueryCursorField >"
  },
  "api/Apache.Ignite.Core.Cache.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.Cache.Query.Continuous.ContinuousQueryClientDisconnectedEventArgs.html": {
    "href": "api/Apache.Ignite.Core.Client.Cache.Query.Continuous.ContinuousQueryClientDisconnectedEventArgs.html",
    "title": "Class ContinuousQueryClientDisconnectedEventArgs | Apache Ignite.NET",
    "keywords": "Class ContinuousQueryClientDisconnectedEventArgs Provides data for the Disconnected event. Inheritance System.Object System.EventArgs ContinuousQueryClientDisconnectedEventArgs 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.Client.Cache.Query.Continuous Assembly : Apache.Ignite.Core.dll Syntax public class ContinuousQueryClientDisconnectedEventArgs : EventArgs Constructors ContinuousQueryClientDisconnectedEventArgs(Exception) Initializes a new instance of ContinuousQueryClientDisconnectedEventArgs class. Declaration public ContinuousQueryClientDisconnectedEventArgs(Exception exception) Parameters Type Name Description System.Exception exception Exception that caused the disconnect. Properties Exception Gets the exception that caused the disconnect. Declaration public Exception Exception { get; } Property Value Type Description System.Exception"
  },
  "api/Apache.Ignite.Core.Client.Cache.Query.Continuous.IContinuousQueryHandleClient.html": {
    "href": "api/Apache.Ignite.Core.Client.Cache.Query.Continuous.IContinuousQueryHandleClient.html",
    "title": "Interface IContinuousQueryHandleClient | Apache Ignite.NET",
    "keywords": "Interface IContinuousQueryHandleClient Represents a continuous query handle. Call System.IDisposable.Dispose() to stop the continuous query. Inherited Members System.IDisposable.Dispose() Namespace : Apache.Ignite.Core.Client.Cache.Query.Continuous Assembly : Apache.Ignite.Core.dll Syntax public interface IContinuousQueryHandleClient : IDisposable Events Disconnected Occurs when continuous query gets disconnected. Disconnect can be caused by a server node failure or a network failure. Declaration event EventHandler<ContinuousQueryClientDisconnectedEventArgs> Disconnected Event Type Type Description System.EventHandler < ContinuousQueryClientDisconnectedEventArgs >"
  },
  "api/Apache.Ignite.Core.Client.IClientConnection.html": {
    "href": "api/Apache.Ignite.Core.Client.IClientConnection.html",
    "title": "Interface IClientConnection | Apache Ignite.NET",
    "keywords": "Interface IClientConnection Represents Ignite client connection. Namespace : Apache.Ignite.Core.Client Assembly : Apache.Ignite.Core.dll Syntax public interface IClientConnection Properties LocalEndPoint Gets the local EndPoint. Declaration EndPoint LocalEndPoint { get; } Property Value Type Description System.Net.EndPoint NodeId Gets the server node id. Declaration Guid NodeId { get; } Property Value Type Description System.Guid RemoteEndPoint Gets the remote EndPoint. Declaration EndPoint RemoteEndPoint { get; } Property Value Type Description System.Net.EndPoint"
  },
  "api/Apache.Ignite.Core.Client.IgniteClientConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Client.IgniteClientConfiguration.html",
    "title": "Class IgniteClientConfiguration | Apache Ignite.NET",
    "keywords": "Class IgniteClientConfiguration Ignite thin client configuration. Ignite thin client connects to a specific Ignite node with a socket and does not start JVM in process. This configuration should correspond to ClientConnectorConfiguration on a target node. Inheritance System.Object IgniteClientConfiguration Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Client Assembly : Apache.Ignite.Core.dll Syntax public class IgniteClientConfiguration Constructors IgniteClientConfiguration() Initializes a new instance of the IgniteClientConfiguration class. Declaration public IgniteClientConfiguration() IgniteClientConfiguration(IgniteClientConfiguration) Initializes a new instance of the IgniteClientConfiguration class. Declaration public IgniteClientConfiguration(IgniteClientConfiguration cfg) Parameters Type Name Description IgniteClientConfiguration cfg The configuration to copy. IgniteClientConfiguration(String) Initializes a new instance of the IgniteClientConfiguration class. Declaration public IgniteClientConfiguration(string host) Parameters Type Name Description System.String host The host to connect to. Fields DefaultEnablePartitionAwareness Default value of EnablePartitionAwareness property. Declaration public const bool DefaultEnablePartitionAwareness = true Field Value Type Description System.Boolean DefaultPort Default port. Declaration public const int DefaultPort = 10800 Field Value Type Description System.Int32 DefaultSocketBufferSize Default socket buffer size. Declaration public const int DefaultSocketBufferSize = 0 Field Value Type Description System.Int32 DefaultSocketTimeout Default socket timeout. Declaration public static readonly TimeSpan DefaultSocketTimeout Field Value Type Description System.TimeSpan DefaultTcpNoDelay Default value of TcpNoDelay property. Declaration public const bool DefaultTcpNoDelay = true Field Value Type Description System.Boolean Properties BinaryConfiguration Gets or sets the binary configuration. Declaration public BinaryConfiguration BinaryConfiguration { get; set; } Property Value Type Description BinaryConfiguration EnablePartitionAwareness Gets or sets a value indicating whether partition awareness should be enabled. Default is true: for cache operations, Ignite client attempts to send the request directly to the primary node for the given cache key. To do so, connection is established to every known server node at all times. When false: only one connection is established at a given moment to a random server node. Declaration public bool EnablePartitionAwareness { get; set; } Property Value Type Description System.Boolean Endpoints Gets or sets endpoints to connect to. Examples of supported formats: 192.168.1.25 (default port is used, see DefaultPort ). 192.168.1.25:780 (custom port) 192.168.1.25:780..787 (custom port range) my-host.com (default port is used, see DefaultPort ). my-host.com:780 (custom port) my-host.com:780..787 (custom port range) When multiple endpoints are specified, failover and load-balancing mechanism is enabled: Ignite picks random endpoint and connects to it. On disconnect, next endpoint is picked from the list (. Declaration public ICollection<string> Endpoints { get; set; } Property Value Type Description System.Collections.Generic.ICollection < System.String > Host Gets or sets the host. Should not be null. Declaration [Obsolete(\"Use Endpoints instead\")] public string Host { get; set; } Property Value Type Description System.String Logger Gets or sets the logger. Default is ConsoleLogger . Set to null to disable logging. Declaration public ILogger Logger { get; set; } Property Value Type Description ILogger Password Password to be used to connect to secured cluster. Declaration public string Password { get; set; } Property Value Type Description System.String Port Gets or sets the port. Declaration [Obsolete(\"Use Endpoints instead\")] public int Port { get; set; } Property Value Type Description System.Int32 ReconnectDisabled Gets or sets a value indicating whether automatic reconnect is disabled. Declaration public bool ReconnectDisabled { get; set; } Property Value Type Description System.Boolean SocketReceiveBufferSize Gets or sets the size of the socket receive buffer. When set to 0, operating system default is used. Declaration public int SocketReceiveBufferSize { get; set; } Property Value Type Description System.Int32 SocketSendBufferSize Gets or sets the size of the socket send buffer. When set to 0, operating system default is used. Declaration public int SocketSendBufferSize { get; set; } Property Value Type Description System.Int32 SocketTimeout Gets or sets the socket operation timeout. Zero or negative means infinite timeout. Declaration public TimeSpan SocketTimeout { get; set; } Property Value Type Description System.TimeSpan SslStreamFactory Gets or sets the SSL stream factory. When not null, secure socket connection will be established. Declaration public ISslStreamFactory SslStreamFactory { get; set; } Property Value Type Description ISslStreamFactory TcpNoDelay Gets or sets the value for TCP_NODELAY socket option. Each socket will be opened using provided value. Setting this option to true disables Nagle's algorithm for socket decreasing latency and delivery time for small messages. For systems that work under heavy network load it is advisable to set this value to false . Declaration public bool TcpNoDelay { get; set; } Property Value Type Description System.Boolean TransactionConfiguration Gets or sets the transaction configuration. See ITransactionsClient , GetTransactions() . Declaration public TransactionClientConfiguration TransactionConfiguration { get; set; } Property Value Type Description TransactionClientConfiguration 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.Cluster.AttributeNodeFilter.html": {
    "href": "api/Apache.Ignite.Core.Cluster.AttributeNodeFilter.html",
    "title": "Class AttributeNodeFilter | Apache Ignite.NET",
    "keywords": "Class AttributeNodeFilter Attribute node filter. The filter will evaluate to true if a node has all specified attributes with corresponding values. You can set node attributes using UserAttributes property. Inheritance System.Object AttributeNodeFilter Implements IClusterNodeFilter 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.Cluster Assembly : Apache.Ignite.Core.dll Syntax public sealed class AttributeNodeFilter : IClusterNodeFilter Constructors AttributeNodeFilter() Initializes a new instance of AttributeNodeFilter . Declaration public AttributeNodeFilter() AttributeNodeFilter(String, Object) Initializes a new instance of AttributeNodeFilter . Declaration public AttributeNodeFilter(string attrName, object attrValue) Parameters Type Name Description System.String attrName Attribute name. System.Object attrValue Attribute value. Properties Attributes Attributes dictionary match. Declaration public IDictionary<string, object> Attributes { get; set; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.Object > Methods Invoke(IClusterNode) Returns a value indicating whether provided node satisfies this predicate. Declaration public 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. Implements IClusterNodeFilter"
  },
  "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.Common.IFactory-1.html": {
    "href": "api/Apache.Ignite.Core.Common.IFactory-1.html",
    "title": "Interface IFactory<T> | Apache Ignite.NET",
    "keywords": "Interface IFactory<T> Factory that produces instances of a specific type. Implementation can be passed over the wire and thus should be marked with System.SerializableAttribute . Namespace : Apache.Ignite.Core.Common Assembly : Apache.Ignite.Core.dll Syntax public interface IFactory<out T> Type Parameters Name Description T Methods CreateInstance() Creates an instance of type T . Declaration T CreateInstance() Returns Type Description T New instance of type T ."
  },
  "api/Apache.Ignite.Core.Common.IgniteException.html": {
    "href": "api/Apache.Ignite.Core.Common.IgniteException.html",
    "title": "Class IgniteException | Apache Ignite.NET",
    "keywords": "Class IgniteException General Ignite exception. Indicates any error condition within Ignite. Inheritance System.Object System.Exception IgniteException BinaryObjectException CacheEntryProcessorException CacheException IgniteClientException ClusterGroupEmptyException ClusterTopologyException ClientDisconnectedException IgniteFutureCancelledException IgniteIllegalStateException JavaException ComputeExecutionRejectedException ComputeJobFailoverException ComputeTaskCancelledException ComputeTaskTimeoutException ComputeUserUndeclaredException ServiceDeploymentException ServiceInvocationException TransactionDeadlockException TransactionHeuristicException TransactionOptimisticException TransactionRollbackException TransactionTimeoutException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Common Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class IgniteException : Exception, ISerializable, _Exception Constructors IgniteException() Initializes a new instance of the IgniteException class. Declaration public IgniteException() IgniteException(SerializationInfo, StreamingContext) Initializes a new instance of the IgniteException class. Declaration protected IgniteException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. IgniteException(String) Initializes a new instance of the IgniteException class. Declaration public IgniteException(string message) Parameters Type Name Description System.String message The message that describes the error. IgniteException(String, Exception) Initializes a new instance of the IgniteException class. Declaration public IgniteException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.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.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.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.Configuration.ExecutorConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Configuration.ExecutorConfiguration.html",
    "title": "Class ExecutorConfiguration | Apache Ignite.NET",
    "keywords": "Class ExecutorConfiguration Custom thread pool configuration for compute tasks. See WithExecutor(String) . Inheritance System.Object ExecutorConfiguration Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Configuration Assembly : Apache.Ignite.Core.dll Syntax public class ExecutorConfiguration Properties Name Gets or sets the thread pool name. Can not be null and should be unique with respect to other custom executors. Declaration public string Name { get; set; } Property Value Type Description System.String Size Gets or sets the thread pool size. Defaults to DefaultThreadPoolSize Declaration public int Size { get; set; } Property Value Type Description System.Int32"
  },
  "api/Apache.Ignite.Core.Configuration.LockConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Configuration.LockConfiguration.html",
    "title": "Class LockConfiguration | Apache Ignite.NET",
    "keywords": "Class LockConfiguration IIgniteLock configuration. Inheritance System.Object LockConfiguration Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Configuration Assembly : Apache.Ignite.Core.dll Syntax public class LockConfiguration Constructors LockConfiguration() Initializes a new instance of LockConfiguration class. Declaration public LockConfiguration() LockConfiguration(LockConfiguration) Initializes a new instance of LockConfiguration class. Declaration public LockConfiguration(LockConfiguration other) Parameters Type Name Description LockConfiguration other Other configuration to copy. Properties IsFailoverSafe Gets or sets a value indicating whether the lock should be failover-safe: when true, if any node leaves topology, all locks already acquired by that node are silently released and become available for other nodes to acquire. When false, all threads on other nodes waiting to acquire the lock are interrupted. Declaration public bool IsFailoverSafe { get; set; } Property Value Type Description System.Boolean IsFair Gets or sets a value indicating whether the lock should be in fair mode. When true, under contention, locks favor granting access to the longest-waiting thread. Otherwise this lock does not guarantee any particular access order. Fair locks accessed by many threads may display lower overall throughput than those using the default setting, but have smaller variances in times to obtain locks and guarantee lack of starvation. Declaration public bool IsFair { get; set; } Property Value Type Description System.Boolean Name Gets or sets the cluster-wide lock name. Declaration public string Name { get; set; } Property Value Type Description System.String"
  },
  "api/Apache.Ignite.Core.Configuration.SqlConnectorConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Configuration.SqlConnectorConfiguration.html",
    "title": "Class SqlConnectorConfiguration | Apache Ignite.NET",
    "keywords": "Class SqlConnectorConfiguration SQL connector configuration (for ODBC and JDBC). Inheritance System.Object SqlConnectorConfiguration Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Configuration Assembly : Apache.Ignite.Core.dll Syntax [Obsolete(\"Use ClientConnectorConfiguration instead.\")] public class SqlConnectorConfiguration Constructors SqlConnectorConfiguration() Initializes a new instance of the SqlConnectorConfiguration class. Declaration public SqlConnectorConfiguration() Fields DefaultMaxOpenCursorsPerConnection Default maximum number of open cursors per connection. Declaration public const int DefaultMaxOpenCursorsPerConnection = 128 Field Value Type Description System.Int32 DefaultPort Default port. Declaration public const int DefaultPort = 10800 Field Value Type Description System.Int32 DefaultPortRange Default port range. Declaration public const int DefaultPortRange = 100 Field Value Type Description System.Int32 DefaultSocketBufferSize Default socket buffer size. Declaration public const int DefaultSocketBufferSize = 0 Field Value Type Description System.Int32 DefaultTcpNoDelay Default value of TcpNoDelay property. Declaration public const bool DefaultTcpNoDelay = true Field Value Type Description System.Boolean DefaultThreadPoolSize Default SQL connector thread pool size. Declaration public static readonly int DefaultThreadPoolSize Field Value Type Description System.Int32 Properties Host Gets or sets the host. Declaration public string Host { get; set; } Property Value Type Description System.String MaxOpenCursorsPerConnection Gets or sets the maximum open cursors per connection. Declaration public int MaxOpenCursorsPerConnection { get; set; } Property Value Type Description System.Int32 Port Gets or sets the port. Declaration public int Port { get; set; } Property Value Type Description System.Int32 PortRange Gets or sets the port range. Declaration public int PortRange { get; set; } Property Value Type Description System.Int32 SocketReceiveBufferSize Gets or sets the size of the socket receive buffer. When set to 0, operating system default is used. Declaration public int SocketReceiveBufferSize { get; set; } Property Value Type Description System.Int32 SocketSendBufferSize Gets or sets the size of the socket send buffer. When set to 0, operating system default is used. Declaration public int SocketSendBufferSize { get; set; } Property Value Type Description System.Int32 TcpNoDelay Gets or sets the value for TCP_NODELAY socket option. Each socket will be opened using provided value. Setting this option to true disables Nagle's algorithm for socket decreasing latency and delivery time for small messages. For systems that work under heavy network load it is advisable to set this value to false . Declaration public bool TcpNoDelay { get; set; } Property Value Type Description System.Boolean ThreadPoolSize Gets or sets the size of the thread pool. Declaration public int ThreadPoolSize { get; set; } Property Value Type Description System.Int32"
  },
  "api/Apache.Ignite.Core.Configuration.ThinClientConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Configuration.ThinClientConfiguration.html",
    "title": "Class ThinClientConfiguration | Apache Ignite.NET",
    "keywords": "Class ThinClientConfiguration Server-side thin client specific configuration. Inheritance System.Object ThinClientConfiguration Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Configuration Assembly : Apache.Ignite.Core.dll Syntax public class ThinClientConfiguration Constructors ThinClientConfiguration() Initializes a new instance of the ThinClientConfiguration class. Declaration public ThinClientConfiguration() Fields DefaultMaxActiveComputeTasksPerConnection Default limit of active compute tasks per connection. Declaration public const int DefaultMaxActiveComputeTasksPerConnection = 0 Field Value Type Description System.Int32 DefaultMaxActiveTxPerConnection Default limit of active transactions count per connection. Declaration public const int DefaultMaxActiveTxPerConnection = 100 Field Value Type Description System.Int32 Properties MaxActiveComputeTasksPerConnection Gets or sets active compute tasks per connection limit. Value 0 means that compute grid functionality is disabled for thin clients. Declaration public int MaxActiveComputeTasksPerConnection { get; set; } Property Value Type Description System.Int32 MaxActiveTxPerConnection Gets or sets active transactions count per connection limit. Declaration public int MaxActiveTxPerConnection { get; set; } Property Value Type Description System.Int32"
  },
  "api/Apache.Ignite.Core.Discovery.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.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.Failure.html": {
    "href": "api/Apache.Ignite.Core.Failure.html",
    "title": "Namespace Apache.Ignite.Core.Failure | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Failure Classes NoOpFailureHandler Just ignores any failure. It's useful for tests and debugging. StopNodeFailureHandler Handler will stop node in case of critical error. StopNodeOrHaltFailureHandler Handler will try to stop node if TryStop value is true. If node can't be stopped during provided Timeout or TryStop value is false then JVM process will be terminated forcibly. Interfaces IFailureHandler Failure handler interface. Only predefined implementations are supported: NoOpFailureHandler , StopNodeFailureHandler , StopNodeOrHaltFailureHandler ."
  },
  "api/Apache.Ignite.Core.IDataRegionMetrics.html": {
    "href": "api/Apache.Ignite.Core.IDataRegionMetrics.html",
    "title": "Interface IDataRegionMetrics | Apache Ignite.NET",
    "keywords": "Interface IDataRegionMetrics Memory usage metrics. Namespace : Apache.Ignite.Core Assembly : Apache.Ignite.Core.dll Syntax public interface IDataRegionMetrics Properties AllocationRate Gets the allocation rate, in pages per second. Declaration float AllocationRate { get; } Property Value Type Description System.Single CheckpointBufferPages Gets checkpoint buffer size in pages. Deprecated, always returns 0. Use UsedCheckpointBufferPages instead. Declaration [Obsolete(\"Deprecated, always returns 0. Use UsedCheckpointBufferPages instead.\")] long CheckpointBufferPages { get; } Property Value Type Description System.Int64 CheckpointBufferSize Gets checkpoint buffer size in bytes. Declaration long CheckpointBufferSize { get; } Property Value Type Description System.Int64 DirtyPages Gets the number of dirty RAM pages. Declaration long DirtyPages { get; } Property Value Type Description System.Int64 EvictionRate Gets the eviction rate, in pages per second. Declaration float EvictionRate { get; } Property Value Type Description System.Single LargeEntriesPagesPercentage Gets the percentage of pages fully occupied by entries that are larger than page. Declaration float LargeEntriesPagesPercentage { get; } Property Value Type Description System.Single Name Gets the memory policy name. Declaration string Name { get; } Property Value Type Description System.String OffHeapSize Gets total offheap size in bytes. Declaration long OffHeapSize { get; } Property Value Type Description System.Int64 OffheapUsedSize Gets total used offheap size in bytes. Declaration long OffheapUsedSize { get; } Property Value Type Description System.Int64 PageFillFactor Gets the page fill factor: free space to overall size ratio across all pages. Declaration float PageFillFactor { get; } Property Value Type Description System.Single PageReplaceAge Gets the average age (in milliseconds) for pages being replaced from persistent storage. Declaration float PageReplaceAge { get; } Property Value Type Description System.Single PageReplaceRate Gets the rate (pages per second) at which pages get replaced with other pages from persistent storage. Declaration float PageReplaceRate { get; } Property Value Type Description System.Single PageSize Gets memory page size in bytes. Declaration int PageSize { get; } Property Value Type Description System.Int32 PagesRead Gets the number of read pages from last restart. Declaration long PagesRead { get; } Property Value Type Description System.Int64 PagesReplaced Gets the number of replaced pages from last restart. Declaration long PagesReplaced { get; } Property Value Type Description System.Int64 PagesWritten Gets the number of written pages from last restart. Declaration long PagesWritten { get; } Property Value Type Description System.Int64 PhysicalMemoryPages Gets the count of pages loaded to RAM. Declaration long PhysicalMemoryPages { get; } Property Value Type Description System.Int64 PhysicalMemorySize Gets the size of pages loaded to RAM in bytes. Declaration long PhysicalMemorySize { get; } Property Value Type Description System.Int64 TotalAllocatedPages Gets the count of allocated pages. Declaration long TotalAllocatedPages { get; } Property Value Type Description System.Int64 TotalAllocatedSize Gets the size of allocated pages in bytes. Declaration long TotalAllocatedSize { get; } Property Value Type Description System.Int64 TotalUsedPages Gets a total number of pages used for storing the data. Declaration long TotalUsedPages { get; } Property Value Type Description System.Int64 UsedCheckpointBufferPages Gets used checkpoint buffer size in pages. Declaration long UsedCheckpointBufferPages { get; } Property Value Type Description System.Int64 UsedCheckpointBufferSize Gets used checkpoint buffer size in bytes. Declaration long UsedCheckpointBufferSize { get; } Property Value Type Description System.Int64"
  },
  "api/Apache.Ignite.Core.IDataStorageMetrics.html": {
    "href": "api/Apache.Ignite.Core.IDataStorageMetrics.html",
    "title": "Interface IDataStorageMetrics | Apache Ignite.NET",
    "keywords": "Interface IDataStorageMetrics Persistent store metrics. Namespace : Apache.Ignite.Core Assembly : Apache.Ignite.Core.dll Syntax public interface IDataStorageMetrics Properties LastCheckpointCopiedOnWritePagesNumber Gets the number of pages copied to a temporary checkpoint buffer during the last checkpoint. Declaration long LastCheckpointCopiedOnWritePagesNumber { get; } Property Value Type Description System.Int64 LastCheckpointDataPagesNumber Gets the number of data pages written during the last checkpoint. Declaration long LastCheckpointDataPagesNumber { get; } Property Value Type Description System.Int64 LastCheckpointDuration Gets the duration of the last checkpoint. Declaration TimeSpan LastCheckpointDuration { get; } Property Value Type Description System.TimeSpan LastCheckpointFsyncDuration Gets the duration of the sync phase of the last checkpoint. Declaration TimeSpan LastCheckpointFsyncDuration { get; } Property Value Type Description System.TimeSpan LastCheckpointLockWaitDuration Gets the duration of last checkpoint lock wait. Declaration TimeSpan LastCheckpointLockWaitDuration { get; } Property Value Type Description System.TimeSpan LastCheckpointMarkDuration Gets the duration of last checkpoint mark phase. Declaration TimeSpan LastCheckpointMarkDuration { get; } Property Value Type Description System.TimeSpan LastCheckpointPagesWriteDuration Gets the duration of last checkpoint pages write phase. Declaration TimeSpan LastCheckpointPagesWriteDuration { get; } Property Value Type Description System.TimeSpan LastCheckpointTotalPagesNumber Gets the total number of pages written during the last checkpoint. Declaration long LastCheckpointTotalPagesNumber { get; } Property Value Type Description System.Int64 WalArchiveSegments Gets the current number of WAL segments in the WAL archive. Declaration int WalArchiveSegments { get; } Property Value Type Description System.Int32 WalFsyncTimeAverage Gets the average WAL fsync duration in microseconds over the last time interval. Declaration float WalFsyncTimeAverage { get; } Property Value Type Description System.Single WalLoggingRate Gets the average number of WAL records per second written during the last time interval. Declaration float WalLoggingRate { get; } Property Value Type Description System.Single WalWritingRate Gets the average number of bytes per second written during the last time interval. Declaration float WalWritingRate { get; } Property Value Type Description System.Single"
  },
  "api/Apache.Ignite.Core.Client.Services.IServicesClient.html": {
    "href": "api/Apache.Ignite.Core.Client.Services.IServicesClient.html",
    "title": "Interface IServicesClient | Apache Ignite.NET",
    "keywords": "Interface IServicesClient Ignite distributed services client. Namespace : Apache.Ignite.Core.Client.Services Assembly : Apache.Ignite.Core.dll Syntax public interface IServicesClient Properties ClusterGroup Gets the cluster group for this IServicesClient instance. Declaration IClientClusterGroup ClusterGroup { get; } Property Value Type Description IClientClusterGroup Methods GetServiceProxy<T>(String) Gets a proxy for the service with the specified name. Note: service proxies are not \"sticky\" - there is no guarantee that all calls will be made to the same remote service instance. Declaration T GetServiceProxy<T>(string serviceName)where T : class Parameters Type Name Description System.String serviceName Service name. Returns Type Description T Proxy object that forwards all member calls to a remote Ignite service. 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 IServicesClient WithKeepBinary() Returns Type Description IServicesClient 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 IServicesClient WithServerKeepBinary() Returns Type Description IServicesClient Instance with server-side binary mode enabled."
  },
  "api/Apache.Ignite.Core.Client.Services.html": {
    "href": "api/Apache.Ignite.Core.Client.Services.html",
    "title": "Namespace Apache.Ignite.Core.Client.Services | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Client.Services Interfaces IServicesClient Ignite distributed services client."
  },
  "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.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.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.Configuration.CheckpointWriteOrder.html": {
    "href": "api/Apache.Ignite.Core.Configuration.CheckpointWriteOrder.html",
    "title": "Enum CheckpointWriteOrder | Apache Ignite.NET",
    "keywords": "Enum CheckpointWriteOrder Defines checkpoint pages order on disk. Namespace : Apache.Ignite.Core.Configuration Assembly : Apache.Ignite.Core.dll Syntax public enum CheckpointWriteOrder Fields Name Description Random Pages are written in order provided by checkpoint pages collection iterator (which is basically a hashtable). Sequential All checkpoint pages are collected into single list and sorted by page index. Provides almost sequential disk writes, which can be much faster on some SSD models."
  },
  "api/Apache.Ignite.Core.Configuration.ClientConnectorConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Configuration.ClientConnectorConfiguration.html",
    "title": "Class ClientConnectorConfiguration | Apache Ignite.NET",
    "keywords": "Class ClientConnectorConfiguration Client connector configuration (ODBC, JDBC, Thin Client). Inheritance System.Object ClientConnectorConfiguration Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Configuration Assembly : Apache.Ignite.Core.dll Syntax public class ClientConnectorConfiguration Constructors ClientConnectorConfiguration() Initializes a new instance of the ClientConnectorConfiguration class. Declaration public ClientConnectorConfiguration() Fields DefaultHandshakeTimeout Default handshake timeout. Declaration public static readonly TimeSpan DefaultHandshakeTimeout Field Value Type Description System.TimeSpan DefaultIdleTimeout Default idle timeout. Declaration public static readonly TimeSpan DefaultIdleTimeout Field Value Type Description System.TimeSpan DefaultJdbcEnabled Default value for JdbcEnabled property. Declaration public const bool DefaultJdbcEnabled = true Field Value Type Description System.Boolean DefaultMaxOpenCursorsPerConnection Default maximum number of open cursors per connection. Declaration public const int DefaultMaxOpenCursorsPerConnection = 128 Field Value Type Description System.Int32 DefaultOdbcEnabled Default value for OdbcEnabled property. Declaration public const bool DefaultOdbcEnabled = true Field Value Type Description System.Boolean DefaultPort Default port. Declaration public const int DefaultPort = 10800 Field Value Type Description System.Int32 DefaultPortRange Default port range. Declaration public const int DefaultPortRange = 100 Field Value Type Description System.Int32 DefaultSocketBufferSize Default socket buffer size. Declaration public const int DefaultSocketBufferSize = 0 Field Value Type Description System.Int32 DefaultTcpNoDelay Default value of TcpNoDelay property. Declaration public const bool DefaultTcpNoDelay = true Field Value Type Description System.Boolean DefaultThinClientEnabled Default value for ThinClientEnabled property. Declaration public const bool DefaultThinClientEnabled = true Field Value Type Description System.Boolean DefaultThreadPoolSize Default SQL connector thread pool size. Declaration public static readonly int DefaultThreadPoolSize Field Value Type Description System.Int32 Properties HandshakeTimeout Gets or sets handshake timeout for client connections on the server side. If no successful handshake is performed within this timeout upon successful establishment of TCP connection the connection is closed. Declaration public TimeSpan HandshakeTimeout { get; set; } Property Value Type Description System.TimeSpan Host Gets or sets the host. Declaration public string Host { get; set; } Property Value Type Description System.String IdleTimeout Gets or sets idle timeout for client connections on the server side. If no packets come within idle timeout, the connection is closed by the server. Zero or negative means no timeout. Declaration public TimeSpan IdleTimeout { get; set; } Property Value Type Description System.TimeSpan JdbcEnabled Gets or sets a value indicating whether JDBC connector is enabled. Declaration public bool JdbcEnabled { get; set; } Property Value Type Description System.Boolean MaxOpenCursorsPerConnection Gets or sets the maximum open cursors per connection. Declaration public int MaxOpenCursorsPerConnection { get; set; } Property Value Type Description System.Int32 OdbcEnabled Gets or sets a value indicating whether ODBC connector is enabled. Declaration public bool OdbcEnabled { get; set; } Property Value Type Description System.Boolean Port Gets or sets the port. Declaration public int Port { get; set; } Property Value Type Description System.Int32 PortRange Gets or sets the port range. Declaration public int PortRange { get; set; } Property Value Type Description System.Int32 SocketReceiveBufferSize Gets or sets the size of the socket receive buffer. When set to 0, operating system default is used. Declaration public int SocketReceiveBufferSize { get; set; } Property Value Type Description System.Int32 SocketSendBufferSize Gets or sets the size of the socket send buffer. When set to 0, operating system default is used. Declaration public int SocketSendBufferSize { get; set; } Property Value Type Description System.Int32 TcpNoDelay Gets or sets the value for TCP_NODELAY socket option. Each socket will be opened using provided value. Setting this option to true disables Nagle's algorithm for socket decreasing latency and delivery time for small messages. For systems that work under heavy network load it is advisable to set this value to false . Declaration public bool TcpNoDelay { get; set; } Property Value Type Description System.Boolean ThinClientConfiguration Gets or sets thin client specific configuration. Declaration public ThinClientConfiguration ThinClientConfiguration { get; set; } Property Value Type Description ThinClientConfiguration ThinClientEnabled Gets or sets a value indicating whether thin client connector is enabled. Declaration public bool ThinClientEnabled { get; set; } Property Value Type Description System.Boolean ThreadPoolSize Gets or sets the size of the thread pool. Declaration public int ThreadPoolSize { get; set; } Property Value Type Description System.Int32"
  },
  "api/Apache.Ignite.Core.Configuration.DataPageEvictionMode.html": {
    "href": "api/Apache.Ignite.Core.Configuration.DataPageEvictionMode.html",
    "title": "Enum DataPageEvictionMode | Apache Ignite.NET",
    "keywords": "Enum DataPageEvictionMode Memory page eviction mode. Only data pages, that store key-value entries, are eligible for eviction. The other types of pages, like index or system pages, are not evictable. Namespace : Apache.Ignite.Core.Configuration Assembly : Apache.Ignite.Core.dll Syntax public enum DataPageEvictionMode Fields Name Description Disabled Eviction is disabled. Random2Lru Activates Random-2-LRU algorithm which is a scan resistant version of Random-LRU. This algorithm differs from Random-LRU only in a way that two latest access timestamps are stored for every data page. At the eviction time, a minimum between two latest timestamps is taken for further comparison with minimums of other pages that might be evicted. LRU-2 outperforms LRU by resolving \"one-hit wonder\" problem - if a data page is accessed rarely, but accidentally accessed once, its protected from eviction for a long time. RandomLru Random-LRU algorithm. Once a memory region defined by a memory policy is configured, an off-heap array is allocated to track last usage timestamp for every individual data page. The size of the array equals to MaxSize / PageSize . When a data page is accessed, its timestamp gets updated in the tracking array. The page index in the tracking array equals to pageAddress / MaxSize . When some pages need to be evicted, the algorithm randomly chooses 5 indexes from the tracking array and evicts a page with the latest timestamp. If some of the indexes point to non-data pages (index or system pages) then the algorithm picks other pages."
  },
  "api/Apache.Ignite.Core.Configuration.DataRegionConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Configuration.DataRegionConfiguration.html",
    "title": "Class DataRegionConfiguration | Apache Ignite.NET",
    "keywords": "Class DataRegionConfiguration Defines custom data region configuration for Apache Ignite page memory (see DataStorageConfiguration ). For each configured data region Apache Ignite instantiates respective memory regions with different parameters like maximum size, eviction policy, swapping options, etc. An Apache Ignite cache can be mapped to a particular region using DataRegionName method. Inheritance System.Object DataRegionConfiguration Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Configuration Assembly : Apache.Ignite.Core.dll Syntax public class DataRegionConfiguration Constructors DataRegionConfiguration() Initializes a new instance of the DataRegionConfiguration class. Declaration public DataRegionConfiguration() Fields DefaultEmptyPagesPoolSize The default empty pages pool size. Declaration public const int DefaultEmptyPagesPoolSize = 100 Field Value Type Description System.Int32 DefaultEvictionThreshold The default eviction threshold. Declaration public const double DefaultEvictionThreshold = 0.9 Field Value Type Description System.Double DefaultInitialSize The default initial size. Declaration public const long DefaultInitialSize = 268435456L Field Value Type Description System.Int64 DefaultLazyMemoryAllocation Default value for LazyMemoryAllocation . Declaration public const bool DefaultLazyMemoryAllocation = true Field Value Type Description System.Boolean DefaultMaxSize The default maximum size, equals to 20% of total RAM. Declaration public static readonly long DefaultMaxSize Field Value Type Description System.Int64 DefaultMetricsRateTimeInterval The default rate time interval. Declaration public static readonly TimeSpan DefaultMetricsRateTimeInterval Field Value Type Description System.TimeSpan DefaultMetricsSubIntervalCount The default sub intervals. Declaration public const int DefaultMetricsSubIntervalCount = 5 Field Value Type Description System.Int32 DefaultPersistenceEnabled Default value for PersistenceEnabled . Declaration public const bool DefaultPersistenceEnabled = false Field Value Type Description System.Boolean Properties CheckpointPageBufferSize Gets or sets the size of the checkpointing page buffer. Default is 0 : Ignite will choose buffer size automatically. Declaration public long CheckpointPageBufferSize { get; set; } Property Value Type Description System.Int64 EmptyPagesPoolSize Gets or sets the minimal number of empty pages to be present in reuse lists for this data region. This parameter ensures that Ignite will be able to successfully evict old data entries when the size of (key, value) pair is slightly larger than page size / 2. Increase this parameter if cache can contain very big entries (total size of pages in this pool should be enough to contain largest cache entry). Declaration public int EmptyPagesPoolSize { get; set; } Property Value Type Description System.Int32 EvictionThreshold Gets or sets the threshold for memory pages eviction initiation. For instance, if the threshold is 0.9 it means that the page memory will start the eviction only after 90% of the memory region is occupied. Declaration public double EvictionThreshold { get; set; } Property Value Type Description System.Double InitialSize Gets or sets initial memory region size. When the used memory size exceeds this value, new chunks of memory will be allocated. Declaration public long InitialSize { get; set; } Property Value Type Description System.Int64 LazyMemoryAllocation Gets or sets the lazy memory allocation flag. Declaration public bool LazyMemoryAllocation { get; set; } Property Value Type Description System.Boolean MaxSize Sets maximum memory region size. The total size should not be less than 10 MB due to internal data structures overhead. Declaration public long MaxSize { get; set; } Property Value Type Description System.Int64 MetricsEnabled Gets or sets a value indicating whether memory metrics should be enabled. Metrics can be retrieved with GetDataRegionMetrics() method. Declaration public bool MetricsEnabled { get; set; } Property Value Type Description System.Boolean MetricsRateTimeInterval Gets or sets the rate time interval for AllocationRate and EvictionRate monitoring purposes. For instance, after setting the interval to 60 seconds, subsequent calls to AllocationRate will return average allocation rate (pages per second) for the last minute. Declaration public TimeSpan MetricsRateTimeInterval { get; set; } Property Value Type Description System.TimeSpan MetricsSubIntervalCount Gets or sets the number of sub intervals to split MetricsRateTimeInterval into to calculate AllocationRate and EvictionRate . Bigger value results in more accurate metrics. Declaration public int MetricsSubIntervalCount { get; set; } Property Value Type Description System.Int32 Name Gets or sets the data region name. Declaration public string Name { get; set; } Property Value Type Description System.String PageEvictionMode Gets or sets the page eviction mode. If Disabled is used (default) then an out of memory exception will be thrown if the memory region usage goes beyond MaxSize . Declaration public DataPageEvictionMode PageEvictionMode { get; set; } Property Value Type Description DataPageEvictionMode PersistenceEnabled Gets or sets a value indicating whether disk persistence is enabled for this region. Default is DefaultPersistenceEnabled . Declaration public bool PersistenceEnabled { get; set; } Property Value Type Description System.Boolean SwapPath Gets or sets the the path to the directory for memory-mapped files. Null for no swap. Declaration public string SwapPath { get; set; } Property Value Type Description System.String"
  },
  "api/Apache.Ignite.Core.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.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.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.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.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.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.Affinity.IAffinityBackupFilter.html": {
    "href": "api/Apache.Ignite.Core.Cache.Affinity.IAffinityBackupFilter.html",
    "title": "Interface IAffinityBackupFilter | Apache Ignite.NET",
    "keywords": "Interface IAffinityBackupFilter Represents a backup filter for an affinity function - see AffinityBackupFilter . Only one predefined implementation is supported for now: ClusterNodeAttributeAffinityBackupFilter . Namespace : Apache.Ignite.Core.Cache.Affinity Assembly : Apache.Ignite.Core.dll Syntax public interface IAffinityBackupFilter"
  },
  "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.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.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.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.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.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.Eviction.html": {
    "href": "api/Apache.Ignite.Core.Cache.Eviction.html",
    "title": "Namespace Apache.Ignite.Core.Cache.Eviction | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Cache.Eviction Classes EvictionPolicyBase Base class for predefined eviction policies. FifoEvictionPolicy Eviction policy based on First In First Out (FIFO) algorithm with batch eviction support. The eviction starts in the following cases: The cache size becomes BatchSize elements greater than the maximum size; The size of cache entries in bytes becomes greater than the maximum memory size; The size of cache entry calculates as sum of key size and value size. Note: Batch eviction is enabled only if maximum memory limit isn't set. This implementation is very efficient since it does not create any additional table-like data structures. The FIFO ordering information is maintained by attaching ordering metadata to cache entries. LruEvictionPolicy Eviction policy based on Least Recently Used (LRU) algorithm with batch eviction support. The eviction starts in the following cases: The cache size becomes { @code batchSize } elements greater than the maximum size; The size of cache entries in bytes becomes greater than the maximum memory size; The size of cache entry calculates as sum of key size and value size. Note: Batch eviction is enabled only if maximum memory limit isn't set. This implementation is very efficient since it does not create any additional table-like data structures. The LRU ordering information is maintained by attaching ordering metadata to cache entries. Interfaces IEvictionPolicy Represents a cache eviction policy. Only predefined implementations are supported now: LruEvictionPolicy , FifoEvictionPolicy ."
  },
  "api/Apache.Ignite.Core.Cache.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> IncludeExpired Gets or sets a value indicating whether to notify about Expired events. If true , then the remote listener will get notifications about expired cache entries. Otherwise, only Created , Updated , and Removed events will be passed to the listener. Defaults to false . Declaration public bool IncludeExpired { get; set; } Property Value Type Description System.Boolean 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.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.Client.Datastream.html": {
    "href": "api/Apache.Ignite.Core.Client.Datastream.html",
    "title": "Namespace Apache.Ignite.Core.Client.Datastream | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Client.Datastream Classes DataStreamerClientOptions Thin client data streamer options. To set a receiver, use generic class DataStreamerClientOptions<TK, TV> . See also IDataStreamerClient<TK, TV> , GetDataStreamer<TK, TV>(String) . DataStreamerClientOptions<TK, TV> Thin client data streamer extended options. See also IDataStreamerClient<TK, TV> , GetDataStreamer<TK, TV>(String) . Interfaces IDataStreamerClient<TK, TV> Thin client data streamer. Data streamer is an efficient and fault-tolerant way to load data into cache. Updates are buffered and mapped to primary nodes to ensure minimal data movement and optimal resource utilization. Update failures caused by cluster topology changes are retried automatically. Note that streamer send data to remote nodes asynchronously, so cache updates can be reordered. Instances of the implementing class are thread-safe: data can be added from multiple threads. Closing and disposing: System.IDisposable.Dispose() method calls Close(Boolean) (false) . This will flush any remaining data to the cache synchronously. To avoid blocking threads when exiting using() block, use CloseAsync(Boolean) ."
  },
  "api/Apache.Ignite.Core.Client.IClientCluster.html": {
    "href": "api/Apache.Ignite.Core.Client.IClientCluster.html",
    "title": "Interface IClientCluster | Apache Ignite.NET",
    "keywords": "Interface IClientCluster Represents whole cluster (group of all nodes in a cluster). Inherited Members IClientClusterGroup.ForAttribute(String, String) IClientClusterGroup.ForDotNet() IClientClusterGroup.ForServers() IClientClusterGroup.ForPredicate(Func<IClientClusterNode, Boolean>) IClientClusterGroup.GetNodes() IClientClusterGroup.GetNode(Guid) IClientClusterGroup.GetNode() IClientClusterGroup.GetCompute() IClientClusterGroup.GetServices() Namespace : Apache.Ignite.Core.Client Assembly : Apache.Ignite.Core.dll Syntax public interface IClientCluster : IClientClusterGroup Methods DisableWal(String) Disables write-ahead logging for specified cache. When WAL is disabled, changes are not logged to disk. This significantly improves cache update speed.The drawback is absence of local crash-recovery guarantees. If node is crashed, local content of WAL-disabled cache will be cleared on restart to avoid data corruption. Internally this method will wait for all current cache operations to finish and prevent new cache operations from being executed.Then checkpoint is initiated to flush all data to disk.Control is returned to the callee when all dirty pages are prepared for checkpoint, but not necessarily flushed to disk. WAL state can be changed only for persistent caches. Declaration bool DisableWal(string cacheName) Parameters Type Name Description System.String cacheName Name of the cache. Returns Type Description System.Boolean Whether WAL was enabled by this call. EnableWal(String) Enables write-ahead logging for specified cache. Restoring crash-recovery guarantees of a previous call to DisableWal(String) . Internally this method will wait for all current cache operations to finish and prevent new cache operations from being executed. Then checkpoint is initiated to flush all data to disk. Control is returned to the callee when all data is persisted to disk. WAL state can be changed only for persistent caches. Declaration bool EnableWal(string cacheName) Parameters Type Name Description System.String cacheName Name of the cache. Returns Type Description System.Boolean Whether WAL was disabled by this call. IsActive() Determines whether this grid is in active state. Declaration bool IsActive() Returns Type Description System.Boolean true if the grid is active; otherwise, false . IsWalEnabled(String) Determines whether write-ahead logging is enabled for specified cache. Declaration bool IsWalEnabled(string cacheName) Parameters Type Name Description System.String cacheName Name of the cache. Returns Type Description System.Boolean SetActive(Boolean) Changes Ignite grid state to active or inactive. Declaration void SetActive(bool isActive) Parameters Type Name Description System.Boolean isActive"
  },
  "api/Apache.Ignite.Core.Cluster.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 Version Gets an Ignite node version. Declaration IgniteProductVersion Version { get; } Property Value Type Description IgniteProductVersion Methods GetAttribute<T>(String) Gets node's attribute. Attributes are assigned to nodes at startup. Note that attributes cannot be changed at runtime. Declaration T GetAttribute<T>(string name) Parameters Type Name Description System.String name Attribute name. Returns Type Description T Attribute value. Type Parameters Name Description T GetAttributes() Gets all node attributes. Attributes are assigned to nodes at startup. Note that attributes cannot be changed at runtime. Declaration [Obsolete(\"Use Attributes property.\")] IDictionary<string, object> GetAttributes() Returns Type Description System.Collections.Generic.IDictionary < System.String , System.Object > All node attributes. GetMetrics() Gets metrics snapshot for this node. Note that node metrics are constantly updated and provide up to date information about nodes. For example, you can get an idea about CPU load on remote node via CurrentCpuLoad . Node metrics are updated with some delay which is directly related to heartbeat frequency. For example, when used with default GridTcpDiscoverySpi the update will happen every 2 seconds. Declaration IClusterMetrics GetMetrics() Returns Type Description IClusterMetrics Runtime metrics snapshot for this node. TryGetAttribute<T>(String, out T) Try getting node's attribute. Attributes are assigned to nodes at startup. Note that attributes cannot be changed at runtime. Declaration bool TryGetAttribute<T>(string name, out T attr) Parameters Type Name Description System.String name Attribute name. T attr Attribute value. Returns Type Description System.Boolean true in case such attribute exists. Type Parameters Name Description T"
  },
  "api/Apache.Ignite.Core.Communication.Tcp.TcpCommunicationSpi.html": {
    "href": "api/Apache.Ignite.Core.Communication.Tcp.TcpCommunicationSpi.html",
    "title": "Class TcpCommunicationSpi | Apache Ignite.NET",
    "keywords": "Class TcpCommunicationSpi TcpCommunicationSpi is default communication SPI which uses TCP/IP protocol and Java NIO to communicate with other nodes. At startup, this SPI tries to start listening to local port specified by LocalPort property. If local port is occupied, then SPI will automatically increment the port number until it can successfully bind for listening. LocalPortRange configuration parameter controls maximum number of ports that SPI will try before it fails. Port range comes very handy when starting multiple grid nodes on the same machine or even in the same VM. In this case all nodes can be brought up without a single change in configuration. Inheritance System.Object TcpCommunicationSpi Implements ICommunicationSpi Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Communication.Tcp Assembly : Apache.Ignite.Core.dll Syntax public class TcpCommunicationSpi : ICommunicationSpi Constructors TcpCommunicationSpi() Initializes a new instance of the TcpCommunicationSpi class. Declaration public TcpCommunicationSpi() Fields DefaultAckSendThreshold Default value of AckSendThreshold property. Declaration public const int DefaultAckSendThreshold = 16 Field Value Type Description System.Int32 DefaultConnectionsPerNode Default value of ConnectionsPerNode property. Declaration public const int DefaultConnectionsPerNode = 1 Field Value Type Description System.Int32 DefaultConnectTimeout Default value of ConnectTimeout property. Declaration public static readonly TimeSpan DefaultConnectTimeout Field Value Type Description System.TimeSpan DefaultDirectBuffer Default value of DirectBuffer property. Declaration public const bool DefaultDirectBuffer = true Field Value Type Description System.Boolean DefaultDirectSendBuffer Default value of DirectSendBuffer property. Declaration public const bool DefaultDirectSendBuffer = false Field Value Type Description System.Boolean DefaultFilterReachableAddresses Default value of FilterReachableAddresses property. Declaration public const bool DefaultFilterReachableAddresses = false Field Value Type Description System.Boolean DefaultIdleConnectionTimeout Default value of IdleConnectionTimeout property. Declaration public static readonly TimeSpan DefaultIdleConnectionTimeout Field Value Type Description System.TimeSpan DefaultLocalPort Default value of LocalPort property. Declaration public const int DefaultLocalPort = 47100 Field Value Type Description System.Int32 DefaultLocalPortRange Default value of LocalPortRange property. Declaration public const int DefaultLocalPortRange = 100 Field Value Type Description System.Int32 DefaultMaxConnectTimeout Default value of MaxConnectTimeout property. Declaration public static readonly TimeSpan DefaultMaxConnectTimeout Field Value Type Description System.TimeSpan DefaultMessageQueueLimit Default value of MessageQueueLimit property. Declaration public const int DefaultMessageQueueLimit = 1024 Field Value Type Description System.Int32 DefaultReconnectCount Default value of ReconnectCount property. Declaration public const int DefaultReconnectCount = 10 Field Value Type Description System.Int32 DefaultSelectorsCount Default value of SelectorsCount property. Declaration public static readonly int DefaultSelectorsCount Field Value Type Description System.Int32 DefaultSelectorSpins Default value of SelectorSpins property. Declaration public const long DefaultSelectorSpins = 0L Field Value Type Description System.Int64 DefaultSharedMemoryPort Default value of SharedMemoryPort property. Declaration public const int DefaultSharedMemoryPort = -1 Field Value Type Description System.Int32 DefaultSocketBufferSize Default socket buffer size. Declaration public const int DefaultSocketBufferSize = 32768 Field Value Type Description System.Int32 DefaultSocketWriteTimeout Default value of SocketWriteTimeout property. Declaration public const long DefaultSocketWriteTimeout = 2000L Field Value Type Description System.Int64 DefaultTcpNoDelay Default value of TcpNoDelay property. Declaration public const bool DefaultTcpNoDelay = true Field Value Type Description System.Boolean DefaultUsePairedConnections Default value of UsePairedConnections property. Declaration public const bool DefaultUsePairedConnections = false Field Value Type Description System.Boolean Properties AckSendThreshold Gets or sets the number of received messages per connection to node after which acknowledgment message is sent. Declaration public int AckSendThreshold { get; set; } Property Value Type Description System.Int32 ConnectionsPerNode Gets or sets the number of connections per node. Declaration public int ConnectionsPerNode { get; set; } Property Value Type Description System.Int32 ConnectTimeout Gets or sets the connect timeout used when establishing connection with remote nodes. Declaration public TimeSpan ConnectTimeout { get; set; } Property Value Type Description System.TimeSpan DirectBuffer Gets or sets a value indicating whether to allocate direct (ByteBuffer.allocateDirect) or heap (ByteBuffer.allocate) buffer. Declaration public bool DirectBuffer { get; set; } Property Value Type Description System.Boolean DirectSendBuffer Gets or sets a value indicating whether to allocate direct (ByteBuffer.allocateDirect) or heap (ByteBuffer.allocate) send buffer. Declaration public bool DirectSendBuffer { get; set; } Property Value Type Description System.Boolean FilterReachableAddresses Gets or sets a value indicating whether filter for reachable addresses should be enabled on creating tcp client. Declaration public bool FilterReachableAddresses { get; set; } Property Value Type Description System.Boolean IdleConnectionTimeout Sets maximum idle connection timeout upon which a connection to client will be closed. Declaration public TimeSpan IdleConnectionTimeout { get; set; } Property Value Type Description System.TimeSpan LocalAddress Gets or sets the local host address for socket binding. Note that one node could have additional addresses beside the loopback one. This configuration parameter is optional. Declaration public string LocalAddress { get; set; } Property Value Type Description System.String LocalPort Gets or sets the local port for socket binding. Declaration public int LocalPort { get; set; } Property Value Type Description System.Int32 LocalPortRange Gets or sets local port range for local host ports (value must greater than or equal to 0 ). If provided local port LocalPort is occupied, implementation will try to increment the port number for as long as it is less than initial value plus this range. If port range value is 0 , then implementation will try bind only to the port provided by LocalPort method and fail if binding to this port did not succeed. Declaration public int LocalPortRange { get; set; } Property Value Type Description System.Int32 MaxConnectTimeout Gets or sets maximum connect timeout. If handshake is not established within connect timeout, then SPI tries to repeat handshake procedure with increased connect timeout. Connect timeout can grow till maximum timeout value, if maximum timeout value is reached then the handshake is considered as failed. 0 is interpreted as infinite timeout. Declaration public TimeSpan MaxConnectTimeout { get; set; } Property Value Type Description System.TimeSpan MessageQueueLimit Gets or sets the message queue limit for incoming and outgoing messages. When set to positive number send queue is limited to the configured value. 0 disables the limitation. Declaration public int MessageQueueLimit { get; set; } Property Value Type Description System.Int32 ReconnectCount Gets or sets the maximum number of reconnect attempts used when establishing connection with remote nodes. Declaration public int ReconnectCount { get; set; } Property Value Type Description System.Int32 SelectorsCount Gets or sets the count of selectors te be used in TCP server. Default value is DefaultSelectorsCount , which is calculated as Math.Min(4, Environment.ProcessorCount) Declaration public int SelectorsCount { get; set; } Property Value Type Description System.Int32 SelectorSpins Gets or sets a values that defines how many non-blocking selectors should be made. Can be set to System.Int64.MaxValue so selector threads will never block. Default value is DefaultSelectorSpins . Declaration public long SelectorSpins { get; set; } Property Value Type Description System.Int64 SharedMemoryPort Gets or sets a local port to accept shared memory connections. Declaration public int SharedMemoryPort { get; set; } Property Value Type Description System.Int32 SlowClientQueueLimit Gets or sets slow client queue limit. When set to a positive number, communication SPI will monitor clients outbound message queue sizes and will drop those clients whose queue exceeded this limit. Usually this value should be set to the same value as MessageQueueLimit which controls message back-pressure for server nodes. The default value for this parameter is 0 which means unlimited. Declaration public int SlowClientQueueLimit { get; set; } Property Value Type Description System.Int32 SocketReceiveBufferSize Gets or sets the size of the socket receive buffer. Declaration public int SocketReceiveBufferSize { get; set; } Property Value Type Description System.Int32 SocketSendBufferSize Gets or sets the size of the socket send buffer. Declaration public int SocketSendBufferSize { get; set; } Property Value Type Description System.Int32 SocketWriteTimeout Gets or sets socket write timeout for TCP connection. If message can not be written to socket within this time then connection is closed and reconnect is attempted. Default value is DefaultSocketWriteTimeout . Declaration public long SocketWriteTimeout { get; set; } Property Value Type Description System.Int64 TcpNoDelay Gets or sets the value for TCP_NODELAY socket option. Each socket will be opened using provided value. Setting this option to true disables Nagle's algorithm for socket decreasing latency and delivery time for small messages. For systems that work under heavy network load it is advisable to set this value to false . Declaration public bool TcpNoDelay { get; set; } Property Value Type Description System.Boolean UnacknowledgedMessagesBufferSize Gets or sets the maximum number of stored unacknowledged messages per connection to node. If number of unacknowledged messages exceeds this number then connection to node is closed and reconnect is attempted. Declaration public int UnacknowledgedMessagesBufferSize { get; set; } Property Value Type Description System.Int32 UsePairedConnections Gets or sets a value indicating whether separate connections should be used for incoming and outgoing data. Set this to true if ConnectionsPerNode should maintain connection for outgoing and incoming messages separately. In this case total number of connections between local and each remote node is equals to ConnectionsPerNode * 2. Declaration public bool UsePairedConnections { get; set; } Property Value Type Description System.Boolean Implements ICommunicationSpi"
  },
  "api/Apache.Ignite.Core.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.DataStructures.Configuration.AtomicConfiguration.html": {
    "href": "api/Apache.Ignite.Core.DataStructures.Configuration.AtomicConfiguration.html",
    "title": "Class AtomicConfiguration | Apache Ignite.NET",
    "keywords": "Class AtomicConfiguration Configuration for atomic data structures. Inheritance System.Object AtomicConfiguration Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.DataStructures.Configuration Assembly : Apache.Ignite.Core.dll Syntax public class AtomicConfiguration Constructors AtomicConfiguration() Initializes a new instance of the AtomicConfiguration class. Declaration public AtomicConfiguration() Fields DefaultAtomicSequenceReserveSize Default atomic sequence reservation size. Declaration public const int DefaultAtomicSequenceReserveSize = 1000 Field Value Type Description System.Int32 DefaultBackups Default number of backups. Declaration public const int DefaultBackups = 0 Field Value Type Description System.Int32 DefaultCacheMode Default caching mode. Declaration public const CacheMode DefaultCacheMode = CacheMode.Partitioned Field Value Type Description CacheMode Properties AtomicSequenceReserveSize Gets or sets the default number of sequence values reserved for IAtomicSequence instances. After a certain number has been reserved, consequent increments of sequence will happen locally, without communication with other nodes, until the next reservation has to be made. Declaration public int AtomicSequenceReserveSize { get; set; } Property Value Type Description System.Int32 Backups Gets or sets number of nodes used to back up single partition for Partitioned cache. Declaration public int Backups { get; set; } Property Value Type Description System.Int32 CacheMode Gets or sets caching mode to use. Declaration public CacheMode CacheMode { get; set; } Property Value Type Description CacheMode"
  },
  "api/Apache.Ignite.Core.DataStructures.Configuration.html": {
    "href": "api/Apache.Ignite.Core.DataStructures.Configuration.html",
    "title": "Namespace Apache.Ignite.Core.DataStructures.Configuration | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.DataStructures.Configuration Classes AtomicConfiguration Configuration for atomic data structures."
  },
  "api/Apache.Ignite.Core.Events.CacheEvent.html": {
    "href": "api/Apache.Ignite.Core.Events.CacheEvent.html",
    "title": "Class CacheEvent | Apache Ignite.NET",
    "keywords": "Class CacheEvent In-memory database (cache) event. Inheritance System.Object EventBase CacheEvent Implements IEvent System.IEquatable < EventBase > Inherited Members EventBase.Id EventBase.LocalOrder EventBase.Node EventBase.Message EventBase.Type EventBase.Name EventBase.Timestamp EventBase.Equals(EventBase) EventBase.Equals(Object) EventBase.GetHashCode() EventBase.ToString() EventBase.ReadNode(IBinaryRawReader) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Events Assembly : Apache.Ignite.Core.dll Syntax public sealed class CacheEvent : EventBase, IEvent, IEquatable<EventBase> Properties CacheName Gets cache name. Declaration public string CacheName { get; } Property Value Type Description System.String ClosureClassName Gets closure class name (applicable only for TRANSFORM operations). Declaration public string ClosureClassName { get; } Property Value Type Description System.String EventNode Gets node which initiated cache operation or null if that node is not available. Declaration public IClusterNode EventNode { get; } Property Value Type Description IClusterNode HasNewValue Gets flag indicating whether cache entry has new value in case if we only have new value in serialized form in which case NewValue will return null. Declaration public bool HasNewValue { get; } Property Value Type Description System.Boolean HasOldValue Gets flag indicating whether cache entry has old value in case if we only have old value in serialized form in which case OldValue will return null. Declaration public bool HasOldValue { get; } Property Value Type Description System.Boolean IsNear Gets flag indicating whether event happened on near or partitioned cache. Declaration public bool IsNear { get; } Property Value Type Description System.Boolean Key Gets cache entry associated with event. Declaration public object Key { get; } Property Value Type Description System.Object NewValue Gets new value for this event. Declaration public object NewValue { get; } Property Value Type Description System.Object OldValue Gets old value associated with this event. Declaration public object OldValue { get; } Property Value Type Description System.Object Partition Gets partition for the event which is the partition the key belongs to. Declaration public int Partition { get; } Property Value Type Description System.Int32 SubjectId Gets security subject ID initiated this cache event, if available. This property is available only for CacheObjectPut , CacheObjectRemoved and CacheObjectRead cache events. Subject ID will be set either to nodeId initiated cache update or read or client ID initiated cache update or read. Declaration public Guid? SubjectId { get; } Property Value Type Description System.Nullable < System.Guid > TaskName Gets task name if cache event was caused by an operation initiated within task execution. Declaration public string TaskName { get; } Property Value Type Description System.String Xid ID of surrounding cache cache transaction or null if there is no surrounding transaction. Declaration public IgniteGuid? Xid { get; } Property Value Type Description System.Nullable < IgniteGuid > Methods ToShortString() Gets shortened version of ToString result. Declaration public override string ToShortString() Returns Type Description System.String Overrides EventBase.ToShortString() Implements IEvent System.IEquatable<T>"
  },
  "api/Apache.Ignite.Core.Events.CacheQueryExecutedEvent.html": {
    "href": "api/Apache.Ignite.Core.Events.CacheQueryExecutedEvent.html",
    "title": "Class CacheQueryExecutedEvent | Apache Ignite.NET",
    "keywords": "Class CacheQueryExecutedEvent Cache query execution event. Inheritance System.Object EventBase CacheQueryExecutedEvent Implements IEvent System.IEquatable < EventBase > Inherited Members EventBase.Id EventBase.LocalOrder EventBase.Node EventBase.Message EventBase.Type EventBase.Name EventBase.Timestamp EventBase.Equals(EventBase) EventBase.Equals(Object) EventBase.GetHashCode() EventBase.ToString() EventBase.ReadNode(IBinaryRawReader) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Events Assembly : Apache.Ignite.Core.dll Syntax public sealed class CacheQueryExecutedEvent : EventBase, IEvent, IEquatable<EventBase> Properties CacheName Gets cache name on which query was executed. Declaration public string CacheName { get; } Property Value Type Description System.String ClassName Gets queried class name. Applicable for SQL and full text queries. Declaration public string ClassName { get; } Property Value Type Description System.String Clause Gets query clause. Applicable for SQL, SQL fields and full text queries. Declaration public string Clause { get; } Property Value Type Description System.String QueryType Gets query type. Declaration public string QueryType { get; } Property Value Type Description System.String SubjectId Gets security subject ID. Declaration public Guid? SubjectId { get; } Property Value Type Description System.Nullable < System.Guid > TaskName Gets the name of the task that executed the query (if any). Declaration public string TaskName { get; } Property Value Type Description System.String Methods ToShortString() Gets shortened version of ToString result. Declaration public override string ToShortString() Returns Type Description System.String Overrides EventBase.ToShortString() Implements IEvent System.IEquatable<T>"
  },
  "api/Apache.Ignite.Core.Events.CacheQueryReadEvent.html": {
    "href": "api/Apache.Ignite.Core.Events.CacheQueryReadEvent.html",
    "title": "Class CacheQueryReadEvent | Apache Ignite.NET",
    "keywords": "Class CacheQueryReadEvent Cache query read event. Inheritance System.Object EventBase CacheQueryReadEvent Implements IEvent System.IEquatable < EventBase > Inherited Members EventBase.Id EventBase.LocalOrder EventBase.Node EventBase.Message EventBase.Type EventBase.Name EventBase.Timestamp EventBase.Equals(EventBase) EventBase.Equals(Object) EventBase.GetHashCode() EventBase.ToString() EventBase.ReadNode(IBinaryRawReader) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Events Assembly : Apache.Ignite.Core.dll Syntax public sealed class CacheQueryReadEvent : EventBase, IEvent, IEquatable<EventBase> Properties CacheName Gets cache name on which query was executed. Declaration public string CacheName { get; } Property Value Type Description System.String ClassName Gets queried class name. Applicable for SQL and full text queries. Declaration public string ClassName { get; } Property Value Type Description System.String Clause Gets query clause. Applicable for SQL, SQL fields and full text queries. Declaration public string Clause { get; } Property Value Type Description System.String Key Gets read entry key. Declaration public object Key { get; } Property Value Type Description System.Object OldValue Gets read entry old value (applicable for continuous queries). Declaration public object OldValue { get; } Property Value Type Description System.Object QueryType Gets query type. Declaration public string QueryType { get; } Property Value Type Description System.String Row Gets read results set row. Declaration public object Row { get; } Property Value Type Description System.Object SubjectId Gets security subject ID. Declaration public Guid? SubjectId { get; } Property Value Type Description System.Nullable < System.Guid > TaskName Gets the name of the task that executed the query (if any). Declaration public string TaskName { get; } Property Value Type Description System.String Value Gets read entry value. Declaration public object Value { get; } Property Value Type Description System.Object Methods ToShortString() Gets shortened version of ToString result. Declaration public override string ToShortString() Returns Type Description System.String Overrides EventBase.ToShortString() Implements IEvent System.IEquatable<T>"
  },
  "api/Apache.Ignite.Core.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.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.TransactionDeadlockException.html": {
    "href": "api/Apache.Ignite.Core.Transactions.TransactionDeadlockException.html",
    "title": "Class TransactionDeadlockException | Apache Ignite.NET",
    "keywords": "Class TransactionDeadlockException Indicates a deadlock within Ignite transaction. This exception can be thrown from any cache method that modifies or reads data within a transaction with timeout (see TxStart(TransactionConcurrency, TransactionIsolation, TimeSpan, Int32) overload). Inheritance System.Object System.Exception IgniteException TransactionDeadlockException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Transactions Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class TransactionDeadlockException : IgniteException, ISerializable, _Exception Constructors TransactionDeadlockException() Initializes a new instance of the TransactionDeadlockException class. Declaration public TransactionDeadlockException() TransactionDeadlockException(SerializationInfo, StreamingContext) Initializes a new instance of the TransactionDeadlockException class. Declaration protected TransactionDeadlockException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. TransactionDeadlockException(String) Initializes a new instance of the TransactionDeadlockException class. Declaration public TransactionDeadlockException(string message) Parameters Type Name Description System.String message The message that describes the error. TransactionDeadlockException(String, Exception) Initializes a new instance of the TransactionDeadlockException class. Declaration public TransactionDeadlockException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Transactions.TransactionHeuristicException.html": {
    "href": "api/Apache.Ignite.Core.Transactions.TransactionHeuristicException.html",
    "title": "Class TransactionHeuristicException | Apache Ignite.NET",
    "keywords": "Class TransactionHeuristicException Exception thrown whenever Ignite transaction enters an unknown state. This exception is usually thrown whenever commit partially succeeds. Cache will still resolve this situation automatically to ensure data integrity, by invalidating all values participating in this transaction on remote nodes. Inheritance System.Object System.Exception IgniteException TransactionHeuristicException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Transactions Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class TransactionHeuristicException : IgniteException, ISerializable, _Exception Constructors TransactionHeuristicException() Initializes a new instance of the TransactionHeuristicException class. Declaration public TransactionHeuristicException() TransactionHeuristicException(SerializationInfo, StreamingContext) Initializes a new instance of the TransactionHeuristicException class. Declaration protected TransactionHeuristicException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. TransactionHeuristicException(String) Initializes a new instance of the TransactionHeuristicException class. Declaration public TransactionHeuristicException(string message) Parameters Type Name Description System.String message The message that describes the error. TransactionHeuristicException(String, Exception) Initializes a new instance of the TransactionHeuristicException class. Declaration public TransactionHeuristicException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Transactions.TransactionIsolation.html": {
    "href": "api/Apache.Ignite.Core.Transactions.TransactionIsolation.html",
    "title": "Enum TransactionIsolation | Apache Ignite.NET",
    "keywords": "Enum TransactionIsolation Defines different cache transaction isolation levels. See ITransaction documentation for more information about cache transaction isolation levels. Namespace : Apache.Ignite.Core.Transactions Assembly : Apache.Ignite.Core.dll Syntax public enum TransactionIsolation Fields Name Description ReadCommitted Read committed isolation level. RepeatableRead Repeatable read isolation level. Serializable Serializable isolation level."
  },
  "api/Apache.Ignite.Core.Transactions.TransactionOptimisticException.html": {
    "href": "api/Apache.Ignite.Core.Transactions.TransactionOptimisticException.html",
    "title": "Class TransactionOptimisticException | Apache Ignite.NET",
    "keywords": "Class TransactionOptimisticException Exception thrown whenever Ignite transactions fail optimistically. Inheritance System.Object System.Exception IgniteException TransactionOptimisticException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Transactions Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class TransactionOptimisticException : IgniteException, ISerializable, _Exception Constructors TransactionOptimisticException() Initializes a new instance of the TransactionOptimisticException class. Declaration public TransactionOptimisticException() TransactionOptimisticException(SerializationInfo, StreamingContext) Initializes a new instance of the TransactionOptimisticException class. Declaration protected TransactionOptimisticException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. TransactionOptimisticException(String) Initializes a new instance of the TransactionOptimisticException class. Declaration public TransactionOptimisticException(string message) Parameters Type Name Description System.String message The message that describes the error. TransactionOptimisticException(String, Exception) Initializes a new instance of the TransactionOptimisticException class. Declaration public TransactionOptimisticException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.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.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.AffinityTopologyVersion.html": {
    "href": "api/Apache.Ignite.Core.Cache.Affinity.AffinityTopologyVersion.html",
    "title": "Struct AffinityTopologyVersion | Apache Ignite.NET",
    "keywords": "Struct AffinityTopologyVersion Affinity topology version. Implements System.IEquatable < AffinityTopologyVersion > System.IComparable < AffinityTopologyVersion > Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() Namespace : Apache.Ignite.Core.Cache.Affinity Assembly : Apache.Ignite.Core.dll Syntax public struct AffinityTopologyVersion : IEquatable<AffinityTopologyVersion>, IComparable<AffinityTopologyVersion> Constructors AffinityTopologyVersion(Int64, Int32) Initializes a new instance of the AffinityTopologyVersion struct. Declaration public AffinityTopologyVersion(long version, int minorVersion) Parameters Type Name Description System.Int64 version The version. System.Int32 minorVersion The minor version. Properties MinorVersion Gets the minor version, which is increased when new caches start. Declaration public int MinorVersion { get; } Property Value Type Description System.Int32 Version Gets the major version, same as TopologyVersion . Declaration public long Version { get; } Property Value Type Description System.Int64 Methods CompareTo(AffinityTopologyVersion) Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. Declaration public int CompareTo(AffinityTopologyVersion other) Parameters Type Name Description AffinityTopologyVersion other Returns Type Description System.Int32 Equals(AffinityTopologyVersion) Indicates whether the current object is equal to another object of the same type. Declaration public bool Equals(AffinityTopologyVersion other) Parameters Type Name Description AffinityTopologyVersion other An object to compare with this object. Returns Type Description System.Boolean true if the current object is equal to the other parameter; otherwise, false. Equals(Object) Determines whether the specified System.Object , is equal to this instance. Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj The System.Object to compare with this instance. Returns Type Description System.Boolean true if the specified System.Object is equal to this instance; otherwise, false . Overrides System.ValueType.Equals(System.Object) GetHashCode() Returns a hash code for this instance. Declaration public override int GetHashCode() Returns Type Description System.Int32 A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Overrides System.ValueType.GetHashCode() ToString() Returns a System.String that represents this instance. Declaration public override string ToString() Returns Type Description System.String A System.String that represents this instance. Overrides System.ValueType.ToString() Operators Equality(AffinityTopologyVersion, AffinityTopologyVersion) Implements the operator ==. Declaration public static bool operator ==(AffinityTopologyVersion left, AffinityTopologyVersion right) Parameters Type Name Description AffinityTopologyVersion left The left operand. AffinityTopologyVersion right The right operand. Returns Type Description System.Boolean The result of the operator. GreaterThan(AffinityTopologyVersion, AffinityTopologyVersion) Implements the operator 'greater than'. Declaration public static bool operator>(AffinityTopologyVersion left, AffinityTopologyVersion right) Parameters Type Name Description AffinityTopologyVersion left The left operand. AffinityTopologyVersion right The right operand. Returns Type Description System.Boolean The result of the operator. GreaterThanOrEqual(AffinityTopologyVersion, AffinityTopologyVersion) Implements the operator 'greater or equal than'. Declaration public static bool operator >=(AffinityTopologyVersion left, AffinityTopologyVersion right) Parameters Type Name Description AffinityTopologyVersion left The left operand. AffinityTopologyVersion right The right operand. Returns Type Description System.Boolean The result of the operator. Inequality(AffinityTopologyVersion, AffinityTopologyVersion) Implements the operator !=. Declaration public static bool operator !=(AffinityTopologyVersion left, AffinityTopologyVersion right) Parameters Type Name Description AffinityTopologyVersion left The left operand. AffinityTopologyVersion right The right operand. Returns Type Description System.Boolean The result of the operator. LessThan(AffinityTopologyVersion, AffinityTopologyVersion) Implements the operator 'less than'. Declaration public static bool operator <(AffinityTopologyVersion left, AffinityTopologyVersion right) Parameters Type Name Description AffinityTopologyVersion left The left operand. AffinityTopologyVersion right The right operand. Returns Type Description System.Boolean The result of the operator. LessThanOrEqual(AffinityTopologyVersion, AffinityTopologyVersion) Implements the operator 'less or equal than'. Declaration public static bool operator <=(AffinityTopologyVersion left, AffinityTopologyVersion right) Parameters Type Name Description AffinityTopologyVersion left The left operand. AffinityTopologyVersion right The right operand. Returns Type Description System.Boolean The result of the operator. Implements System.IEquatable<T> System.IComparable<T>"
  },
  "api/Apache.Ignite.Core.Cache.Configuration.CacheAtomicityMode.html": {
    "href": "api/Apache.Ignite.Core.Cache.Configuration.CacheAtomicityMode.html",
    "title": "Enum CacheAtomicityMode | Apache Ignite.NET",
    "keywords": "Enum CacheAtomicityMode Cache atomicity mode. Namespace : Apache.Ignite.Core.Cache.Configuration Assembly : Apache.Ignite.Core.dll Syntax public enum CacheAtomicityMode Fields Name Description Atomic Specifies atomic-only cache behaviour. In this mode distributed transactions and distributed locking are not supported. Disabling transactions and locking allows to achieve much higher performance and throughput ratios. In addition to transactions and locking, one of the main differences to Atomic mode is that bulk writes, such as PutAll(IEnumerable<KeyValuePair<TK, TV>>) and RemoveAll(IEnumerable<TK>) methods, become simple batch operations which can partially fail. In case of partial failure, CachePartialUpdateException will be thrown which will contain a list of keys for which the update failed. It is recommended that bulk writes are used whenever multiple keys need to be inserted or updated in cache, as they reduce number of network trips and provide better performance. Note that even without locking and transactions, Atomic mode still provides full consistency guarantees across all cache nodes. Also note that all data modifications in Atomic mode are guaranteed to be atomic and consistent with writes to the underlying persistent store, if one is configured. Transactional Specifies fully ACID-compliant transactional cache behavior. Note! In this mode, transactional consistency is guaranteed for key-value API operations only. To enable ACID capabilities for SQL transactions, use TRANSACTIONAL_SNAPSHOT mode. Note! This atomicity mode is not compatible with the other atomicity modes within the same transaction. If a transaction is executed over multiple caches, all caches must have the same atomicity mode, either TRANSACTIONAL_SNAPSHOT or TRANSACTIONAL. TransactionalSnapshot This is an experimental feature. Transactional SQL is currently in a beta status. Specifies fully ACID-compliant transactional cache behavior for both key-value API and SQL transactions. This atomicity mode enables multiversion concurrency control (MVCC) for the cache. In MVCC-enabled caches, when a transaction updates a row, it creates a new version of that row instead of overwriting it. Other users continue to see the old version of the row until the transaction is committed. In this way, readers and writers do not conflict with each other and always work with a consistent dataset. The old version of data is cleaned up when it's no longer accessed by anyone. With this mode enabled, one node is elected as an MVCC coordinator. This node tracks all in-flight transactions and queries executed in the cluster. Each transaction or query executed over the cache with TRANSACTIONAL_SNAPSHOT mode works with a current snapshot of data generated for this transaction or query by the coordinator. This snapshot ensures that the transaction works with a consistent database state during its execution period. Note! This atomicity mode is not compatible with the other atomicity modes within the same transaction. If a transaction is executed over multiple caches, all caches must have the same atomicity mode, either TRANSACTIONAL_SNAPSHOT or TRANSACTIONAL."
  },
  "api/Apache.Ignite.Core.Cache.Configuration.MemoryPolicyConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Cache.Configuration.MemoryPolicyConfiguration.html",
    "title": "Class MemoryPolicyConfiguration | Apache Ignite.NET",
    "keywords": "Class MemoryPolicyConfiguration Defines page memory policy configuration. See MemoryPolicies . Obsolete, use DataRegionConfiguration . Inheritance System.Object MemoryPolicyConfiguration Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Configuration Assembly : Apache.Ignite.Core.dll Syntax [Obsolete(\"Use DataRegionConfiguration.\")] public class MemoryPolicyConfiguration Constructors MemoryPolicyConfiguration() Initializes a new instance of the MemoryPolicyConfiguration class. Declaration public MemoryPolicyConfiguration() Fields DefaultEmptyPagesPoolSize The default empty pages pool size. Declaration public const int DefaultEmptyPagesPoolSize = 100 Field Value Type Description System.Int32 DefaultEvictionThreshold The default eviction threshold. Declaration public const double DefaultEvictionThreshold = 0.9 Field Value Type Description System.Double DefaultInitialSize The default initial size. Declaration public const long DefaultInitialSize = 268435456L Field Value Type Description System.Int64 DefaultMaxSize The default maximum size, equals to 20% of total RAM. Declaration public static readonly long DefaultMaxSize Field Value Type Description System.Int64 DefaultRateTimeInterval The default rate time interval. Declaration public static readonly TimeSpan DefaultRateTimeInterval Field Value Type Description System.TimeSpan DefaultSubIntervals The default sub intervals. Declaration public const int DefaultSubIntervals = 5 Field Value Type Description System.Int32 Properties EmptyPagesPoolSize Gets or sets the minimal number of empty pages to be present in reuse lists for this memory policy. This parameter ensures that Ignite will be able to successfully evict old data entries when the size of (key, value) pair is slightly larger than page size / 2. Increase this parameter if cache can contain very big entries (total size of pages in this pool should be enough to contain largest cache entry). Declaration public int EmptyPagesPoolSize { get; set; } Property Value Type Description System.Int32 EvictionThreshold Gets or sets the threshold for memory pages eviction initiation. For instance, if the threshold is 0.9 it means that the page memory will start the eviction only after 90% of the memory region (defined by this policy) is occupied. Declaration public double EvictionThreshold { get; set; } Property Value Type Description System.Double InitialSize Gets or sets initial memory region size defined by this memory policy. When the used memory size exceeds this value, new chunks of memory will be allocated. Declaration public long InitialSize { get; set; } Property Value Type Description System.Int64 MaxSize Sets maximum memory region size defined by this memory policy. The total size should not be less than 10 MB due to internal data structures overhead. Declaration public long MaxSize { get; set; } Property Value Type Description System.Int64 MetricsEnabled Gets or sets a value indicating whether memory metrics should be enabled. Metrics can be retrieved with GetMemoryMetrics() method. Declaration public bool MetricsEnabled { get; set; } Property Value Type Description System.Boolean Name Gets or sets the memory policy name. Defaults to DefaultDefaultMemoryPolicyName . Declaration public string Name { get; set; } Property Value Type Description System.String PageEvictionMode Gets or sets the page eviction mode. If Disabled is used (default) then an out of memory exception will be thrown if the memory region usage, defined by this memory policy, goes beyond MaxSize . Declaration public DataPageEvictionMode PageEvictionMode { get; set; } Property Value Type Description DataPageEvictionMode RateTimeInterval Gets or sets the rate time interval for AllocationRate and EvictionRate monitoring purposes. For instance, after setting the interval to 60 seconds, subsequent calls to AllocationRate will return average allocation rate (pages per second) for the last minute. Declaration public TimeSpan RateTimeInterval { get; set; } Property Value Type Description System.TimeSpan SubIntervals Gets or sets the number of sub intervals to split RateTimeInterval into to calculate AllocationRate and EvictionRate . Bigger value results in more accurate metrics. Declaration public int SubIntervals { get; set; } Property Value Type Description System.Int32 SwapFilePath Gets or sets the the path to the memory-mapped file the memory region defined by this memory policy will be mapped to. Having the path set, allows relying on swapping capabilities of an underlying operating system for the memory region. Null for no swap. Declaration public string SwapFilePath { get; set; } Property Value Type Description System.String"
  },
  "api/Apache.Ignite.Core.Cache.Configuration.QueryIndexType.html": {
    "href": "api/Apache.Ignite.Core.Cache.Configuration.QueryIndexType.html",
    "title": "Enum QueryIndexType | Apache Ignite.NET",
    "keywords": "Enum QueryIndexType Query index type. Namespace : Apache.Ignite.Core.Cache.Configuration Assembly : Apache.Ignite.Core.dll Syntax public enum QueryIndexType Fields Name Description FullText Fulltext index. Geospatial Geo-spatial index. Sorted Sorted index."
  },
  "api/Apache.Ignite.Core.Cache.Eviction.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.ICacheLock.html": {
    "href": "api/Apache.Ignite.Core.Cache.ICacheLock.html",
    "title": "Interface ICacheLock | Apache Ignite.NET",
    "keywords": "Interface ICacheLock Cache locking interface. All members are thread-safe and may be used concurrently from multiple threads. Inherited Members System.IDisposable.Dispose() Namespace : Apache.Ignite.Core.Cache Assembly : Apache.Ignite.Core.dll Syntax public interface ICacheLock : IDisposable Methods Enter() Acquires an exclusive lock. Declaration void Enter() Exit() Releases an exclusive lock on the specified object. System.IDisposable.Dispose() does not call this method and will throw System.Threading.SynchronizationLockException if this lock is acquired. Declaration void Exit() TryEnter() Acquires an exclusive lock only if it is free at the time of invocation. Declaration bool TryEnter() Returns Type Description System.Boolean True if the current thread acquires the lock; otherwise, false. TryEnter(TimeSpan) Attempts, for the specified amount of time, to acquire an exclusive lock. Declaration bool TryEnter(TimeSpan timeout) Parameters Type Name Description System.TimeSpan timeout A System.TimeSpan representing the amount of time to wait for the lock. A value of -1 millisecond specifies an infinite wait. Returns Type Description System.Boolean True if the current thread acquires the lock; otherwise, false."
  },
  "api/Apache.Ignite.Core.Cache.ICacheMetrics.html": {
    "href": "api/Apache.Ignite.Core.Cache.ICacheMetrics.html",
    "title": "Interface ICacheMetrics | Apache Ignite.NET",
    "keywords": "Interface ICacheMetrics Cache metrics used to obtain statistics on cache itself. Namespace : Apache.Ignite.Core.Cache Assembly : Apache.Ignite.Core.dll Syntax public interface ICacheMetrics Properties AverageGetTime The mean time to execute gets. Declaration float AverageGetTime { get; } Property Value Type Description System.Single The time in ms. AveragePutTime The mean time to execute puts. Declaration float AveragePutTime { get; } Property Value Type Description System.Single The time in s. AverageRemoveTime The mean time to execute removes. Declaration float AverageRemoveTime { get; } Property Value Type Description System.Single The time in ms. AverageTxCommitTime The mean time to execute tx commit. Declaration float AverageTxCommitTime { get; } Property Value Type Description System.Single The time in ms. AverageTxRollbackTime The mean time to execute tx rollbacks. Declaration float AverageTxRollbackTime { get; } Property Value Type Description System.Single Number of transaction rollbacks. CacheEvictions The total number of evictions from the cache. An eviction is a removal initiated by the cache itself to free up space. An eviction is not treated as a removal and does not appear in the removal counts. Declaration long CacheEvictions { get; } Property Value Type Description System.Int64 The number of evictions. CacheGets The total number of requests to the cache. This will be equal to the sum of the hits and misses. Declaration long CacheGets { get; } Property Value Type Description System.Int64 The number of gets. CacheHitPercentage This is a measure of cache efficiency. Declaration float CacheHitPercentage { get; } Property Value Type Description System.Single The percentage of successful hits, as a decimal e.g 75. CacheHits The number of get requests that were satisfied by the cache. Declaration long CacheHits { get; } Property Value Type Description System.Int64 The number of hits. CacheMisses A miss is a get request that is not satisfied. Declaration long CacheMisses { get; } Property Value Type Description System.Int64 The number of misses. CacheMissPercentage Returns the percentage of cache accesses that did not find a requested entry in the cache. Declaration float CacheMissPercentage { get; } Property Value Type Description System.Single The percentage of accesses that failed to find anything. CacheName Gets cache name. Declaration string CacheName { get; } Property Value Type Description System.String Cache name. CachePuts The total number of puts to the cache. Declaration long CachePuts { get; } Property Value Type Description System.Int64 The number of puts. CacheRemovals The total number of removals from the cache. This does not include evictions, where the cache itself initiates the removal to make space. Declaration long CacheRemovals { get; } Property Value Type Description System.Int64 The number of removals. CacheSize Gets number of non-null values in the cache. Declaration long CacheSize { get; } Property Value Type Description System.Int64 Number of non-null values in the cache. CacheTxCommits Gets total number of transaction commits. Declaration long CacheTxCommits { get; } Property Value Type Description System.Int64 Number of transaction commits. CacheTxRollbacks Gets total number of transaction rollbacks. Declaration long CacheTxRollbacks { get; } Property Value Type Description System.Int64 Number of transaction rollbacks. DhtEvictQueueCurrentSize Gets current size of evict queue used to batch up evictions. Declaration int DhtEvictQueueCurrentSize { get; } Property Value Type Description System.Int32 Current size of evict queue. EntryProcessorAverageInvocationTime The mean time to execute cache invokes. Declaration float EntryProcessorAverageInvocationTime { get; } Property Value Type Description System.Single The time in µs. EntryProcessorHitPercentage The percentage of invocations on keys, which exist in cache. Declaration float EntryProcessorHitPercentage { get; } Property Value Type Description System.Single The percentage of successful invocation hits. EntryProcessorHits The total number of invocations on keys, which exist in cache. Declaration long EntryProcessorHits { get; } Property Value Type Description System.Int64 The number of cache invocation hits. EntryProcessorInvocations The total number of cache invocations. Declaration long EntryProcessorInvocations { get; } Property Value Type Description System.Int64 The number of cache invocations. EntryProcessorMaxInvocationTime So far, the maximum time to execute cache invokes. Declaration float EntryProcessorMaxInvocationTime { get; } Property Value Type Description System.Single The time in µs. EntryProcessorMinInvocationTime So far, the minimum time to execute cache invokes. Declaration float EntryProcessorMinInvocationTime { get; } Property Value Type Description System.Single The time in µs. EntryProcessorMisses The total number of invocations on keys, which don't exist in cache. Declaration long EntryProcessorMisses { get; } Property Value Type Description System.Int64 The number of cache invocation misses. EntryProcessorMissPercentage The percentage of invocations on keys, which don't exist in cache. Declaration float EntryProcessorMissPercentage { get; } Property Value Type Description System.Single The percentage of invocation misses. EntryProcessorPuts The total number of cache invocations, caused update. Declaration long EntryProcessorPuts { get; } Property Value Type Description System.Int64 The number of invocation updates. EntryProcessorReadOnlyInvocations The total number of cache invocations, caused no updates. Declaration long EntryProcessorReadOnlyInvocations { get; } Property Value Type Description System.Int64 The number of read-only invocations. EntryProcessorRemovals The total number of cache invocations, caused removal. Declaration long EntryProcessorRemovals { get; } Property Value Type Description System.Int64 The number of invocation removals. EstimatedRebalancingFinishTime Gets estimated rebalancing finish time. entries in onheap cache and near entries. Declaration long EstimatedRebalancingFinishTime { get; } Property Value Type Description System.Int64 Estimated rebalancing finish time. EstimatedRebalancingKeys Gets number of estimated keys to rebalance. need to be cleared before actual rebalance start. Declaration long EstimatedRebalancingKeys { get; } Property Value Type Description System.Int64 Number of estimated keys to rebalance. HeapEntriesCount Gets the number of cache entries in heap memory, including entries held by active transactions, entries in onheap cache and near entries. Declaration long HeapEntriesCount { get; } Property Value Type Description System.Int64 Number of entries in heap memory. IsEmpty Returns true if this cache is empty. Declaration bool IsEmpty { get; } Property Value Type Description System.Boolean True if this cache is empty. IsManagementEnabled Checks whether management is enabled on this cache. The default value is false. Declaration bool IsManagementEnabled { get; } Property Value Type Description System.Boolean True if management is enabled. IsReadThrough Determines if a cache should operate in read-through mode. The default value is false Declaration bool IsReadThrough { get; } Property Value Type Description System.Boolean True when a cache is in \"read-through\" mode. IsStatisticsEnabled Checks whether statistics collection is enabled in this cache. The default value is false. Declaration bool IsStatisticsEnabled { get; } Property Value Type Description System.Boolean True if statistics collection is enabled. IsStoreByValue Whether storeByValue true or storeByReference false. When true, both keys and values are stored by value. When false, both keys and values are stored by reference. Caches stored by reference are capable of mutation by any threads holding the reference. The effects are: if the key is mutated, then the key may not be retrievable or removable if the value is mutated, then all threads in the JVM can potentially observe those mutations, subject to the normal Java Memory Model rules. Storage by reference only applies to the local heap. If an entry is moved off heap it will need to be transformed into a representation. Any mutations that occur after transformation may not be reflected in the cache. When a cache is storeByValue, any mutation to the key or value does not affect the key of value stored in the cache. The default value is true. Declaration bool IsStoreByValue { get; } Property Value Type Description System.Boolean True if the cache is store by value. IsValidForReading Checks whether cache topology is valid for read operations. Declaration bool IsValidForReading { get; } Property Value Type Description System.Boolean True when cache topology is valid for reading. IsValidForWriting Checks whether cache topology is valid for write operations. Declaration bool IsValidForWriting { get; } Property Value Type Description System.Boolean True when cache topology is valid for writing. IsWriteBehindEnabled Returns true if write-behind is enabled. Declaration bool IsWriteBehindEnabled { get; } Property Value Type Description System.Boolean True if write-behind is enabled. IsWriteThrough Determines if a cache should operate in \"write-through\" mode. Will appropriately cause the configured CacheWriter to be invoked. The default value is false Declaration bool IsWriteThrough { get; } Property Value Type Description System.Boolean True when a cache is in \"write-through\" mode. KeySize Gets number of keys in the cache, possibly with null values. Declaration int KeySize { get; } Property Value Type Description System.Int32 Number of keys in the cache. KeysToRebalanceLeft Gets estimated number of keys to be rebalanced on current node. Declaration long KeysToRebalanceLeft { get; } Property Value Type Description System.Int64 Estimated number of keys to be rebalanced on current node. KeyType Determines the required type of keys for this cache, if any. Declaration string KeyType { get; } Property Value Type Description System.String The fully qualified class name of the key type, or \"java.lang.Object\" if the type is undefined. OffHeapAllocatedSize Gets memory size allocated in off-heap. Declaration long OffHeapAllocatedSize { get; } Property Value Type Description System.Int64 Memory size allocated in off-heap. OffHeapBackupEntriesCount Gets number of backup entries stored in off-heap memory. Declaration long OffHeapBackupEntriesCount { get; } Property Value Type Description System.Int64 Number of backup entries stored in off-heap memory. OffHeapEntriesCount Gets number of entries stored in off-heap memory. Declaration long OffHeapEntriesCount { get; } Property Value Type Description System.Int64 Number of entries stored in off-heap memory. OffHeapEvictions The total number of evictions from the off-heap memory. Declaration long OffHeapEvictions { get; } Property Value Type Description System.Int64 The number of evictions. OffHeapGets The total number of get requests to the off-heap memory. Declaration long OffHeapGets { get; } Property Value Type Description System.Int64 The number of gets. OffHeapHitPercentage Gets the percentage of hits on off-heap memory. Declaration float OffHeapHitPercentage { get; } Property Value Type Description System.Single The percentage of hits on off-heap memory. OffHeapHits The number of get requests that were satisfied by the off-heap memory. Declaration long OffHeapHits { get; } Property Value Type Description System.Int64 The off-heap hits number. OffHeapMisses A miss is a get request that is not satisfied by off-heap memory. Declaration long OffHeapMisses { get; } Property Value Type Description System.Int64 The off-heap misses number. OffHeapMissPercentage Gets the percentage of misses on off-heap memory. Declaration float OffHeapMissPercentage { get; } Property Value Type Description System.Single The percentage of misses on off-heap memory. OffHeapPrimaryEntriesCount Gets the number of primary entries stored in off-heap memory. Declaration long OffHeapPrimaryEntriesCount { get; } Property Value Type Description System.Int64 Number of primary entries stored in off-heap memory. OffHeapPuts The total number of put requests to the off-heap memory. Declaration long OffHeapPuts { get; } Property Value Type Description System.Int64 The number of puts. OffHeapRemovals The total number of removals from the off-heap memory. This does not include evictions. Declaration long OffHeapRemovals { get; } Property Value Type Description System.Int64 The number of removals. RebalanceClearingPartitionsLeft Gets number of partitions. need to be cleared before actual rebalance start. Declaration long RebalanceClearingPartitionsLeft { get; } Property Value Type Description System.Int64 Number of clearing partitions for rebalance. RebalancedKeys Gets number of already rebalanced keys. need to be cleared before actual rebalance start. Declaration long RebalancedKeys { get; } Property Value Type Description System.Int64 Number of already rebalanced keys. RebalancingBytesRate Gets estimated rebalancing speed in bytes. Declaration long RebalancingBytesRate { get; } Property Value Type Description System.Int64 Estimated rebalancing speed in bytes. RebalancingKeysRate Gets estimated rebalancing speed in keys. Declaration long RebalancingKeysRate { get; } Property Value Type Description System.Int64 Estimated rebalancing speed in keys. RebalancingPartitionsCount Gets number of currently rebalancing partitions on current node. Declaration int RebalancingPartitionsCount { get; } Property Value Type Description System.Int32 Number of currently rebalancing partitions on current node. RebalancingStartTime Gets rebalancing start time. entries in onheap cache and near entries. Declaration long RebalancingStartTime { get; } Property Value Type Description System.Int64 Rebalancing start time. Size Gets number of non-null values in the cache. Declaration int Size { get; } Property Value Type Description System.Int32 Number of non-null values in the cache. TotalPartitionsCount Gets total number of partitions on current node. Declaration int TotalPartitionsCount { get; } Property Value Type Description System.Int32 Total number of partitions on current node. TxCommitQueueSize Gets committed transaction queue size. Declaration int TxCommitQueueSize { get; } Property Value Type Description System.Int32 Committed transaction queue size. TxCommittedVersionsSize Gets number of cached committed transaction IDs. Declaration int TxCommittedVersionsSize { get; } Property Value Type Description System.Int32 Number of cached committed transaction IDs. TxDhtCommitQueueSize Gets committed DHT transaction queue size. Declaration int TxDhtCommitQueueSize { get; } Property Value Type Description System.Int32 Committed DHT transaction queue size. TxDhtCommittedVersionsSize Gets number of cached committed DHT transaction IDs. Declaration int TxDhtCommittedVersionsSize { get; } Property Value Type Description System.Int32 Number of cached committed DHT transaction IDs. TxDhtPrepareQueueSize Gets prepared DHT transaction queue size. Declaration int TxDhtPrepareQueueSize { get; } Property Value Type Description System.Int32 Prepared DHT transaction queue size. TxDhtRolledbackVersionsSize Gets number of cached rolled back DHT transaction IDs. Declaration int TxDhtRolledbackVersionsSize { get; } Property Value Type Description System.Int32 Number of cached rolled back DHT transaction IDs. TxDhtStartVersionCountsSize Gets DHT start version counts map size. Declaration int TxDhtStartVersionCountsSize { get; } Property Value Type Description System.Int32 DHT start version counts map size. TxDhtThreadMapSize Gets transaction DHT per-thread map size. Declaration int TxDhtThreadMapSize { get; } Property Value Type Description System.Int32 DHT thread map size. TxDhtXidMapSize Gets transaction DHT per-Xid map size. Declaration int TxDhtXidMapSize { get; } Property Value Type Description System.Int32 Transaction DHT per-Xid map size. TxPrepareQueueSize Gets prepared transaction queue size. Declaration int TxPrepareQueueSize { get; } Property Value Type Description System.Int32 Prepared transaction queue size. TxRolledbackVersionsSize Gets number of cached rolled back transaction IDs. Declaration int TxRolledbackVersionsSize { get; } Property Value Type Description System.Int32 Number of cached rolled back transaction IDs. TxStartVersionCountsSize Gets start version counts map size. Declaration int TxStartVersionCountsSize { get; } Property Value Type Description System.Int32 Start version counts map size. TxThreadMapSize Gets transaction per-thread map size. Declaration int TxThreadMapSize { get; } Property Value Type Description System.Int32 Thread map size. TxXidMapSize Gets transaction per-Xid map size. Declaration int TxXidMapSize { get; } Property Value Type Description System.Int32 Transaction per-Xid map size. ValueType Determines the required type of values for this cache, if any. Declaration string ValueType { get; } Property Value Type Description System.String The fully qualified class name of the value type, or \"java.lang.Object\" if the type is undefined. WriteBehindBufferSize Gets count of entries that were processed by the write-behind store and have not been flushed to the underlying store yet. Declaration int WriteBehindBufferSize { get; } Property Value Type Description System.Int32 Total count of entries in cache store internal buffer. WriteBehindCriticalOverflowCount Gets count of write buffer overflow events in progress at the moment. Each overflow event causes the ongoing flush operation to be performed synchronously. Declaration int WriteBehindCriticalOverflowCount { get; } Property Value Type Description System.Int32 Count of cache overflow events since start. WriteBehindErrorRetryCount Gets count of cache entries that are in a store-retry state. An entry is assigned a store-retry state when underlying store failed due some reason and cache has enough space to retain this entry till the next try. Declaration int WriteBehindErrorRetryCount { get; } Property Value Type Description System.Int32 Count of entries in store-retry state. WriteBehindFlushFrequency Gets the cache flush frequency. All pending operations on the underlying store will be performed within time interval not less then this value. If this value is 0, then flush is performed only when buffer size exceeds flush size. Declaration long WriteBehindFlushFrequency { get; } Property Value Type Description System.Int64 Flush frequency in milliseconds. WriteBehindFlushSize Gets the maximum size of the write-behind buffer. When the count of unique keys in write buffer exceeds this value, the buffer is scheduled for write to the underlying store. If this value is 0, then flush is performed only on time-elapsing basis. Declaration int WriteBehindFlushSize { get; } Property Value Type Description System.Int32 Buffer size that triggers flush procedure. WriteBehindFlushThreadCount Gets the number of flush threads that will perform store update operations. Declaration int WriteBehindFlushThreadCount { get; } Property Value Type Description System.Int32 Count of worker threads. WriteBehindStoreBatchSize Gets the maximum count of similar (put or remove) operations that can be grouped to a single batch. Declaration int WriteBehindStoreBatchSize { get; } Property Value Type Description System.Int32 Maximum size of batch. WriteBehindTotalCriticalOverflowCount Gets count of write buffer overflow events since initialization. Each overflow event causes the ongoing flush operation to be performed synchronously. Declaration int WriteBehindTotalCriticalOverflowCount { get; } Property Value Type Description System.Int32 Count of cache overflow events since start."
  },
  "api/Apache.Ignite.Core.Cache.Query.TextQuery.html": {
    "href": "api/Apache.Ignite.Core.Cache.Query.TextQuery.html",
    "title": "Class TextQuery | Apache Ignite.NET",
    "keywords": "Class TextQuery Text query. Inheritance System.Object QueryBase TextQuery Inherited Members QueryBase.DefaultPageSize QueryBase.Local QueryBase.PageSize System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Query Assembly : Apache.Ignite.Core.dll Syntax public class TextQuery : QueryBase, IQueryBaseInternal Constructors TextQuery(String, String) Constructor. Declaration public TextQuery(string queryType, string text) Parameters Type Name Description System.String queryType Type. System.String text Text. TextQuery(String, String, Boolean) Constructor. Declaration public TextQuery(string queryType, string text, bool local) Parameters Type Name Description System.String queryType Type. System.String text Text. System.Boolean local Whether query should be executed locally. TextQuery(Type, String) Constructor. Declaration public TextQuery(Type queryType, string text) Parameters Type Name Description System.Type queryType Type. System.String text Text. TextQuery(Type, String, Boolean) Constructor. Declaration public TextQuery(Type queryType, string text, bool local) Parameters Type Name Description System.Type queryType Type. System.String text Text. System.Boolean local Whether query should be executed locally. Properties QueryType Type. Declaration public string QueryType { get; set; } Property Value Type Description System.String Text Text. Declaration public string Text { get; set; } Property Value Type Description System.String"
  },
  "api/Apache.Ignite.Core.Cache.Query.html": {
    "href": "api/Apache.Ignite.Core.Cache.Query.html",
    "title": "Namespace Apache.Ignite.Core.Cache.Query | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Cache.Query Classes QueryBase Base class for all Ignite cache entry queries. ScanQuery<TK, TV> Scan query over cache entries. Will accept all the entries if no predicate was set. SqlFieldsQuery SQL fields query. SqlQuery SQL Query. TextQuery Text query. Interfaces IFieldsQueryCursor Fields query cursor. IQueryCursor<T> Query result cursor. Can be processed either in iterative mode, or by taking all entries using GetAll() method. Note that you get enumerator or call GetAll() method only once during cursor lifetime. Any further attempts to get enumerator or all entries will result in exception. IQueryCursorField Query field descriptor. This descriptor is used to provide metadata about fields returned in query result."
  },
  "api/Apache.Ignite.Core.Client.Compute.html": {
    "href": "api/Apache.Ignite.Core.Client.Compute.html",
    "title": "Namespace Apache.Ignite.Core.Client.Compute | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Client.Compute Interfaces IComputeClient Client Compute API. See GetCompute() and GetCompute() ."
  },
  "api/Apache.Ignite.Core.Client.Datastream.DataStreamerClientOptions-2.html": {
    "href": "api/Apache.Ignite.Core.Client.Datastream.DataStreamerClientOptions-2.html",
    "title": "Class DataStreamerClientOptions<TK, TV> | Apache Ignite.NET",
    "keywords": "Class DataStreamerClientOptions<TK, TV> Thin client data streamer extended options. See also IDataStreamerClient<TK, TV> , GetDataStreamer<TK, TV>(String) . Inheritance System.Object DataStreamerClientOptions DataStreamerClientOptions<TK, TV> Inherited Members DataStreamerClientOptions.DefaultPerNodeBufferSize DataStreamerClientOptions.DefaultPerNodeParallelOperations DataStreamerClientOptions.ReceiverKeepBinary DataStreamerClientOptions.AllowOverwrite DataStreamerClientOptions.SkipStore DataStreamerClientOptions.PerNodeBufferSize DataStreamerClientOptions.PerNodeParallelOperations DataStreamerClientOptions.AutoFlushInterval 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.Datastream Assembly : Apache.Ignite.Core.dll Syntax public class DataStreamerClientOptions<TK, TV> : DataStreamerClientOptions Type Parameters Name Description TK TV Constructors DataStreamerClientOptions() Initializes a new instance of DataStreamerClientOptions<TK, TV> . Declaration public DataStreamerClientOptions() DataStreamerClientOptions(DataStreamerClientOptions) Initializes a new instance of DataStreamerClientOptions<TK, TV> . Declaration public DataStreamerClientOptions(DataStreamerClientOptions options) Parameters Type Name Description DataStreamerClientOptions options Options to copy from. DataStreamerClientOptions(DataStreamerClientOptions<TK, TV>) Initializes a new instance of DataStreamerClientOptions<TK, TV> . Declaration public DataStreamerClientOptions(DataStreamerClientOptions<TK, TV> options) Parameters Type Name Description DataStreamerClientOptions <TK, TV> options Options to copy from. Properties Receiver Gets or sets a custom stream receiver. Stream receiver is invoked for every cache entry on the primary server node for that entry. Declaration public IStreamReceiver<TK, TV> Receiver { get; set; } Property Value Type Description IStreamReceiver <TK, TV>"
  },
  "api/Apache.Ignite.Core.Client.SslStreamFactory.html": {
    "href": "api/Apache.Ignite.Core.Client.SslStreamFactory.html",
    "title": "Class SslStreamFactory | Apache Ignite.NET",
    "keywords": "Class SslStreamFactory Predefined SSL stream factory, loads certificate from specified file. Inheritance System.Object SslStreamFactory Implements ISslStreamFactory Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Client Assembly : Apache.Ignite.Core.dll Syntax public class SslStreamFactory : ISslStreamFactory Constructors SslStreamFactory() Initializes a new instance of the SslStreamFactory class. Declaration public SslStreamFactory() Fields DefaultSslProtocols Default SSL protocols. Declaration public const SslProtocols DefaultSslProtocols = SslProtocols.Tls Field Value Type Description System.Security.Authentication.SslProtocols Properties CertificatePassword Gets or sets the certificate file password. Declaration public string CertificatePassword { get; set; } Property Value Type Description System.String CertificatePath Gets or sets the certificate file (pfx) path. Java certificates can be converted with keytool : keytool -importkeystore -srckeystore thekeystore.jks -srcstoretype JKS -destkeystore thekeystore.pfx -deststoretype PKCS12 Declaration public string CertificatePath { get; set; } Property Value Type Description System.String CheckCertificateRevocation Gets or sets a value indicating whether the certificate revocation list is checked during authentication. Declaration public bool CheckCertificateRevocation { get; set; } Property Value Type Description System.Boolean SkipServerCertificateValidation Gets or sets a value indicating whether to ignore invalid remote (server) certificates. This may be useful for testing with self-signed certificates. Declaration public bool SkipServerCertificateValidation { get; set; } Property Value Type Description System.Boolean SslProtocols Gets or sets the SSL protocols. Declaration public SslProtocols SslProtocols { get; set; } Property Value Type Description System.Security.Authentication.SslProtocols Methods Create(Stream, String) Declaration public SslStream Create(Stream stream, string targetHost) Parameters Type Name Description System.IO.Stream stream System.String targetHost Returns Type Description System.Net.Security.SslStream Implements ISslStreamFactory"
  },
  "api/Apache.Ignite.Core.Client.Transactions.ITransactionClient.html": {
    "href": "api/Apache.Ignite.Core.Client.Transactions.ITransactionClient.html",
    "title": "Interface ITransactionClient | Apache Ignite.NET",
    "keywords": "Interface ITransactionClient Thin client transaction. Inherited Members System.IDisposable.Dispose() Namespace : Apache.Ignite.Core.Client.Transactions Assembly : Apache.Ignite.Core.dll Syntax public interface ITransactionClient : IDisposable Properties Concurrency Gets the transaction concurrency mode. Declaration TransactionConcurrency Concurrency { get; } Property Value Type Description TransactionConcurrency Isolation Gets the transaction isolation level. Declaration TransactionIsolation Isolation { get; } Property Value Type Description TransactionIsolation Label Gets the transaction label. Declaration string Label { get; } Property Value Type Description System.String Timeout Gets the 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 Commit() Commits this transaction. Declaration void Commit() Rollback() Rolls back this transaction. Declaration void Rollback()"
  },
  "api/Apache.Ignite.Core.Common.IgniteExperimentalAttribute.html": {
    "href": "api/Apache.Ignite.Core.Common.IgniteExperimentalAttribute.html",
    "title": "Class IgniteExperimentalAttribute | Apache Ignite.NET",
    "keywords": "Class IgniteExperimentalAttribute This attribute marks API elements (such as interfaces and methods) as experimental meaning that the API is not finalized yet and may be changed or replaced in future Ignite releases. Such APIs are exposed so that users can make use of a feature before the API has been stabilized. The expectation is that an API element should be \"eventually\" stabilized. Incompatible changes are allowed for such APIs: API may be removed, changed or stabilized in future Ignite releases (both minor and maintenance). Inheritance System.Object System.Attribute IgniteExperimentalAttribute Implements System.Runtime.InteropServices._Attribute Inherited Members System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Boolean) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Boolean) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Module) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.IsDefined(System.Reflection.Module, System.Type) System.Attribute.IsDefined(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Boolean) System.Attribute.IsDefined(System.Reflection.Assembly, System.Type) System.Attribute.IsDefined(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.Equals(System.Object) System.Attribute.GetHashCode() System.Attribute.Match(System.Object) System.Attribute.IsDefaultAttribute() System.Attribute.System.Runtime.InteropServices._Attribute.GetTypeInfoCount(System.UInt32) System.Attribute.System.Runtime.InteropServices._Attribute.GetTypeInfo(System.UInt32, System.UInt32, System.IntPtr) System.Attribute.System.Runtime.InteropServices._Attribute.GetIDsOfNames(System.Guid, System.IntPtr, System.UInt32, System.UInt32, System.IntPtr) System.Attribute.System.Runtime.InteropServices._Attribute.Invoke(System.UInt32, System.Guid, System.UInt32, System.Int16, System.IntPtr, System.IntPtr, System.IntPtr, System.IntPtr) System.Attribute.TypeId System.Object.ToString() System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Common Assembly : Apache.Ignite.Core.dll Syntax [AttributeUsage(AttributeTargets.Class | AttributeTargets.Enum | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Field)] public sealed class IgniteExperimentalAttribute : Attribute, _Attribute Implements System.Runtime.InteropServices._Attribute"
  },
  "api/Apache.Ignite.Core.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.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.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.Configuration.WalMode.html": {
    "href": "api/Apache.Ignite.Core.Configuration.WalMode.html",
    "title": "Enum WalMode | Apache Ignite.NET",
    "keywords": "Enum WalMode Write Ahead Log mode. Namespace : Apache.Ignite.Core.Configuration Assembly : Apache.Ignite.Core.dll Syntax public enum WalMode Fields Name Description Background Background mode. Does not force application buffer flush. Data may be lost in case of process crash. Default Default mode: full-sync disk writes. These writes survive power loss scenarios. Fsync FSYNC mode: full-sync disk writes. These writes survive power loss scenarios. LogOnly Log only mode: flushes application buffers. These writes survive process crash. None WAL disabled."
  },
  "api/Apache.Ignite.Core.Configuration.html": {
    "href": "api/Apache.Ignite.Core.Configuration.html",
    "title": "Namespace Apache.Ignite.Core.Configuration | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Configuration Classes ClientConnectorConfiguration Client connector configuration (ODBC, JDBC, Thin Client). DataRegionConfiguration Defines custom data region configuration for Apache Ignite page memory (see DataStorageConfiguration ). For each configured data region Apache Ignite instantiates respective memory regions with different parameters like maximum size, eviction policy, swapping options, etc. An Apache Ignite cache can be mapped to a particular region using DataRegionName method. DataStorageConfiguration Data storage configuration for Ignite page memory. The page memory is a manageable off-heap based memory architecture that divides all expandable data regions into pages of fixed size. An individual page can store one or many cache key-value entries that allows reusing the memory in the most efficient way and avoid memory fragmentation issues. By default, the page memory allocates a single expandable data region. All the caches that will be configured in an application will be mapped to this data region by default, thus, all the cache data will reside in that data region. ExecutorConfiguration Custom thread pool configuration for compute tasks. See WithExecutor(String) . LockConfiguration IIgniteLock configuration. SqlConnectorConfiguration SQL connector configuration (for ODBC and JDBC). ThinClientConfiguration Server-side thin client specific configuration. Enums AsyncContinuationExecutor Defines async continuations behavior. CheckpointWriteOrder Defines checkpoint pages order on disk. DataPageEvictionMode Memory page eviction mode. Only data pages, that store key-value entries, are eligible for eviction. The other types of pages, like index or system pages, are not evictable. DiskPageCompression Disk page compression options. WalMode Write Ahead Log mode."
  },
  "api/Apache.Ignite.Core.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.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."
  }
}