{
  "api/Apache.Ignite.Core.Lifecycle.html": {
    "href": "api/Apache.Ignite.Core.Lifecycle.html",
    "title": "Namespace Apache.Ignite.Core.Lifecycle | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Lifecycle Classes ClientReconnectEventArgs Contains client reconnect event data. Interfaces ILifecycleHandler Handles lifecycle events defined in LifecycleEventType . Use this interface whenever you need to plug some custom logic before or after Ignite startup and stopping routines. There are four events you can react to: BeforeNodeStartInvoked before Ignite startup routine is initiated. Note that Ignite is not available during this event, therefore if you injected an Ignite instance via InstanceResourceAttribute attribute, you cannot use it yet. AfterNodeStartInvoked right after Ignite has started. At this point, if you injected an Ignite instance via InstanceResourceAttribute attribute, you can start using it. BeforeNodeStopInvoked right before Ignite stop routine is initiated. Ignite is still available at this stage, so if you injected an Ignite instance via InstanceResourceAttribute attribute, you can use it. AfterNodeStopInvoked right after Ignite has stopped. Note that Ignite is not available during this event. Enums LifecycleEventType Ignite lifecycle event types. These events are used to notify lifecycle beans about changes in Ignite lifecycle state. For more information and detailed examples refer to ILifecycleHandler documentation."
  },
  "api/Apache.Ignite.Core.Log.CategoryLogger.html": {
    "href": "api/Apache.Ignite.Core.Log.CategoryLogger.html",
    "title": "Class CategoryLogger | Apache Ignite.NET",
    "keywords": "Class CategoryLogger Wrapping logger with a predefined category. When Log(LogLevel, String, Object[], IFormatProvider, String, String, Exception) method is called, and category parameter is null, predefined category will be used. Inheritance System.Object CategoryLogger Implements ILogger Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Log Assembly : Apache.Ignite.Core.dll Syntax public class CategoryLogger : ILogger Constructors CategoryLogger(ILogger, String) Initializes a new instance of the CategoryLogger class. Declaration public CategoryLogger(ILogger logger, string category) Parameters Type Name Description ILogger logger The logger to wrap. System.String category The category. Methods IsEnabled(LogLevel) Determines whether the specified log level is enabled. Declaration public bool IsEnabled(LogLevel level) Parameters Type Name Description LogLevel level The level. Returns Type Description System.Boolean Value indicating whether the specified log level is enabled Log(LogLevel, String, Object[], IFormatProvider, String, String, Exception) Logs the specified message. Declaration public void Log(LogLevel level, string message, object[] args, IFormatProvider formatProvider, string category, string nativeErrorInfo, Exception ex) Parameters Type Name Description LogLevel level The level. System.String message The message. System.Object [] args The arguments to format message . Can be null (formatting will not occur). System.IFormatProvider formatProvider The format provider. Can be null if args is null. System.String category The logging category name. System.String nativeErrorInfo The native error information. System.Exception ex The exception. Can be null. Implements ILogger Extension Methods LoggerExtensions.Trace(ILogger, String) LoggerExtensions.Trace(ILogger, String, Object[]) LoggerExtensions.Trace(ILogger, Exception, String) LoggerExtensions.Trace(ILogger, Exception, String, Object[]) LoggerExtensions.Debug(ILogger, String) LoggerExtensions.Debug(ILogger, String, Object[]) LoggerExtensions.Debug(ILogger, Exception, String) LoggerExtensions.Debug(ILogger, Exception, String, Object[]) LoggerExtensions.Info(ILogger, String) LoggerExtensions.Info(ILogger, String, Object[]) LoggerExtensions.Info(ILogger, Exception, String) LoggerExtensions.Info(ILogger, Exception, String, Object[]) LoggerExtensions.Warn(ILogger, String) LoggerExtensions.Warn(ILogger, String, Object[]) LoggerExtensions.Warn(ILogger, Exception, String) LoggerExtensions.Warn(ILogger, Exception, String, Object[]) LoggerExtensions.Error(ILogger, String) LoggerExtensions.Error(ILogger, String, Object[]) LoggerExtensions.Error(ILogger, Exception, String) LoggerExtensions.Error(ILogger, Exception, String, Object[]) LoggerExtensions.Log(ILogger, LogLevel, String) LoggerExtensions.Log(ILogger, LogLevel, String, Object[]) LoggerExtensions.Log(ILogger, LogLevel, Exception, String) LoggerExtensions.Log(ILogger, LogLevel, Exception, String, Object[]) LoggerExtensions.GetLogger(ILogger, String)"
  },
  "api/Apache.Ignite.Core.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.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.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.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.Transactions.TransactionConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Transactions.TransactionConfiguration.html",
    "title": "Class TransactionConfiguration | Apache Ignite.NET",
    "keywords": "Class TransactionConfiguration Transactions configuration. Inheritance System.Object TransactionConfiguration Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Transactions Assembly : Apache.Ignite.Core.dll Syntax public class TransactionConfiguration Constructors TransactionConfiguration() Initializes a new instance of the TransactionConfiguration class. Declaration public TransactionConfiguration() Fields DefaultDefaultTimeout The default value for DefaultTransactionIsolation property. Declaration public static readonly TimeSpan DefaultDefaultTimeout Field Value Type Description System.TimeSpan DefaultDefaultTransactionConcurrency The default value for DefaultTransactionConcurrency property. Declaration public const TransactionConcurrency DefaultDefaultTransactionConcurrency = TransactionConcurrency.Pessimistic Field Value Type Description TransactionConcurrency DefaultDefaultTransactionIsolation The default value for DefaultTransactionIsolation property. Declaration public const TransactionIsolation DefaultDefaultTransactionIsolation = TransactionIsolation.RepeatableRead Field Value Type Description TransactionIsolation DefaultPessimisticTransactionLogLinger The default value for PessimisticTransactionLogLinger property. Declaration public static readonly TimeSpan DefaultPessimisticTransactionLogLinger Field Value Type Description System.TimeSpan DefaultPessimisticTransactionLogSize The default value for PessimisticTransactionLogSize property. Declaration public const int DefaultPessimisticTransactionLogSize = 0 Field Value Type Description System.Int32 Properties DefaultTimeout Gets or sets the cache transaction timeout to use when one is not explicitly specified. System.TimeSpan.Zero for infinite timeout. Declaration public TimeSpan DefaultTimeout { get; set; } Property Value Type Description System.TimeSpan 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.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.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.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.QueryAlias.html": {
    "href": "api/Apache.Ignite.Core.Cache.Configuration.QueryAlias.html",
    "title": "Class QueryAlias | Apache Ignite.NET",
    "keywords": "Class QueryAlias Represents cache query configuration alias. Inheritance System.Object QueryAlias Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Configuration Assembly : Apache.Ignite.Core.dll Syntax public class QueryAlias Constructors QueryAlias() Initializes a new instance of the QueryAlias class. Declaration public QueryAlias() QueryAlias(String, String) Initializes a new instance of the QueryAlias class. Declaration public QueryAlias(string fullName, string alias) Parameters Type Name Description System.String fullName The full name. System.String alias The alias. Properties Alias Gets or sets the alias for the full name. Declaration public string Alias { get; set; } Property Value Type Description System.String FullName Gets or sets the full name of the query field. Declaration public string FullName { get; set; } Property Value Type Description System.String"
  },
  "api/Apache.Ignite.Core.Cache.Configuration.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.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 IsKeepBinary Gets a value indicating whether to keep values in binary form. Declaration bool IsKeepBinary { get; } Property Value Type Description System.Boolean Item[TK] Gets or sets a cache value with the specified key. Shortcut to Get(TK) and Put(TK, TV) Declaration TV this[TK key] { get; set; } Parameters Type Name Description TK key Key. Property Value Type Description TV Cache value with the specified key. Exceptions Type Condition System.Collections.Generic.KeyNotFoundException If the key is not present in the cache. Name Name of this cache ( null for default cache). Declaration string Name { get; } Property Value Type Description System.String Methods Clear() Clears the contents of the cache, without notifying listeners or CacheWriters. Declaration void Clear() Clear(TK) Clear entry from the cache and swap storage, without notifying listeners or CacheWriters. Entry is cleared only if it is not currently locked, and is not participating in a transaction. Declaration void Clear(TK key) Parameters Type Name Description TK key Key to clear. ClearAll(IEnumerable<TK>) Clear entries from the cache and swap storage, without notifying listeners or CacheWriters. Entry is cleared only if it is not currently locked, and is not participating in a transaction. Declaration void ClearAll(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys to clear. ClearAllAsync(IEnumerable<TK>) Clear entries from the cache and swap storage, without notifying listeners or CacheWriters. Entry is cleared only if it is not currently locked, and is not participating in a transaction. Declaration Task ClearAllAsync(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys to clear. Returns Type Description System.Threading.Tasks.Task ClearAsync() Clears the contents of the cache, without notifying listeners or CacheWriters. Declaration Task ClearAsync() Returns Type Description System.Threading.Tasks.Task ClearAsync(TK) Clear entry from the cache and swap storage, without notifying listeners or CacheWriters. Entry is cleared only if it is not currently locked, and is not participating in a transaction. Declaration Task ClearAsync(TK key) Parameters Type Name Description TK key Key to clear. Returns Type Description System.Threading.Tasks.Task ContainsKey(TK) Check if cache contains mapping for this key. Declaration bool ContainsKey(TK key) Parameters Type Name Description TK key Key. Returns Type Description System.Boolean True if cache contains mapping for this key. ContainsKeyAsync(TK) Check if cache contains mapping for this key. Declaration Task<bool> ContainsKeyAsync(TK key) Parameters Type Name Description TK key Key. Returns Type Description System.Threading.Tasks.Task < System.Boolean > True if cache contains mapping for this key. ContainsKeys(IEnumerable<TK>) Check if cache contains mapping for these keys. Declaration bool ContainsKeys(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys. Returns Type Description System.Boolean True if cache contains mapping for all these keys. ContainsKeysAsync(IEnumerable<TK>) Check if cache contains mapping for these keys. Declaration Task<bool> ContainsKeysAsync(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys. Returns Type Description System.Threading.Tasks.Task < System.Boolean > True if cache contains mapping for all these keys. Get(TK) Retrieves value mapped to the specified key from cache. If the value is not present in cache, then it will be looked up from swap storage. If it's not present in swap, or if swap is disable, and if read-through is allowed, value will be loaded from persistent store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration TV Get(TK key) Parameters Type Name Description TK key Key. Returns Type Description TV Value. Exceptions Type Condition System.Collections.Generic.KeyNotFoundException If the key is not present in the cache. GetAll(IEnumerable<TK>) Retrieves values mapped to the specified keys from cache. If some value is not present in cache, then it will be looked up from swap storage. If it's not present in swap, or if swap is disabled, and if read-through is allowed, value will be loaded from persistent store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration ICollection<ICacheEntry<TK, TV>> GetAll(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys. Returns Type Description System.Collections.Generic.ICollection < ICacheEntry <TK, TV>> Map of key-value pairs. GetAllAsync(IEnumerable<TK>) Retrieves values mapped to the specified keys from cache. If some value is not present in cache, then it will be looked up from swap storage. If it's not present in swap, or if swap is disabled, and if read-through is allowed, value will be loaded from persistent store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration Task<ICollection<ICacheEntry<TK, TV>>> GetAllAsync(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys. Returns Type Description System.Threading.Tasks.Task < System.Collections.Generic.ICollection < ICacheEntry <TK, TV>>> Map of key-value pairs. GetAndPut(TK, TV) Associates the specified value with the specified key in this cache, returning an existing value if one existed. Declaration CacheResult<TV> GetAndPut(TK key, TV val) Parameters Type Name Description TK key Key with which the specified value is to be associated. TV val Value to be associated with the specified key. Returns Type Description CacheResult <TV> The value associated with the key at the start of the operation. GetAndPutAsync(TK, TV) Associates the specified value with the specified key in this cache, returning an existing value if one existed. Declaration Task<CacheResult<TV>> GetAndPutAsync(TK key, TV val) Parameters Type Name Description TK key Key with which the specified value is to be associated. TV val Value to be associated with the specified key. Returns Type Description System.Threading.Tasks.Task < CacheResult <TV>> The value associated with the key at the start of the operation. GetAndPutIfAbsent(TK, TV) Stores given key-value pair in cache only if cache had no previous mapping for it. If cache previously contained value for the given key, then this value is returned. In case of PARTITIONED or REPLICATED caches, the value will be loaded from the primary node, which in its turn may load the value from the swap storage, and consecutively, if it's not in swap, from the underlying persistent storage. If the returned value is not needed, method putxIfAbsent() should be used instead of this one to avoid the overhead associated with returning of the previous value. If write-through is enabled, the stored value will be persisted to store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration CacheResult<TV> GetAndPutIfAbsent(TK key, TV val) Parameters Type Name Description TK key Key to store in cache. TV val Value to be associated with the given key. Returns Type Description CacheResult <TV> Previously contained value regardless of whether put happened or not. GetAndPutIfAbsentAsync(TK, TV) Stores given key-value pair in cache only if cache had no previous mapping for it. If cache previously contained value for the given key, then this value is returned. In case of PARTITIONED or REPLICATED caches, the value will be loaded from the primary node, which in its turn may load the value from the swap storage, and consecutively, if it's not in swap, from the underlying persistent storage. If the returned value is not needed, method putxIfAbsent() should be used instead of this one to avoid the overhead associated with returning of the previous value. If write-through is enabled, the stored value will be persisted to store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration Task<CacheResult<TV>> GetAndPutIfAbsentAsync(TK key, TV val) Parameters Type Name Description TK key Key to store in cache. TV val Value to be associated with the given key. Returns Type Description System.Threading.Tasks.Task < CacheResult <TV>> Previously contained value regardless of whether put happened or not. GetAndRemove(TK) Atomically removes the entry for a key only if currently mapped to some value. Declaration CacheResult<TV> GetAndRemove(TK key) Parameters Type Name Description TK key Key with which the specified value is associated. Returns Type Description CacheResult <TV> The value if one existed. GetAndRemoveAsync(TK) Atomically removes the entry for a key only if currently mapped to some value. Declaration Task<CacheResult<TV>> GetAndRemoveAsync(TK key) Parameters Type Name Description TK key Key with which the specified value is associated. Returns Type Description System.Threading.Tasks.Task < CacheResult <TV>> The value if one existed. GetAndReplace(TK, TV) Atomically replaces the value for a given key if and only if there is a value currently mapped by the key. Declaration CacheResult<TV> GetAndReplace(TK key, TV val) Parameters Type Name Description TK key Key with which the specified value is to be associated. TV val Value to be associated with the specified key. Returns Type Description CacheResult <TV> The previous value associated with the specified key. GetAndReplaceAsync(TK, TV) Atomically replaces the value for a given key if and only if there is a value currently mapped by the key. Declaration Task<CacheResult<TV>> GetAndReplaceAsync(TK key, TV val) Parameters Type Name Description TK key Key with which the specified value is to be associated. TV val Value to be associated with the specified key. Returns Type Description System.Threading.Tasks.Task < CacheResult <TV>> The previous value associated with the specified key. GetAsync(TK) Retrieves value mapped to the specified key from cache. If the value is not present in cache, then it will be looked up from swap storage. If it's not present in swap, or if swap is disable, and if read-through is allowed, value will be loaded from persistent store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration Task<TV> GetAsync(TK key) Parameters Type Name Description TK key Key. Returns Type Description System.Threading.Tasks.Task <TV> Value. Exceptions Type Condition System.Collections.Generic.KeyNotFoundException If the key is not present in the cache. GetConfiguration() Gets the cache configuration. Declaration CacheConfiguration GetConfiguration() Returns Type Description CacheConfiguration GetLocalEntries(CachePeekMode[]) Get local cache entries. Declaration IEnumerable<ICacheEntry<TK, TV>> GetLocalEntries(params CachePeekMode[] peekModes) Parameters Type Name Description CachePeekMode [] peekModes Peek modes. Returns Type Description System.Collections.Generic.IEnumerable < ICacheEntry <TK, TV>> Enumerable instance. GetLocalMetrics() Gets local snapshot metrics (statistics) for this cache. Declaration ICacheMetrics GetLocalMetrics() Returns Type Description ICacheMetrics Cache metrics. GetLocalSize(CachePeekMode[]) Gets the number of all entries cached on this node. Declaration int GetLocalSize(params CachePeekMode[] modes) Parameters Type Name Description CachePeekMode [] modes Optional peek modes. If not provided, then total cache size is returned. Returns Type Description System.Int32 Cache size on this node. GetLostPartitions() Gets lost partitions IDs. See also PartitionLossPolicy and ResetLostPartitions(IEnumerable<String>) . Declaration ICollection<int> GetLostPartitions() Returns Type Description System.Collections.Generic.ICollection < System.Int32 > GetMetrics() Gets global (whole cluster) snapshot metrics (statistics) for this cache. Declaration ICacheMetrics GetMetrics() Returns Type Description ICacheMetrics Cache metrics. GetMetrics(IClusterGroup) Gets global (whole cluster group) snapshot metrics (statistics) for this cache. Declaration ICacheMetrics GetMetrics(IClusterGroup clusterGroup) Parameters Type Name Description IClusterGroup clusterGroup The cluster group to get metrics for. Returns Type Description ICacheMetrics GetSize(CachePeekMode[]) Gets the number of all entries cached across all nodes. NOTE: this operation is distributed and will query all participating nodes for their cache sizes. Declaration int GetSize(params CachePeekMode[] modes) Parameters Type Name Description CachePeekMode [] modes Optional peek modes. If not provided, then total cache size is returned. Returns Type Description System.Int32 Cache size across all nodes. GetSizeAsync(CachePeekMode[]) Gets the number of all entries cached across all nodes. NOTE: this operation is distributed and will query all participating nodes for their cache sizes. Declaration Task<int> GetSizeAsync(params CachePeekMode[] modes) Parameters Type Name Description CachePeekMode [] modes Optional peek modes. If not provided, then total cache size is returned. Returns Type Description System.Threading.Tasks.Task < System.Int32 > Cache size across all nodes. Invoke<TArg, TRes>(TK, ICacheEntryProcessor<TK, TV, TArg, TRes>, TArg) Invokes an ICacheEntryProcessor<TK, TV, TArg, TRes> against the IMutableCacheEntry<TK, TV> specified by the provided key. If an entry does not exist for the specified key, an attempt is made to load it (if a loader is configured) or a surrogate entry, consisting of the key with a null value is used instead. Declaration TRes Invoke<TArg, TRes>(TK key, ICacheEntryProcessor<TK, TV, TArg, TRes> processor, TArg arg) Parameters Type Name Description TK key The key. ICacheEntryProcessor <TK, TV, TArg, TRes> processor The processor. TArg arg The argument. Returns Type Description TRes Result of the processing. Type Parameters Name Description TArg The type of the argument. TRes The type of the result. Exceptions Type Condition CacheEntryProcessorException If an exception has occured during processing. InvokeAll<TArg, TRes>(IEnumerable<TK>, ICacheEntryProcessor<TK, TV, TArg, TRes>, TArg) Invokes an ICacheEntryProcessor<TK, TV, TArg, TRes> against a set of keys. If an entry does not exist for the specified key, an attempt is made to load it (if a loader is configured) or a surrogate entry, consisting of the key with a null value is used instead. The order that the entries for the keys are processed is undefined. Implementations may choose to process the entries in any order, including concurrently. Furthermore there is no guarantee implementations will use the same processor instance to process each entry, as the case may be in a non-local cache topology. Declaration ICollection<ICacheEntryProcessorResult<TK, TRes>> InvokeAll<TArg, TRes>(IEnumerable<TK> keys, ICacheEntryProcessor<TK, TV, TArg, TRes> processor, TArg arg) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys The keys. ICacheEntryProcessor <TK, TV, TArg, TRes> processor The processor. TArg arg The argument. Returns Type Description System.Collections.Generic.ICollection < ICacheEntryProcessorResult <TK, TRes>> Map of ICacheEntryProcessorResult<TK, T> of the processing per key, if any, defined by the ICacheEntryProcessor<TK, TV, TArg, TRes> implementation. No mappings will be returned for processors that return a null value for a key. Type Parameters Name Description TArg The type of the argument. TRes The type of the result. Exceptions Type Condition CacheEntryProcessorException If an exception has occured during processing. InvokeAllAsync<TArg, TRes>(IEnumerable<TK>, ICacheEntryProcessor<TK, TV, TArg, TRes>, TArg) Invokes an ICacheEntryProcessor<TK, TV, TArg, TRes> against a set of keys. If an entry does not exist for the specified key, an attempt is made to load it (if a loader is configured) or a surrogate entry, consisting of the key with a null value is used instead. The order that the entries for the keys are processed is undefined. Implementations may choose to process the entries in any order, including concurrently. Furthermore there is no guarantee implementations will use the same processor instance to process each entry, as the case may be in a non-local cache topology. Declaration Task<ICollection<ICacheEntryProcessorResult<TK, TRes>>> InvokeAllAsync<TArg, TRes>(IEnumerable<TK> keys, ICacheEntryProcessor<TK, TV, TArg, TRes> processor, TArg arg) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys The keys. ICacheEntryProcessor <TK, TV, TArg, TRes> processor The processor. TArg arg The argument. Returns Type Description System.Threading.Tasks.Task < System.Collections.Generic.ICollection < ICacheEntryProcessorResult <TK, TRes>>> Map of ICacheEntryProcessorResult<TK, T> of the processing per key, if any, defined by the ICacheEntryProcessor<TK, TV, TArg, TRes> implementation. No mappings will be returned for processors that return a null value for a key. Type Parameters Name Description TArg The type of the argument. TRes The type of the result. Exceptions Type Condition CacheEntryProcessorException If an exception has occured during processing. InvokeAsync<TArg, TRes>(TK, ICacheEntryProcessor<TK, TV, TArg, TRes>, TArg) Invokes an ICacheEntryProcessor<TK, TV, TArg, TRes> against the IMutableCacheEntry<TK, TV> specified by the provided key. If an entry does not exist for the specified key, an attempt is made to load it (if a loader is configured) or a surrogate entry, consisting of the key with a null value is used instead. Declaration Task<TRes> InvokeAsync<TArg, TRes>(TK key, ICacheEntryProcessor<TK, TV, TArg, TRes> processor, TArg arg) Parameters Type Name Description TK key The key. ICacheEntryProcessor <TK, TV, TArg, TRes> processor The processor. TArg arg The argument. Returns Type Description System.Threading.Tasks.Task <TRes> Result of the processing. Type Parameters Name Description TArg The type of the argument. TRes The type of the result. Exceptions Type Condition CacheEntryProcessorException If an exception has occured during processing. IsEmpty() Checks whether this cache contains no key-value mappings. Semantically equals to ICache.Size(CachePeekMode.PRIMARY) == 0 . Declaration bool IsEmpty() Returns Type Description System.Boolean IsLocalLocked(TK, Boolean) Checks if specified key is locked. This is a local operation and does not involve any network trips or access to persistent storage in any way. Declaration bool IsLocalLocked(TK key, bool byCurrentThread) Parameters Type Name Description TK key Key to check. System.Boolean byCurrentThread If true, checks that current thread owns a lock on this key; otherwise, checks that any thread on any node owns a lock on this key. Returns Type Description System.Boolean True if specified key is locked; otherwise, false. LoadAll(IEnumerable<TK>, Boolean) Loads the specified entries into the cache using the configured ICacheStore > for the given keys. If an entry for a key already exists in the cache, a value will be loaded if and only if replaceExistingValues is true. If no loader is configured for the cache, no objects will be loaded. Declaration void LoadAll(IEnumerable<TK> keys, bool replaceExistingValues) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys The keys to load. System.Boolean replaceExistingValues if set to true , existing cache values will be replaced by those loaded from a cache store. LoadAllAsync(IEnumerable<TK>, Boolean) Asynchronously loads the specified entries into the cache using the configured ICacheStore > for the given keys. If an entry for a key already exists in the cache, a value will be loaded if and only if replaceExistingValues is true. If no loader is configured for the cache, no objects will be loaded. Declaration Task LoadAllAsync(IEnumerable<TK> keys, bool replaceExistingValues) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys The keys to load. System.Boolean replaceExistingValues if set to true , existing cache values will be replaced by those loaded from a cache store. Returns Type Description System.Threading.Tasks.Task LoadCache(ICacheEntryFilter<TK, TV>, Object[]) Executes LocalLoadCache(ICacheEntryFilter<TK, TV>, Object[]) on all cache nodes. Declaration void LoadCache(ICacheEntryFilter<TK, TV> p, params object[] args) Parameters Type Name Description ICacheEntryFilter <TK, TV> p Optional predicate. If provided, will be used to filter values to be put into cache. System.Object [] args Optional user arguments to be passed into LoadCache(Action<TK, TV>, Object[]) . LoadCacheAsync(ICacheEntryFilter<TK, TV>, Object[]) Executes LocalLoadCache(ICacheEntryFilter<TK, TV>, Object[]) on all cache nodes. Declaration Task LoadCacheAsync(ICacheEntryFilter<TK, TV> p, params object[] args) Parameters Type Name Description ICacheEntryFilter <TK, TV> p Optional predicate. If provided, will be used to filter values to be put into cache. System.Object [] args Optional user arguments to be passed into LoadCache(Action<TK, TV>, Object[]) . Returns Type Description System.Threading.Tasks.Task LocalClear(TK) Clear entry from the cache and swap storage, without notifying listeners or CacheWriters. Entry is cleared only if it is not currently locked, and is not participating in a transaction. Note that this operation is local as it merely clears an entry from local cache, it does not remove entries from remote caches. Declaration void LocalClear(TK key) Parameters Type Name Description TK key Key to clear. LocalClearAll(IEnumerable<TK>) Clear entries from the cache and swap storage, without notifying listeners or CacheWriters. Entry is cleared only if it is not currently locked, and is not participating in a transaction. Note that this operation is local as it merely clears entries from local cache, it does not remove entries from remote caches. Declaration void LocalClearAll(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys to clear. LocalEvict(IEnumerable<TK>) Attempts to evict all entries associated with keys. Note, that entry will be evicted only if it's not used (not participating in any locks or transactions). Declaration void LocalEvict(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys to evict from cache. LocalLoadCache(ICacheEntryFilter<TK, TV>, Object[]) Delegates to LoadCache(Action<TK, TV>, Object[]) method to load state from the underlying persistent storage. The loaded values will then be given to the optionally passed in predicate, and, if the predicate returns true, will be stored in cache. If predicate is null, then all loaded values will be stored in cache. Declaration void LocalLoadCache(ICacheEntryFilter<TK, TV> p, params object[] args) Parameters Type Name Description ICacheEntryFilter <TK, TV> p Optional predicate. If provided, will be used to filter values to be put into cache. System.Object [] args Optional user arguments to be passed into LoadCache(Action<TK, TV>, Object[]) . LocalLoadCacheAsync(ICacheEntryFilter<TK, TV>, Object[]) Delegates to LoadCache(Action<TK, TV>, Object[]) method to load state from the underlying persistent storage. The loaded values will then be given to the optionally passed in predicate, and, if the predicate returns true, will be stored in cache. If predicate is null, then all loaded values will be stored in cache. Declaration Task LocalLoadCacheAsync(ICacheEntryFilter<TK, TV> p, params object[] args) Parameters Type Name Description ICacheEntryFilter <TK, TV> p Optional predicate. If provided, will be used to filter values to be put into cache. System.Object [] args Optional user arguments to be passed into LoadCache(Action<TK, TV>, Object[]) . Returns Type Description System.Threading.Tasks.Task LocalPeek(TK, CachePeekMode[]) Peeks at cached value using optional set of peek modes. This method will sequentially iterate over given peek modes, and try to peek at value using each peek mode. Once a non-null value is found, it will be immediately returned. This method does not participate in any transactions, however, it may peek at transactional value depending on the peek modes used. If key is not present in cache, KeyNotFoundException will be thrown. Declaration TV LocalPeek(TK key, params CachePeekMode[] modes) Parameters Type Name Description TK key Key. CachePeekMode [] modes Peek modes. Returns Type Description TV Peeked value. Lock(TK) Creates an ICacheLock instance associated with passed key. This method does not acquire lock immediately, you have to call appropriate method on returned instance. Declaration ICacheLock Lock(TK key) Parameters Type Name Description TK key Key for lock. Returns Type Description ICacheLock New ICacheLock instance associated with passed key. LockAll(IEnumerable<TK>) Creates an ICacheLock instance associated with passed keys. This method does not acquire lock immediately, you have to call appropriate method on returned instance. Declaration ICacheLock LockAll(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys for lock. Returns Type Description ICacheLock New ICacheLock instance associated with passed keys. Put(TK, TV) Associates the specified value with the specified key in the cache. If the cache previously contained a mapping for the key, the old value is replaced by the specified value. Declaration void Put(TK key, TV val) Parameters Type Name Description TK key Key with which the specified value is to be associated. TV val Value to be associated with the specified key. PutAll(IEnumerable<KeyValuePair<TK, TV>>) Stores given key-value pairs in cache. If write-through is enabled, the stored values will be persisted to store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration void PutAll(IEnumerable<KeyValuePair<TK, TV>> vals) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair <TK, TV>> vals Key-value pairs to store in cache. PutAllAsync(IEnumerable<KeyValuePair<TK, TV>>) Stores given key-value pairs in cache. If write-through is enabled, the stored values will be persisted to store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration Task PutAllAsync(IEnumerable<KeyValuePair<TK, TV>> vals) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair <TK, TV>> vals Key-value pairs to store in cache. Returns Type Description System.Threading.Tasks.Task PutAsync(TK, TV) Associates the specified value with the specified key in the cache. If the cache previously contained a mapping for the key, the old value is replaced by the specified value. Declaration Task PutAsync(TK key, TV val) Parameters Type Name Description TK key Key with which the specified value is to be associated. TV val Value to be associated with the specified key. Returns Type Description System.Threading.Tasks.Task PutIfAbsent(TK, TV) Atomically associates the specified key with the given value if it is not already associated with a value. Declaration bool PutIfAbsent(TK key, TV val) Parameters Type Name Description TK key Key with which the specified value is to be associated. TV val Value to be associated with the specified key. Returns Type Description System.Boolean True if a value was set. PutIfAbsentAsync(TK, TV) Atomically associates the specified key with the given value if it is not already associated with a value. Declaration Task<bool> PutIfAbsentAsync(TK key, TV val) Parameters Type Name Description TK key Key with which the specified value is to be associated. TV val Value to be associated with the specified key. Returns Type Description System.Threading.Tasks.Task < System.Boolean > True if a value was set. Query(QueryBase) Queries cache. Declaration IQueryCursor<ICacheEntry<TK, TV>> Query(QueryBase qry) Parameters Type Name Description QueryBase qry Query. Returns Type Description IQueryCursor < ICacheEntry <TK, TV>> Cursor. Query(SqlFieldsQuery) Queries separate entry fields. Declaration IFieldsQueryCursor Query(SqlFieldsQuery qry) Parameters Type Name Description SqlFieldsQuery qry SQL fields query. Returns Type Description IFieldsQueryCursor Cursor. QueryContinuous(ContinuousQuery<TK, TV>) Start continuous query execution. Declaration IContinuousQueryHandle QueryContinuous(ContinuousQuery<TK, TV> qry) Parameters Type Name Description ContinuousQuery <TK, TV> qry Continuous query. Returns Type Description IContinuousQueryHandle Handle to stop query execution. QueryContinuous(ContinuousQuery<TK, TV>, QueryBase) Start continuous query execution. Declaration IContinuousQueryHandle<ICacheEntry<TK, TV>> QueryContinuous(ContinuousQuery<TK, TV> qry, QueryBase initialQry) Parameters Type Name Description ContinuousQuery <TK, TV> qry Continuous query. QueryBase initialQry The initial query. This query will be executed before continuous listener is registered which allows to iterate through entries which have already existed at the time continuous query is executed. Returns Type Description IContinuousQueryHandle < ICacheEntry <TK, TV>> Handle to get initial query cursor or stop query execution. QueryFields(SqlFieldsQuery) Queries separate entry fields. Declaration [Obsolete(\"Use Query(SqlFieldsQuery qry) instead.\")] IQueryCursor<IList> QueryFields(SqlFieldsQuery qry) Parameters Type Name Description SqlFieldsQuery qry SQL fields query. Returns Type Description IQueryCursor < System.Collections.IList > Cursor. Rebalance() Rebalances cache partitions. This method is usually used when rebalanceDelay configuration parameter has non-zero value. When many nodes are started or stopped almost concurrently, it is more efficient to delay rebalancing until the node topology is stable to make sure that no redundant re-partitioning happens. In case of partitioned caches, for better efficiency user should usually make sure that new nodes get placed on the same place of consistent hash ring as the left nodes, and that nodes are restarted before rebalanceDelay expires. Declaration Task Rebalance() Returns Type Description System.Threading.Tasks.Task Task that will be completed when rebalancing is finished. Remove(TK) Removes given key mapping from cache. If cache previously contained value for the given key, then this value is returned. In case of PARTITIONED or REPLICATED caches, the value will be loaded from the primary node, which in its turn may load the value from the disk-based swap storage, and consecutively, if it's not in swap, from the underlying persistent storage. If the returned value is not needed, method removex() should always be used instead of this one to avoid the overhead associated with returning of the previous value. If write-through is enabled, the value will be removed from store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration bool Remove(TK key) Parameters Type Name Description TK key Key whose mapping is to be removed from cache. Returns Type Description System.Boolean False if there was no matching key. Remove(TK, TV) Removes given key mapping from cache if one exists and value is equal to the passed in value. If write-through is enabled, the value will be removed from store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration bool Remove(TK key, TV val) Parameters Type Name Description TK key Key whose mapping is to be removed from cache. TV val Value to match against currently cached value. Returns Type Description System.Boolean True if entry was removed, false otherwise. RemoveAll() Removes all mappings from cache. If write-through is enabled, the value will be removed from store. This method is not transactional. Declaration void RemoveAll() RemoveAll(IEnumerable<TK>) Removes given key mappings from cache. If write-through is enabled, the value will be removed from store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration void RemoveAll(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys whose mappings are to be removed from cache. RemoveAllAsync() Removes all mappings from cache. If write-through is enabled, the value will be removed from store. This method is not transactional. Declaration Task RemoveAllAsync() Returns Type Description System.Threading.Tasks.Task RemoveAllAsync(IEnumerable<TK>) Removes given key mappings from cache. If write-through is enabled, the value will be removed from store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration Task RemoveAllAsync(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys whose mappings are to be removed from cache. Returns Type Description System.Threading.Tasks.Task RemoveAsync(TK) Removes given key mapping from cache. If cache previously contained value for the given key, then this value is returned. In case of PARTITIONED or REPLICATED caches, the value will be loaded from the primary node, which in its turn may load the value from the disk-based swap storage, and consecutively, if it's not in swap, from the underlying persistent storage. If the returned value is not needed, method removex() should always be used instead of this one to avoid the overhead associated with returning of the previous value. If write-through is enabled, the value will be removed from store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration Task<bool> RemoveAsync(TK key) Parameters Type Name Description TK key Key whose mapping is to be removed from cache. Returns Type Description System.Threading.Tasks.Task < System.Boolean > False if there was no matching key. RemoveAsync(TK, TV) Removes given key mapping from cache if one exists and value is equal to the passed in value. If write-through is enabled, the value will be removed from store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration Task<bool> RemoveAsync(TK key, TV val) Parameters Type Name Description TK key Key whose mapping is to be removed from cache. TV val Value to match against currently cached value. Returns Type Description System.Threading.Tasks.Task < System.Boolean > True if entry was removed, false otherwise. Replace(TK, TV) Stores given key-value pair in cache only if there is a previous mapping for it. If cache previously contained value for the given key, then this value is returned. In case of PARTITIONED or REPLICATED caches, the value will be loaded from the primary node, which in its turn may load the value from the swap storage, and consecutively, if it's not in swap, rom the underlying persistent storage. If write-through is enabled, the stored value will be persisted to store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration bool Replace(TK key, TV val) Parameters Type Name Description TK key Key to store in cache. TV val Value to be associated with the given key. Returns Type Description System.Boolean True if the value was replaced. Replace(TK, TV, TV) Stores given key-value pair in cache only if only if the previous value is equal to the old value passed as argument. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration bool Replace(TK key, TV oldVal, TV newVal) Parameters Type Name Description TK key Key to store in cache. TV oldVal Old value to match. TV newVal Value to be associated with the given key. Returns Type Description System.Boolean True if replace happened, false otherwise. ReplaceAsync(TK, TV) Stores given key-value pair in cache only if there is a previous mapping for it. If cache previously contained value for the given key, then this value is returned. In case of PARTITIONED or REPLICATED caches, the value will be loaded from the primary node, which in its turn may load the value from the swap storage, and consecutively, if it's not in swap, rom the underlying persistent storage. If write-through is enabled, the stored value will be persisted to store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration Task<bool> ReplaceAsync(TK key, TV val) Parameters Type Name Description TK key Key to store in cache. TV val Value to be associated with the given key. Returns Type Description System.Threading.Tasks.Task < System.Boolean > True if the value was replaced. ReplaceAsync(TK, TV, TV) Stores given key-value pair in cache only if only if the previous value is equal to the old value passed as argument. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration Task<bool> ReplaceAsync(TK key, TV oldVal, TV newVal) Parameters Type Name Description TK key Key to store in cache. TV oldVal Old value to match. TV newVal Value to be associated with the given key. Returns Type Description System.Threading.Tasks.Task < System.Boolean > True if replace happened, false otherwise. 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. WithExpiryPolicy(IExpiryPolicy) Returns cache with the specified expired policy set. This policy will be used for each operation invoked on the returned cache. Expiry durations for each operation are calculated only once and then used as constants. Please consider this when implementing customg expiry policy implementations. Declaration ICache<TK, TV> WithExpiryPolicy(IExpiryPolicy plc) Parameters Type Name Description IExpiryPolicy plc Expiry policy to use. Returns Type Description ICache <TK, TV> Cache instance with the specified expiry policy set. WithKeepBinary<TK1, TV1>() Gets cache with KeepBinary mode enabled, changing key and/or value types if necessary. You can only change key/value types when transitioning from non-binary to binary cache; Changing type of binary cache is not allowed and will throw an System.InvalidOperationException Declaration ICache<TK1, TV1> WithKeepBinary<TK1, TV1>() Returns Type Description ICache <TK1, TV1> Cache instance with binary mode enabled. Type Parameters Name Description TK1 Key type in binary mode. TV1 Value type in binary mode. WithNoRetries() Get another cache instance with no-retries behavior enabled. Declaration ICache<TK, TV> WithNoRetries() Returns Type Description ICache <TK, TV> Cache with no-retries behavior enabled. WithPartitionRecover() Gets an instance of cache that will be allowed to execute cache operations (read, write) regardless of partition loss policy. Declaration ICache<TK, TV> WithPartitionRecover() Returns Type Description ICache <TK, TV> Cache without partition loss protection. WithSkipStore() Get another cache instance with read-through and write-through behavior disabled. Declaration ICache<TK, TV> WithSkipStore() Returns Type Description ICache <TK, TV> Cache with read-through and write-through behavior disabled. Extension Methods CacheLinqExtensions.AsCacheQueryable<TKey, TValue>(ICache<TKey, TValue>) CacheLinqExtensions.AsCacheQueryable<TKey, TValue>(ICache<TKey, TValue>, Boolean) CacheLinqExtensions.AsCacheQueryable<TKey, TValue>(ICache<TKey, TValue>, Boolean, String) CacheLinqExtensions.AsCacheQueryable<TKey, TValue>(ICache<TKey, TValue>, QueryOptions)"
  },
  "api/Apache.Ignite.Core.Cache.Query.Continuous.ContinuousQuery.html": {
    "href": "api/Apache.Ignite.Core.Cache.Query.Continuous.ContinuousQuery.html",
    "title": "Class ContinuousQuery | Apache Ignite.NET",
    "keywords": "Class ContinuousQuery Continuous query base class, see ContinuousQuery<TK, TV> . Inheritance System.Object ContinuousQuery ContinuousQuery <TK, TV> Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Query.Continuous Assembly : Apache.Ignite.Core.dll Syntax public abstract class ContinuousQuery Constructors ContinuousQuery() Initializes a new instance of the ContinuousQuery class. Declaration protected ContinuousQuery() Fields DefaultAutoUnsubscribe Default auto-unsubscribe flag value. Declaration public const bool DefaultAutoUnsubscribe = true Field Value Type Description System.Boolean DefaultBufferSize Default buffer size. Declaration public const int DefaultBufferSize = 1 Field Value Type Description System.Int32 DefaultTimeInterval Default time interval. Declaration public static readonly TimeSpan DefaultTimeInterval Field Value Type Description System.TimeSpan"
  },
  "api/Apache.Ignite.Core.Cache.Query.QueryBase.html": {
    "href": "api/Apache.Ignite.Core.Cache.Query.QueryBase.html",
    "title": "Class QueryBase | Apache Ignite.NET",
    "keywords": "Class QueryBase Base class for all Ignite cache entry queries. Inheritance System.Object QueryBase ScanQuery<TK, TV> SqlQuery TextQuery Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Query Assembly : Apache.Ignite.Core.dll Syntax public abstract class QueryBase Constructors QueryBase() Initializes a new instance of the QueryBase class. Declaration protected QueryBase() Fields DefaultPageSize Default page size. Declaration public const int DefaultPageSize = 1024 Field Value Type Description System.Int32 Properties Local Local flag. When set query will be executed only on local node, so only local entries will be returned as query result. Defaults to false . Declaration public bool Local { get; set; } Property Value Type Description System.Boolean PageSize Optional page size. If set to 0 , then CacheQueryConfiguration.pageSize is used. Declaration public int PageSize { get; set; } Property Value Type Description System.Int32"
  },
  "api/Apache.Ignite.Core.Cache.Query.ScanQuery-2.html": {
    "href": "api/Apache.Ignite.Core.Cache.Query.ScanQuery-2.html",
    "title": "Class ScanQuery<TK, TV> | Apache Ignite.NET",
    "keywords": "Class ScanQuery<TK, TV> Scan query over cache entries. Will accept all the entries if no predicate was set. Inheritance System.Object QueryBase ScanQuery<TK, TV> Inherited Members QueryBase.DefaultPageSize QueryBase.Local QueryBase.PageSize System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Query Assembly : Apache.Ignite.Core.dll Syntax public class ScanQuery<TK, TV> : QueryBase Type Parameters Name Description TK TV Constructors ScanQuery(ICacheEntryFilter<TK, TV>) Initializes a new instance of the ScanQuery<TK, TV> class. Declaration public ScanQuery(ICacheEntryFilter<TK, TV> filter = null) Parameters Type Name Description ICacheEntryFilter <TK, TV> filter The filter. Properties Filter Gets or sets the predicate. Declaration public ICacheEntryFilter<TK, TV> Filter { get; set; } Property Value Type Description ICacheEntryFilter <TK, TV> Partition Gets or sets partition number over which this query should iterate. If null, query will iterate over all partitions in the cache. Must be in the range [0, N) where N is partition number in the cache. Declaration public int ? Partition { get; set; } Property Value Type Description System.Nullable < System.Int32 >"
  },
  "api/Apache.Ignite.Core.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.IComputeFunc-1.html": {
    "href": "api/Apache.Ignite.Core.Compute.IComputeFunc-1.html",
    "title": "Interface IComputeFunc<TRes> | Apache Ignite.NET",
    "keywords": "Interface IComputeFunc<TRes> Defines function having no arguments. Namespace : Apache.Ignite.Core.Compute Assembly : Apache.Ignite.Core.dll Syntax public interface IComputeFunc<out TRes> Type Parameters Name Description TRes Methods Invoke() Invoke function. Declaration TRes Invoke() Returns Type Description TRes Result."
  },
  "api/Apache.Ignite.Core.Compute.IComputeFunc-2.html": {
    "href": "api/Apache.Ignite.Core.Compute.IComputeFunc-2.html",
    "title": "Interface IComputeFunc<TArg, TRes> | Apache Ignite.NET",
    "keywords": "Interface IComputeFunc<TArg, TRes> Defines function having a single argument. Namespace : Apache.Ignite.Core.Compute Assembly : Apache.Ignite.Core.dll Syntax public interface IComputeFunc<in TArg, out TRes> Type Parameters Name Description TArg TRes Methods Invoke(TArg) Invoke function. Declaration TRes Invoke(TArg arg) Parameters Type Name Description TArg arg Argument. Returns Type Description TRes Result."
  },
  "api/Apache.Ignite.Core.Discovery.Tcp.html": {
    "href": "api/Apache.Ignite.Core.Discovery.Tcp.html",
    "title": "Namespace Apache.Ignite.Core.Discovery.Tcp | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Discovery.Tcp Classes TcpDiscoveryIpFinderBase Base IpFinder class. TcpDiscoverySpi TCP discover service provider. Interfaces ITcpDiscoveryIpFinder Represents an IP finder for TcpDiscoverySpi . Only predefined implementations are supported now: TcpDiscoveryStaticIpFinder , TcpDiscoveryMulticastIpFinder ."
  },
  "api/Apache.Ignite.Core.Discovery.html": {
    "href": "api/Apache.Ignite.Core.Discovery.html",
    "title": "Namespace Apache.Ignite.Core.Discovery | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Discovery Interfaces IDiscoverySpi Represents a discovery service provider interface. Only predefined implementation is supported now: TcpDiscoverySpi ."
  },
  "api/Apache.Ignite.Core.Events.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.Cache.Configuration.NearCacheConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Cache.Configuration.NearCacheConfiguration.html",
    "title": "Class NearCacheConfiguration | Apache Ignite.NET",
    "keywords": "Class NearCacheConfiguration Defines near cache configuration. Distributed cache can also be fronted by a Near cache, which is a smaller local cache that stores most recently or most frequently accessed data. Just like with a partitioned cache, the user can control the size of the near cache and its eviction policies. Inheritance System.Object NearCacheConfiguration Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Configuration Assembly : Apache.Ignite.Core.dll Syntax public class NearCacheConfiguration Constructors NearCacheConfiguration() Initializes a new instance of the NearCacheConfiguration class. Declaration public NearCacheConfiguration() Fields DefaultNearStartSize Initial default near cache size. Declaration public const int DefaultNearStartSize = 375000 Field Value Type Description System.Int32 Properties EvictionPolicy Gets or sets the eviction policy. Null value means disabled evictions. Declaration public IEvictionPolicy EvictionPolicy { get; set; } Property Value Type Description IEvictionPolicy NearStartSize Gets or sets the initial cache size for near cache which will be used to pre-create internal hash table after start. Declaration public int NearStartSize { get; set; } Property Value Type Description System.Int32"
  },
  "api/Apache.Ignite.Core.Cache.Configuration.html": {
    "href": "api/Apache.Ignite.Core.Cache.Configuration.html",
    "title": "Namespace Apache.Ignite.Core.Cache.Configuration | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Cache.Configuration Classes CacheConfiguration Defines grid cache configuration. CacheKeyConfiguration Configuration defining various aspects of cache keys without explicit usage of annotations on user classes. MemoryConfiguration A page memory configuration for an Apache Ignite node. The page memory is a manageable off-heap based memory architecture that divides all continuously allocated memory regions into pages of fixed size. An individual page can store one or many cache key-value entries that allows reusing the memory in the most efficient way and avoid memory fragmentation issues. By default, the page memory allocates a single continuous memory region. All the caches that will be configured in an application will be mapped to this memory region by default, thus, all the cache data will reside in that memory region. If initial size of the default memory region doesn't satisfy requirements or it's required to have multiple memory regions with different properties then MemoryPolicyConfiguration can be used for both scenarios. For instance, using memory policies you can define memory regions of different maximum size, eviction policies, swapping options, etc. Once you define a new memory region you can bind particular Ignite caches to it. To learn more about memory policies refer to MemoryPolicyConfiguration documentation. Obsolete, use DataStorageConfiguration . MemoryPolicyConfiguration Defines page memory policy configuration. See MemoryPolicies . Obsolete, use DataRegionConfiguration . NearCacheConfiguration Defines near cache configuration. Distributed cache can also be fronted by a Near cache, which is a smaller local cache that stores most recently or most frequently accessed data. Just like with a partitioned cache, the user can control the size of the near cache and its eviction policies. QueryAlias Represents cache query configuration alias. QueryEntity Query entity is a description of cache entry (composed of key and value) in a way of how it must be indexed and can be queried. QueryField Represents a queryable field. QueryIndex Represents cache query index configuration. QueryIndexField Represents an indexed field. QuerySqlFieldAttribute Marks field or property for SQL queries. Using this attribute is an alternative to Fields in CacheConfiguration . QueryTextFieldAttribute Marks field or property for Text queries. Using this attribute is an alternative to Fields in CacheConfiguration . Enums CacheAtomicityMode Cache atomicity mode. CacheMode Caching modes. CacheRebalanceMode Cache rebalance mode. When rebalancing is enabled (i.e. has value other than None ), distributed caches will attempt to rebalance all necessary values from other grid nodes. Replicated caches will try to load the full set of cache entries from other nodes, while partitioned caches will only load the entries for which current node is primary or backup. Note that rebalance mode only makes sense for Replicated and Partitioned caches. Caches with Local mode are local by definition and therefore cannot rebalance any values from neighboring nodes. CacheWriteSynchronizationMode Mode indicating how Ignite should wait for write replies from other nodes. DataPageEvictionMode Memory page eviction mode. Only data pages, that store key-value entries, are eligible for eviction. The other types of pages, like index or system pages, are not evictable. PartitionLossPolicy Partition loss policy. Defines how cache will behave in a case when one or more partitions are lost because of a node(s) failure. All Safe policies prevent a user from interaction with partial data in lost partitions until ResetLostPartitions(IEnumerable<String>) method is called. *All policies allow working with partial data in lost partitions. ReadOnly and ReadWrite* policies do not automatically change partition state and thus do not change rebalancing assignments for such partitions. QueryIndexType Query index type."
  },
  "api/Apache.Ignite.Core.Cache.Expiry.IExpiryPolicy.html": {
    "href": "api/Apache.Ignite.Core.Cache.Expiry.IExpiryPolicy.html",
    "title": "Interface IExpiryPolicy | Apache Ignite.NET",
    "keywords": "Interface IExpiryPolicy Defines functions to determine when cache entries will expire based on creation, access and modification operations. Namespace : Apache.Ignite.Core.Cache.Expiry Assembly : Apache.Ignite.Core.dll Syntax public interface IExpiryPolicy Methods GetExpiryForAccess() Gets expiry for access operation. If TimeSpan.ZERO is returned, cache entry is considered immediately expired. If null is returned, no change to previously understood expiry is performed. Declaration TimeSpan? GetExpiryForAccess() Returns Type Description System.Nullable < System.TimeSpan > Expiry for access operation. GetExpiryForCreate() Gets expiry for create operation. If TimeSpan.ZERO is returned, cache entry is considered immediately expired and will not be added to cache. If null is returned, no change to previously understood expiry is performed. Declaration TimeSpan? GetExpiryForCreate() Returns Type Description System.Nullable < System.TimeSpan > Expiry for create opeartion. GetExpiryForUpdate() Gets expiry for update operation. If TimeSpan.ZERO is returned, cache entry is considered immediately expired. If null is returned, no change to previously understood expiry is performed. Declaration TimeSpan? GetExpiryForUpdate() Returns Type Description System.Nullable < System.TimeSpan > Expiry for update operation."
  },
  "api/Apache.Ignite.Core.Cache.Expiry.html": {
    "href": "api/Apache.Ignite.Core.Cache.Expiry.html",
    "title": "Namespace Apache.Ignite.Core.Cache.Expiry | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Cache.Expiry Classes ExpiryPolicy Default expiry policy implementation with all durations deinfed explicitly. Interfaces IExpiryPolicy Defines functions to determine when cache entries will expire based on creation, access and modification operations."
  },
  "api/Apache.Ignite.Core.Cache.Query.TextQuery.html": {
    "href": "api/Apache.Ignite.Core.Cache.Query.TextQuery.html",
    "title": "Class TextQuery | Apache Ignite.NET",
    "keywords": "Class TextQuery Text query. Inheritance System.Object QueryBase TextQuery Inherited Members QueryBase.DefaultPageSize QueryBase.Local QueryBase.PageSize System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Query Assembly : Apache.Ignite.Core.dll Syntax public class TextQuery : QueryBase Constructors TextQuery(String, String) Constructor. Declaration public TextQuery(string queryType, string text) Parameters Type Name Description System.String queryType Type. System.String text Text. TextQuery(String, String, Boolean) Constructor. Declaration public TextQuery(string queryType, string text, bool local) Parameters Type Name Description System.String queryType Type. System.String text Text. System.Boolean local Whether query should be executed locally. TextQuery(Type, String) Constructor. Declaration public TextQuery(Type queryType, string text) Parameters Type Name Description System.Type queryType Type. System.String text Text. TextQuery(Type, String, Boolean) Constructor. Declaration public TextQuery(Type queryType, string text, bool local) Parameters Type Name Description System.Type queryType Type. System.String text Text. System.Boolean local Whether query should be executed locally. Properties QueryType Type. Declaration public string QueryType { get; set; } Property Value Type Description System.String Text Text. Declaration public string Text { get; set; } Property Value Type Description System.String"
  },
  "api/Apache.Ignite.Core.Cache.Query.html": {
    "href": "api/Apache.Ignite.Core.Cache.Query.html",
    "title": "Namespace Apache.Ignite.Core.Cache.Query | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Cache.Query Classes QueryBase Base class for all Ignite cache entry queries. ScanQuery<TK, TV> Scan query over cache entries. Will accept all the entries if no predicate was set. SqlFieldsQuery SQL fields query. SqlQuery SQL Query. TextQuery Text query. Interfaces IFieldsQueryCursor Fields query cursor. IQueryCursor<T> Query result cursor. Can be processed either in iterative mode, or by taking all entries using GetAll() method. Note that you get enumerator or call GetAll() method only once during cursor lifetime. Any further attempts to get enumerator or all entries will result in exception."
  },
  "api/Apache.Ignite.Core.Client.IgniteClientException.html": {
    "href": "api/Apache.Ignite.Core.Client.IgniteClientException.html",
    "title": "Class IgniteClientException | Apache Ignite.NET",
    "keywords": "Class IgniteClientException Ignite thin client exception. Inheritance System.Object System.Exception IgniteException IgniteClientException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Client Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class IgniteClientException : IgniteException, ISerializable, _Exception Constructors IgniteClientException() Initializes a new instance of the IgniteClientException class. Declaration public IgniteClientException() IgniteClientException(SerializationInfo, StreamingContext) Initializes a new instance of the IgniteClientException class. Declaration protected IgniteClientException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. IgniteClientException(String) Initializes a new instance of the IgniteClientException class. Declaration public IgniteClientException(string message) Parameters Type Name Description System.String message The message that describes the error. IgniteClientException(String, Exception) Initializes a new instance of the IgniteClientException class. Declaration public IgniteClientException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. IgniteClientException(String, Exception, ClientStatusCode) Initializes a new instance of the IgniteClientException class. Declaration public IgniteClientException(string message, Exception cause, ClientStatusCode statusCode) Parameters Type Name Description System.String message The message. System.Exception cause The cause. ClientStatusCode statusCode The error code. Properties StatusCode Gets the status code code. Declaration public ClientStatusCode StatusCode { get; } Property Value Type Description ClientStatusCode Methods GetObjectData(SerializationInfo, StreamingContext) When overridden in a derived class, sets the System.Runtime.Serialization.SerializationInfo with information about the exception. Declaration public override void GetObjectData(SerializationInfo info, StreamingContext context) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info The System.Runtime.Serialization.SerializationInfo that holds the serialized object data about the exception being thrown. System.Runtime.Serialization.StreamingContext context The System.Runtime.Serialization.StreamingContext that contains contextual information about the source or destination. Overrides System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) ToString() Returns a System.String that represents this instance. Declaration public override string ToString() Returns Type Description System.String Overrides System.Exception.ToString() Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Client.IIgniteClient.html": {
    "href": "api/Apache.Ignite.Core.Client.IIgniteClient.html",
    "title": "Interface IIgniteClient | Apache Ignite.NET",
    "keywords": "Interface IIgniteClient Main entry point for Ignite Thin Client APIs. You can obtain an instance of IIgniteClient through one of the StartClient() overloads. Instances of this class and all nested APIs are thread safe. Inherited Members System.IDisposable.Dispose() Namespace : Apache.Ignite.Core.Client Assembly : Apache.Ignite.Core.dll Syntax public interface IIgniteClient : IDisposable Methods CreateCache<TK, TV>(CacheClientConfiguration) Dynamically starts new cache using provided configuration. Declaration ICacheClient<TK, TV> CreateCache<TK, TV>(CacheClientConfiguration configuration) Parameters Type Name Description CacheClientConfiguration configuration Cache configuration. Returns Type Description ICacheClient <TK, TV> Existing or newly created cache. Type Parameters Name Description TK Cache key type. TV Cache value type. CreateCache<TK, TV>(String) Dynamically starts new cache using template configuration. Declaration ICacheClient<TK, TV> CreateCache<TK, TV>(string name) Parameters Type Name Description System.String name Cache name. Returns Type Description ICacheClient <TK, TV> Existing or newly created cache. Type Parameters Name Description TK Cache key type. TV Cache value type. DestroyCache(String) Destroys dynamically created (with CreateCache<TK, TV>(String) or GetOrCreateCache<TK, TV>(String) ) cache. Declaration void DestroyCache(string name) Parameters Type Name Description System.String name The name of the cache to stop. GetBinary() Gets Ignite binary services. Declaration IBinary GetBinary() Returns Type Description IBinary Instance of IBinary interface GetCache<TK, TV>(String) Gets the cache instance for the given name to work with keys and values of specified types. You can get instances of ICacheClient<TK, TV> of the same name, but with different key/value types. These will use the same named cache, but only allow working with entries of specified types. Attempt to retrieve an entry of incompatible type will result in System.InvalidCastException . Use GetCache<TK, TV>(String) in order to work with entries of arbitrary types. Declaration ICacheClient<TK, TV> GetCache<TK, TV>(string name) Parameters Type Name Description System.String name Cache name. Returns Type Description ICacheClient <TK, TV> Cache instance for given name. Type Parameters Name Description TK Cache key type. TV Cache value type. GetCacheNames() Gets the collection of names of currently available caches, or empty collection if there are no caches. Declaration ICollection<string> GetCacheNames() Returns Type Description System.Collections.Generic.ICollection < System.String > Collection of names of currently available caches. GetConfiguration() Gets the configuration. Declaration IgniteClientConfiguration GetConfiguration() Returns Type Description IgniteClientConfiguration GetOrCreateCache<TK, TV>(CacheClientConfiguration) Gets existing cache with the given name or creates new one using provided configuration. Declaration ICacheClient<TK, TV> GetOrCreateCache<TK, TV>(CacheClientConfiguration configuration) Parameters Type Name Description CacheClientConfiguration configuration Cache configuration. Returns Type Description ICacheClient <TK, TV> Existing or newly created cache. Type Parameters Name Description TK Cache key type. TV Cache value type. GetOrCreateCache<TK, TV>(String) Gets existing cache with the given name or creates new one using template configuration. Declaration ICacheClient<TK, TV> GetOrCreateCache<TK, TV>(string name) Parameters Type Name Description System.String name Cache name. Returns Type Description ICacheClient <TK, TV> Existing or newly created cache. Type Parameters Name Description TK Cache key type. TV Cache value type."
  },
  "api/Apache.Ignite.Core.Common.IFactory-1.html": {
    "href": "api/Apache.Ignite.Core.Common.IFactory-1.html",
    "title": "Interface IFactory<T> | Apache Ignite.NET",
    "keywords": "Interface IFactory<T> Factory that produces instances of a specific type. Implementation can be passed over the wire and thus should be marked with System.SerializableAttribute . Namespace : Apache.Ignite.Core.Common Assembly : Apache.Ignite.Core.dll Syntax public interface IFactory<out T> Type Parameters Name Description T Methods CreateInstance() Creates an instance of the cache store. Declaration T CreateInstance() Returns Type Description T New instance of the cache store."
  },
  "api/Apache.Ignite.Core.Common.IgniteException.html": {
    "href": "api/Apache.Ignite.Core.Common.IgniteException.html",
    "title": "Class IgniteException | Apache Ignite.NET",
    "keywords": "Class IgniteException General Ignite exception. Indicates any error condition within Ignite. Inheritance System.Object System.Exception IgniteException BinaryObjectException CacheEntryProcessorException CacheException IgniteClientException ClusterGroupEmptyException ClusterTopologyException ClientDisconnectedException IgniteFutureCancelledException JavaException ComputeExecutionRejectedException ComputeJobFailoverException ComputeTaskCancelledException ComputeTaskTimeoutException ComputeUserUndeclaredException ServiceDeploymentException ServiceInvocationException TransactionDeadlockException TransactionHeuristicException TransactionOptimisticException TransactionRollbackException TransactionTimeoutException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Common Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class IgniteException : Exception, ISerializable, _Exception Constructors IgniteException() Initializes a new instance of the IgniteException class. Declaration public IgniteException() IgniteException(SerializationInfo, StreamingContext) Initializes a new instance of the IgniteException class. Declaration protected IgniteException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. IgniteException(String) Initializes a new instance of the IgniteException class. Declaration public IgniteException(string message) Parameters Type Name Description System.String message The message that describes the error. IgniteException(String, Exception) Initializes a new instance of the IgniteException class. Declaration public IgniteException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Compute.ComputeTaskNoResultCacheAttribute.html": {
    "href": "api/Apache.Ignite.Core.Compute.ComputeTaskNoResultCacheAttribute.html",
    "title": "Class ComputeTaskNoResultCacheAttribute | Apache Ignite.NET",
    "keywords": "Class ComputeTaskNoResultCacheAttribute This attribute disables caching of task results when attached to IComputeTask<TArg, TJobRes, TRes> instance. Use it when number of jobs within task grows too big, or jobs themselves are too large to keep in memory throughout task execution. By default all results are cached and passed into OnResult(IComputeJobResult<TJobRes>, IList<IComputeJobResult<TJobRes>>) and Reduce(IList<IComputeJobResult<TJobRes>>) methods. When this attribute is attached to a task class, then this list of job results will always be empty. Inheritance System.Object System.Attribute ComputeTaskNoResultCacheAttribute Implements System.Runtime.InteropServices._Attribute Inherited Members System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Boolean) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Boolean) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Module) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.IsDefined(System.Reflection.Module, System.Type) System.Attribute.IsDefined(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Boolean) System.Attribute.IsDefined(System.Reflection.Assembly, System.Type) System.Attribute.IsDefined(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.Equals(System.Object) System.Attribute.GetHashCode() System.Attribute.Match(System.Object) System.Attribute.IsDefaultAttribute() System.Attribute.System.Runtime.InteropServices._Attribute.GetTypeInfoCount(System.UInt32) System.Attribute.System.Runtime.InteropServices._Attribute.GetTypeInfo(System.UInt32, System.UInt32, System.IntPtr) System.Attribute.System.Runtime.InteropServices._Attribute.GetIDsOfNames(System.Guid, System.IntPtr, System.UInt32, System.UInt32, System.IntPtr) System.Attribute.System.Runtime.InteropServices._Attribute.Invoke(System.UInt32, System.Guid, System.UInt32, System.Int16, System.IntPtr, System.IntPtr, System.IntPtr, System.IntPtr) System.Attribute.TypeId System.Object.ToString() System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Compute Assembly : Apache.Ignite.Core.dll Syntax [AttributeUsage(AttributeTargets.Class | AttributeTargets.Interface)] public sealed class ComputeTaskNoResultCacheAttribute : Attribute, _Attribute Implements System.Runtime.InteropServices._Attribute"
  },
  "api/Apache.Ignite.Core.Compute.ComputeTaskSplitAdapter-3.html": {
    "href": "api/Apache.Ignite.Core.Compute.ComputeTaskSplitAdapter-3.html",
    "title": "Class ComputeTaskSplitAdapter<TArg, TJobRes, TTaskRes> | Apache Ignite.NET",
    "keywords": "Class ComputeTaskSplitAdapter<TArg, TJobRes, TTaskRes> This class defines simplified adapter for IComputeTask<TArg, TJobRes, TRes> . This adapter can be used when jobs can be randomly assigned to available Ignite nodes. This adapter is sufficient in most homogeneous environments where all nodes are equally suitable for executing grid job, see Split(Int32, TArg) method for more details. Inheritance System.Object ComputeTaskAdapter <TArg, TJobRes, TTaskRes> ComputeTaskSplitAdapter<TArg, TJobRes, TTaskRes> Implements IComputeTask <TArg, TJobRes, TTaskRes> Inherited Members ComputeTaskAdapter<TArg, TJobRes, TTaskRes>.OnResult(IComputeJobResult<TJobRes>, IList<IComputeJobResult<TJobRes>>) ComputeTaskAdapter<TArg, TJobRes, TTaskRes>.Map(IList<IClusterNode>, TArg) ComputeTaskAdapter<TArg, TJobRes, TTaskRes>.Reduce(IList<IComputeJobResult<TJobRes>>) System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Compute Assembly : Apache.Ignite.Core.dll Syntax public abstract class ComputeTaskSplitAdapter<TArg, TJobRes, TTaskRes> : ComputeTaskAdapter<TArg, TJobRes, TTaskRes>, IComputeTask<TArg, TJobRes, TTaskRes> Type Parameters Name Description TArg TJobRes TTaskRes Methods Map(IList<IClusterNode>, TArg) This method is called to map or split Ignite task into multiple Ignite jobs. This is the first method that gets called when task execution starts. Declaration public override IDictionary<IComputeJob<TJobRes>, IClusterNode> Map(IList<IClusterNode> subgrid, TArg arg) Parameters Type Name Description System.Collections.Generic.IList < IClusterNode > subgrid Nodes available for this task execution. Note that order of nodes is guaranteed to be randomized by container. This ensures that every time you simply iterate through Ignite nodes, the order of nodes will be random which over time should result into all nodes being used equally. TArg arg Task execution argument. Can be null . This is the same argument as the one passed into ICompute.Execute() methods. Returns Type Description System.Collections.Generic.IDictionary < IComputeJob <TJobRes>, IClusterNode > Map of Ignite jobs assigned to subgrid node. If null or empty map is returned, exception will be thrown. Overrides Apache.Ignite.Core.Compute.ComputeTaskAdapter<TArg, TJobRes, TTaskRes>.Map(System.Collections.Generic.IList<Apache.Ignite.Core.Cluster.IClusterNode>, TArg) Exceptions Type Condition IgniteException Split returned no jobs. Split(Int32, TArg) This is a simplified version of Map(IList<IClusterNode>, TArg) method. This method basically takes given argument and splits it into a collection of Apache.Ignite.Core.Impl.Compute.IComputeJob using provided grid size as indication of how many node are available. These jobs will be randomly mapped to available Ignite nodes. Note that if number of jobs is greater than number of Ignite nodes (i.e, grid size), the grid nodes will be reused and some jobs will end up on the same Ignite nodes. Declaration protected abstract ICollection<IComputeJob<TJobRes>> Split(int gridSize, TArg arg) Parameters Type Name Description System.Int32 gridSize Number of available Ignite nodes. Note that returned number of jobs can be less, equal or greater than this grid size. TArg arg Task execution argument. Can be null . Returns Type Description System.Collections.Generic.ICollection < IComputeJob <TJobRes>> Implements IComputeTask<TArg, TJobRes, TRes>"
  },
  "api/Apache.Ignite.Core.Configuration.DataStorageConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Configuration.DataStorageConfiguration.html",
    "title": "Class DataStorageConfiguration | Apache Ignite.NET",
    "keywords": "Class DataStorageConfiguration Data storage configuration for Ignite page memory. The page memory is a manageable off-heap based memory architecture that divides all expandable data regions into pages of fixed size. An individual page can store one or many cache key-value entries that allows reusing the memory in the most efficient way and avoid memory fragmentation issues. By default, the page memory allocates a single expandable data region. All the caches that will be configured in an application will be mapped to this data region by default, thus, all the cache data will reside in that data region. Inheritance System.Object DataStorageConfiguration Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Configuration Assembly : Apache.Ignite.Core.dll Syntax public class DataStorageConfiguration Constructors DataStorageConfiguration() Initializes a new instance of the DataStorageConfiguration class. Declaration public DataStorageConfiguration() Fields DefaultCheckpointFrequency Default value for CheckpointFrequency . Declaration public static readonly TimeSpan DefaultCheckpointFrequency Field Value Type Description System.TimeSpan DefaultCheckpointThreads Default value for CheckpointThreads . Declaration public const int DefaultCheckpointThreads = 4 Field Value Type Description System.Int32 DefaultCheckpointWriteOrder Default value for CheckpointWriteOrder . Declaration public const CheckpointWriteOrder DefaultCheckpointWriteOrder = CheckpointWriteOrder.Sequential Field Value Type Description CheckpointWriteOrder DefaultConcurrencyLevel The default concurrency level. Declaration public const int DefaultConcurrencyLevel = 0 Field Value Type Description System.Int32 DefaultDataRegionName Default name is assigned to default data region if no user-defined DefaultDataRegionConfiguration is specified. Declaration public const string DefaultDataRegionName = \"default\" Field Value Type Description System.String DefaultLockWaitTime Default value for LockWaitTime . Declaration public static readonly TimeSpan DefaultLockWaitTime Field Value Type Description System.TimeSpan DefaultMetricsRateTimeInterval The default rate time interval. Declaration public static readonly TimeSpan DefaultMetricsRateTimeInterval Field Value Type Description System.TimeSpan DefaultMetricsSubIntervalCount The default sub intervals. Declaration public const int DefaultMetricsSubIntervalCount = 5 Field Value Type Description System.Int32 DefaultPageSize The default page size. Declaration public const int DefaultPageSize = 4096 Field Value Type Description System.Int32 DefaultSystemRegionInitialSize Default size of a memory chunk reserved for system cache initially. Declaration public const long DefaultSystemRegionInitialSize = 41943040L Field Value Type Description System.Int64 DefaultSystemRegionMaxSize Default max size of a memory chunk for the system cache. Declaration public const long DefaultSystemRegionMaxSize = 104857600L Field Value Type Description System.Int64 DefaultTlbSize Default value for WalThreadLocalBufferSize . Declaration public const int DefaultTlbSize = 131072 Field Value Type Description System.Int32 DefaultWalArchivePath Default value for WalArchivePath . Declaration public const string DefaultWalArchivePath = \"db/wal/archive\" Field Value Type Description System.String DefaultWalAutoArchiveAfterInactivity Default value for WalFlushFrequency . Declaration public static readonly TimeSpan DefaultWalAutoArchiveAfterInactivity Field Value Type Description System.TimeSpan DefaultWalCompactionEnabled Default value for WalCompactionEnabled . Declaration public const bool DefaultWalCompactionEnabled = false Field Value Type Description System.Boolean DefaultWalFlushFrequency Default value for WalFlushFrequency . Declaration public static readonly TimeSpan DefaultWalFlushFrequency Field Value Type Description System.TimeSpan DefaultWalFsyncDelayNanos Default value for WalFsyncDelayNanos . Declaration public const long DefaultWalFsyncDelayNanos = 1000L Field Value Type Description System.Int64 DefaultWalHistorySize Default value for WalHistorySize . Declaration public const int DefaultWalHistorySize = 20 Field Value Type Description System.Int32 DefaultWalMode Default value for WalMode . Declaration public const WalMode DefaultWalMode = WalMode.LogOnly Field Value Type Description WalMode DefaultWalPath Default value for WalPath . Declaration public const string DefaultWalPath = \"db/wal\" Field Value Type Description System.String DefaultWalRecordIteratorBufferSize Default value for WalRecordIteratorBufferSize . Declaration public const int DefaultWalRecordIteratorBufferSize = 67108864 Field Value Type Description System.Int32 DefaultWalSegments Default value for WalSegments . Declaration public const int DefaultWalSegments = 10 Field Value Type Description System.Int32 DefaultWalSegmentSize Default value for WalSegmentSize . Declaration public const int DefaultWalSegmentSize = 67108864 Field Value Type Description System.Int32 DefaultWriteThrottlingEnabled Default value for WriteThrottlingEnabled . Declaration public const bool DefaultWriteThrottlingEnabled = false Field Value Type Description System.Boolean Properties AlwaysWriteFullPages Gets or sets a value indicating whether full pages should always be written. Declaration public bool AlwaysWriteFullPages { get; set; } Property Value Type Description System.Boolean CheckpointFrequency Gets or sets the checkpointing frequency which is a minimal interval when the dirty pages will be written to the Persistent Store. Declaration public TimeSpan CheckpointFrequency { get; set; } Property Value Type Description System.TimeSpan 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 MetricsEnabled Gets or sets a value indicating whether to enable data storage metrics. See GetDataStorageMetrics() . Declaration public bool MetricsEnabled { get; set; } Property Value Type Description System.Boolean MetricsRateTimeInterval Gets or sets the length of the time interval for rate-based metrics. This interval defines a window over which hits will be tracked. Declaration public TimeSpan MetricsRateTimeInterval { get; set; } Property Value Type Description System.TimeSpan MetricsSubIntervalCount Number of sub-intervals to split the MetricsRateTimeInterval into to track the update history. Declaration public int MetricsSubIntervalCount { get; set; } Property Value Type Description System.Int32 PageSize Gets or sets the size of the memory page. Declaration public int PageSize { get; set; } Property Value Type Description System.Int32 StoragePath Gets or sets the path where data and indexes will be persisted. Declaration public string StoragePath { get; set; } Property Value Type Description System.String SystemRegionInitialSize Gets or sets the size of a memory chunk reserved for system needs. Declaration public long SystemRegionInitialSize { get; set; } Property Value Type Description System.Int64 SystemRegionMaxSize Gets or sets the maximum memory region size reserved for system needs. Declaration public long SystemRegionMaxSize { get; set; } Property Value Type Description System.Int64 WalArchivePath Gets or sets the path to the directory where WAL (Write Ahead Log) archive is stored. Every WAL segment will be fully copied to this directory before it can be reused for WAL purposes. Declaration public string WalArchivePath { get; set; } Property Value Type Description System.String WalAutoArchiveAfterInactivity Gets or sets the inactivity time after which to run WAL segment auto archiving. Declaration public TimeSpan WalAutoArchiveAfterInactivity { get; set; } Property Value Type Description System.TimeSpan WalCompactionEnabled Gets or sets flag indicating whether WAL compaction is enabled. If true, system filters and compresses WAL archive in background. Compressed WAL archive gets automatically decompressed on demand. Declaration public bool WalCompactionEnabled { get; set; } Property Value Type Description System.Boolean WalFlushFrequency Gets or sets the WAL (Write Ahead Log) flush frequency. Declaration public TimeSpan WalFlushFrequency { get; set; } Property Value Type Description System.TimeSpan WalFsyncDelayNanos Gets or sets the WAL (Write Ahead Log) fsync (disk sync) delay, in nanoseconds Declaration public long WalFsyncDelayNanos { get; set; } Property Value Type Description System.Int64 WalHistorySize Gets or sets the number of checkpoints to store in WAL (Write Ahead Log) history. Declaration public int WalHistorySize { get; set; } Property Value Type Description System.Int32 WalMode Gets or sets the WAL (Write Ahead Log) mode. Declaration public WalMode WalMode { get; set; } Property Value Type Description WalMode WalPath Gets or sets the path to the directory where WAL (Write Ahead Log) is stored. Declaration public string WalPath { get; set; } Property Value Type Description System.String WalRecordIteratorBufferSize Gets or sets the size of the WAL (Write Ahead Log) record iterator buffer, in bytes. Declaration public int WalRecordIteratorBufferSize { get; set; } Property Value Type Description System.Int32 WalSegments Gets or sets a number of WAL (Write Ahead Log) segments to work with. For performance reasons, the whole WAL is split into files of fixed length called segments. Declaration public int WalSegments { get; set; } Property Value Type Description System.Int32 WalSegmentSize Gets or sets the size of the WAL (Write Ahead Log) segment. For performance reasons, the whole WAL is split into files of fixed length called segments. Declaration public int WalSegmentSize { get; set; } Property Value Type Description System.Int32 WalThreadLocalBufferSize Gets or sets the size of the TLB (Thread-Local Buffer), in bytes. Declaration public int WalThreadLocalBufferSize { get; set; } Property Value Type Description System.Int32 WriteThrottlingEnabled Gets or sets a value indicating whether threads that generate dirty pages too fast during ongoing checkpoint will be throttled. Declaration public bool WriteThrottlingEnabled { get; set; } Property Value Type Description System.Boolean"
  },
  "api/Apache.Ignite.Core.Configuration.SqlConnectorConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Configuration.SqlConnectorConfiguration.html",
    "title": "Class SqlConnectorConfiguration | Apache Ignite.NET",
    "keywords": "Class SqlConnectorConfiguration SQL connector configuration (for ODBC and JDBC). Inheritance System.Object SqlConnectorConfiguration Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Configuration Assembly : Apache.Ignite.Core.dll Syntax [Obsolete(\"Use ClientConnectorConfiguration instead.\")] public class SqlConnectorConfiguration Constructors SqlConnectorConfiguration() Initializes a new instance of the SqlConnectorConfiguration class. Declaration public SqlConnectorConfiguration() Fields DefaultMaxOpenCursorsPerConnection Default maximum number of open cursors per connection. Declaration public const int DefaultMaxOpenCursorsPerConnection = 128 Field Value Type Description System.Int32 DefaultPort Default port. Declaration public const int DefaultPort = 10800 Field Value Type Description System.Int32 DefaultPortRange Default port range. Declaration public const int DefaultPortRange = 100 Field Value Type Description System.Int32 DefaultSocketBufferSize Default socket buffer size. Declaration public const int DefaultSocketBufferSize = 0 Field Value Type Description System.Int32 DefaultTcpNoDelay Default value of TcpNoDelay property. Declaration public const bool DefaultTcpNoDelay = true Field Value Type Description System.Boolean DefaultThreadPoolSize Default SQL connector thread pool size. Declaration public static readonly int DefaultThreadPoolSize Field Value Type Description System.Int32 Properties Host Gets or sets the host. Declaration public string Host { get; set; } Property Value Type Description System.String MaxOpenCursorsPerConnection Gets or sets the maximum open cursors per connection. Declaration public int MaxOpenCursorsPerConnection { get; set; } Property Value Type Description System.Int32 Port Gets or sets the port. Declaration public int Port { get; set; } Property Value Type Description System.Int32 PortRange Gets or sets the port range. Declaration public int PortRange { get; set; } Property Value Type Description System.Int32 SocketReceiveBufferSize Gets or sets the size of the socket receive buffer. When set to 0, operating system default is used. Declaration public int SocketReceiveBufferSize { get; set; } Property Value Type Description System.Int32 SocketSendBufferSize Gets or sets the size of the socket send buffer. When set to 0, operating system default is used. Declaration public int SocketSendBufferSize { get; set; } Property Value Type Description System.Int32 TcpNoDelay Gets or sets the value for TCP_NODELAY socket option. Each socket will be opened using provided value. Setting this option to true disables Nagle's algorithm for socket decreasing latency and delivery time for small messages. For systems that work under heavy network load it is advisable to set this value to false . Declaration public bool TcpNoDelay { get; set; } Property Value Type Description System.Boolean ThreadPoolSize Gets or sets the size of the thread pool. Declaration public int ThreadPoolSize { get; set; } Property Value Type Description System.Int32"
  },
  "api/Apache.Ignite.Core.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.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.Events.LocalEventListener-1.html": {
    "href": "api/Apache.Ignite.Core.Events.LocalEventListener-1.html",
    "title": "Class LocalEventListener<T> | Apache Ignite.NET",
    "keywords": "Class LocalEventListener<T> Generic local event listener holder, see LocalEventListeners . Inheritance System.Object LocalEventListener LocalEventListener<T> Inherited Members LocalEventListener.EventTypes System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Events Assembly : Apache.Ignite.Core.dll Syntax public class LocalEventListener<T> : LocalEventListener where T : IEvent Type Parameters Name Description T Properties Listener Gets or sets the listener. Declaration public IEventListener<T> Listener { get; set; } Property Value Type Description IEventListener <T>"
  },
  "api/Apache.Ignite.Core.Events.LocalEventListener.html": {
    "href": "api/Apache.Ignite.Core.Events.LocalEventListener.html",
    "title": "Class LocalEventListener | Apache Ignite.NET",
    "keywords": "Class LocalEventListener Abstract local event listener holder for LocalEventListeners . Use LocalEventListener<T> derived class. Inheritance System.Object LocalEventListener LocalEventListener <T> Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Events Assembly : Apache.Ignite.Core.dll Syntax public abstract class LocalEventListener Constructors LocalEventListener() Initializes a new instance of the LocalEventListener class. Declaration protected LocalEventListener() Properties EventTypes Gets or sets the event types. Declaration public ICollection<int> EventTypes { get; set; } Property Value Type Description System.Collections.Generic.ICollection < System.Int32 >"
  },
  "api/Apache.Ignite.Core.Events.MemoryEventStorageSpi.html": {
    "href": "api/Apache.Ignite.Core.Events.MemoryEventStorageSpi.html",
    "title": "Class MemoryEventStorageSpi | Apache Ignite.NET",
    "keywords": "Class MemoryEventStorageSpi In-memory event storage. Inheritance System.Object MemoryEventStorageSpi Implements IEventStorageSpi Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Events Assembly : Apache.Ignite.Core.dll Syntax public class MemoryEventStorageSpi : IEventStorageSpi Constructors MemoryEventStorageSpi() Initializes a new instance of the MemoryEventStorageSpi class. Declaration public MemoryEventStorageSpi() Fields DefaultExpirationTimeout The default expiration timeout. Declaration public static readonly TimeSpan DefaultExpirationTimeout Field Value Type Description System.TimeSpan DefaultMaxEventCount Default event count limit. Declaration public const long DefaultMaxEventCount = 10000L Field Value Type Description System.Int64 Properties ExpirationTimeout Gets or sets the expiration timeout for stored events. Negative value means no expiration. Defaults to -1 second. Declaration public TimeSpan ExpirationTimeout { get; set; } Property Value Type Description System.TimeSpan MaxEventCount Gets or sets the maximum event count to store. When this limit is reached, older events are removed. Defaults to DefaultMaxEventCount . Declaration public long MaxEventCount { get; set; } Property Value Type Description System.Int64 Implements IEventStorageSpi"
  },
  "api/Apache.Ignite.Core.Events.NoopEventStorageSpi.html": {
    "href": "api/Apache.Ignite.Core.Events.NoopEventStorageSpi.html",
    "title": "Class NoopEventStorageSpi | Apache Ignite.NET",
    "keywords": "Class NoopEventStorageSpi No-op event storage interface, does not store anything. Inheritance System.Object NoopEventStorageSpi Implements IEventStorageSpi Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Events Assembly : Apache.Ignite.Core.dll Syntax public class NoopEventStorageSpi : IEventStorageSpi Implements IEventStorageSpi"
  },
  "api/Apache.Ignite.Core.Plugin.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.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.Binary.IBinaryReader.html": {
    "href": "api/Apache.Ignite.Core.Binary.IBinaryReader.html",
    "title": "Interface IBinaryReader | Apache Ignite.NET",
    "keywords": "Interface IBinaryReader Reader for binary objects. Namespace : Apache.Ignite.Core.Binary Assembly : Apache.Ignite.Core.dll Syntax public interface IBinaryReader Methods GetRawReader() Get raw reader. Declaration IBinaryRawReader GetRawReader() Returns Type Description IBinaryRawReader Raw reader. ReadArray<T>(String) Read named object array. Declaration T[] ReadArray<T>(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description T[] Object array. Type Parameters Name Description T ReadBoolean(String) Read named boolean value. Declaration bool ReadBoolean(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Boolean Boolean value. ReadBooleanArray(String) Read named boolean array. Declaration bool[] ReadBooleanArray(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Boolean [] Boolean array. ReadByte(String) Read named byte value. Declaration byte ReadByte(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Byte Byte value. ReadByteArray(String) Read named byte array. Declaration byte[] ReadByteArray(string fieldName) Parameters Type Name Description System.String fieldName Returns Type Description System.Byte [] Byte array. ReadChar(String) Read named char value. Declaration char ReadChar(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Char Char value. ReadCharArray(String) Read named char array. Declaration char[] ReadCharArray(string fieldName) Parameters Type Name Description System.String fieldName Returns Type Description System.Char [] Char array. ReadCollection(String) Read named collection. Declaration ICollection ReadCollection(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Collections.ICollection Collection. ReadCollection(String, Func<Int32, ICollection>, Action<ICollection, Object>) Read named collection. Declaration ICollection ReadCollection(string fieldName, Func<int, ICollection> factory, Action<ICollection, object> adder) Parameters Type Name Description System.String fieldName Field name. System.Func < System.Int32 , System.Collections.ICollection > factory Factory. System.Action < System.Collections.ICollection , System.Object > adder Adder. Returns Type Description System.Collections.ICollection Collection. ReadDecimal(String) Read named decimal value. Declaration decimal ? ReadDecimal(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Nullable < System.Decimal > Decimal value. ReadDecimalArray(String) Read named decimal array. Declaration decimal ? [] ReadDecimalArray(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Nullable < System.Decimal >[] Decimal array. ReadDictionary(String) Read named dictionary. Declaration IDictionary ReadDictionary(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Collections.IDictionary Dictionary. ReadDictionary(String, Func<Int32, IDictionary>) Read named dictionary. Declaration IDictionary ReadDictionary(string fieldName, Func<int, IDictionary> factory) Parameters Type Name Description System.String fieldName Field name. System.Func < System.Int32 , System.Collections.IDictionary > factory Factory. Returns Type Description System.Collections.IDictionary Dictionary. ReadDouble(String) Read named double value. Declaration double ReadDouble(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Double Double value. ReadDoubleArray(String) Read named double array. Declaration double[] ReadDoubleArray(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Double [] Double array. ReadEnum<T>(String) Read named enum value. Declaration T ReadEnum<T>(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description T Enum value. Type Parameters Name Description T ReadEnumArray<T>(String) Read named enum array. Declaration T[] ReadEnumArray<T>(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description T[] Enum array. Type Parameters Name Description T ReadFloat(String) Read named float value. Declaration float ReadFloat(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Single Float value. ReadFloatArray(String) Read named float array. Declaration float[] ReadFloatArray(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Single [] Float array. ReadGuid(String) Read named GUID value. Declaration Guid? ReadGuid(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Nullable < System.Guid > GUID value. ReadGuidArray(String) Read named GUID array. Declaration Guid? [] ReadGuidArray(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Nullable < System.Guid >[] GUID array. ReadInt(String) Read named int value. Declaration int ReadInt(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Int32 Int value. ReadIntArray(String) Read named int array. Declaration int[] ReadIntArray(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Int32 [] Int array. ReadLong(String) Read named long value. Declaration long ReadLong(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Int64 Long value. ReadLongArray(String) Read named long array. Declaration long[] ReadLongArray(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Int64 [] Long array. ReadObject<T>(String) Read named object. Declaration T ReadObject<T>(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description T Object. Type Parameters Name Description T ReadShort(String) Read named short value. Declaration short ReadShort(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Int16 Short value. ReadShortArray(String) Read named short array. Declaration short[] ReadShortArray(string fieldName) Parameters Type Name Description System.String fieldName Returns Type Description System.Int16 [] Short array. ReadString(String) Read named string value. Declaration string ReadString(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.String String value. ReadStringArray(String) Read named string array. Declaration string[] ReadStringArray(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.String [] String array. ReadTimestamp(String) Read named date value in UTC form. Declaration DateTime? ReadTimestamp(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Nullable < System.DateTime > Date value. ReadTimestampArray(String) Read named date array in UTC form. Declaration DateTime? [] ReadTimestampArray(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Nullable < System.DateTime >[] Date array."
  },
  "api/Apache.Ignite.Core.Cache.Affinity.AffinityKey.html": {
    "href": "api/Apache.Ignite.Core.Cache.Affinity.AffinityKey.html",
    "title": "Struct AffinityKey | Apache Ignite.NET",
    "keywords": "Struct AffinityKey Optional wrapper for cache keys to provide support for custom affinity mapping. The value returned by Affinity will be used for key-to-node affinity. Implements System.IEquatable < AffinityKey > Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() Namespace : Apache.Ignite.Core.Cache.Affinity Assembly : Apache.Ignite.Core.dll Syntax public struct AffinityKey : IEquatable<AffinityKey>, IBinaryWriteAware Constructors AffinityKey(Object) Initializes a new instance of the AffinityKey struct. Declaration public AffinityKey(object key) Parameters Type Name Description System.Object key The key. AffinityKey(Object, Object) Initializes a new instance of the AffinityKey struct. Declaration public AffinityKey(object key, object affinity) Parameters Type Name Description System.Object key The key. System.Object affinity The affinity key. Properties Affinity Gets the affinity key. Declaration public object Affinity { get; } Property Value Type Description System.Object Key Gets the key. Declaration public object Key { get; } Property Value Type Description System.Object Methods Equals(AffinityKey) Indicates whether the current object is equal to another object of the same type. Declaration public bool Equals(AffinityKey other) Parameters Type Name Description AffinityKey other An object to compare with this object. Returns Type Description System.Boolean true if the current object is equal to the other parameter; otherwise, false. Equals(Object) Determines whether the specified System.Object , is equal to this instance. Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj The System.Object to compare with this instance. Returns Type Description System.Boolean true if the specified System.Object is equal to this instance; otherwise, false . Overrides System.ValueType.Equals(System.Object) GetHashCode() Returns a hash code for this instance. Declaration public override int GetHashCode() Returns Type Description System.Int32 A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Overrides System.ValueType.GetHashCode() ToString() Returns a System.String that represents this instance. Declaration public override string ToString() Returns Type Description System.String A System.String that represents this instance. Overrides System.ValueType.ToString() WriteBinary(IBinaryWriter) Writes this object to the given writer. Declaration public void WriteBinary(IBinaryWriter writer) Parameters Type Name Description IBinaryWriter writer Writer. Operators Equality(AffinityKey, AffinityKey) Implements the operator ==. Declaration public static bool operator ==(AffinityKey left, AffinityKey right) Parameters Type Name Description AffinityKey left The left. AffinityKey right The right. Returns Type Description System.Boolean The result of the operator. Inequality(AffinityKey, AffinityKey) Implements the operator !=. Declaration public static bool operator !=(AffinityKey left, AffinityKey right) Parameters Type Name Description AffinityKey left The left. AffinityKey right The right. Returns Type Description System.Boolean The result of the operator. Implements System.IEquatable<T>"
  },
  "api/Apache.Ignite.Core.Cache.CacheEntryProcessorException.html": {
    "href": "api/Apache.Ignite.Core.Cache.CacheEntryProcessorException.html",
    "title": "Class CacheEntryProcessorException | Apache Ignite.NET",
    "keywords": "Class CacheEntryProcessorException An exception to indicate a problem occurred attempting to execute an ICacheEntryProcessor<TK, TV, TArg, TRes> against an entry. Inheritance System.Object System.Exception IgniteException CacheEntryProcessorException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class CacheEntryProcessorException : IgniteException, ISerializable, _Exception Constructors CacheEntryProcessorException() Initializes a new instance of the CacheEntryProcessorException class. Declaration public CacheEntryProcessorException() CacheEntryProcessorException(Exception) Initializes a new instance of the CacheEntryProcessorException class. Declaration public CacheEntryProcessorException(Exception innerException) Parameters Type Name Description System.Exception innerException The inner exception. CacheEntryProcessorException(SerializationInfo, StreamingContext) Initializes a new instance of the CacheEntryProcessorException class. Declaration protected CacheEntryProcessorException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. CacheEntryProcessorException(String) Initializes a new instance of the CacheEntryProcessorException class. Declaration public CacheEntryProcessorException(string message) Parameters Type Name Description System.String message The message that describes the error. CacheEntryProcessorException(String, Exception) Initializes a new instance of the CacheEntryProcessorException class. Declaration public CacheEntryProcessorException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Cache.Configuration.CacheMode.html": {
    "href": "api/Apache.Ignite.Core.Cache.Configuration.CacheMode.html",
    "title": "Enum CacheMode | Apache Ignite.NET",
    "keywords": "Enum CacheMode Caching modes. Namespace : Apache.Ignite.Core.Cache.Configuration Assembly : Apache.Ignite.Core.dll Syntax public enum CacheMode Fields Name Description Local Specifies local-only cache behaviour. In this mode caches residing on different grid nodes will not know about each other. Other than distribution, Local caches still have all the caching features, such as eviction, expiration, swapping, querying, etc... This mode is very useful when caching read-only data or data that automatically expires at a certain interval and then automatically reloaded from persistence store. Partitioned Specifies partitioned cache behaviour. In this mode the overall key set will be divided into partitions and all partitions will be split equally between participating nodes. Note that partitioned cache is always fronted by local 'near' cache which stores most recent data. Replicated Specifies fully replicated cache behavior. In this mode all the keys are distributed to all participating nodes."
  },
  "api/Apache.Ignite.Core.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 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 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."
  },
  "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.Log4Net.html": {
    "href": "api/Apache.Ignite.Log4Net.html",
    "title": "Namespace Apache.Ignite.Log4Net | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Log4Net Classes IgniteLog4NetLogger Ignite log4net integration."
  },
  "api/Apache.Ignite.NLog.IgniteNLogLogger.html": {
    "href": "api/Apache.Ignite.NLog.IgniteNLogLogger.html",
    "title": "Class IgniteNLogLogger | Apache Ignite.NET",
    "keywords": "Class IgniteNLogLogger Ignite NLog integration. Inheritance System.Object IgniteNLogLogger Implements ILogger Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.NLog Assembly : Apache.Ignite.NLog.dll Syntax public class IgniteNLogLogger : ILogger Constructors IgniteNLogLogger() Initializes a new instance of the IgniteNLogLogger class using the NLog.LogManager.GetCurrentClassLogger to retrieve the NLog logger. Declaration public IgniteNLogLogger() IgniteNLogLogger(Logger) Initializes a new instance of the IgniteNLogLogger class. Declaration public IgniteNLogLogger(Logger logger) Parameters Type Name Description NLog.Logger logger The NLog logger instance. Methods ConvertLogLevel(LogLevel) Converts the Ignite LogLevel to the NLog log level. Declaration public static LogLevel ConvertLogLevel(LogLevel level) Parameters Type Name Description LogLevel level The Ignite log level. Returns Type Description NLog.LogLevel Corresponding NLog log level. IsEnabled(LogLevel) Determines whether the specified log level is enabled. Declaration public bool IsEnabled(LogLevel level) Parameters Type Name Description LogLevel level The level. Returns Type Description System.Boolean Value indicating whether the specified log level is enabled Exceptions Type Condition System.NotImplementedException Log(LogLevel, String, Object[], IFormatProvider, String, String, Exception) Logs the specified message. Declaration public void Log(LogLevel level, string message, object[] args, IFormatProvider formatProvider, string category, string nativeErrorInfo, Exception ex) Parameters Type Name Description LogLevel level The level. System.String message The message. System.Object [] args The arguments to format message . Can be null (formatting will not occur). System.IFormatProvider formatProvider The format provider. Can be null if args is null. System.String category The logging category name. System.String nativeErrorInfo The native error information. System.Exception ex The exception. Can be null. Exceptions Type Condition System.NotImplementedException Implements ILogger"
  },
  "api/Apache.Ignite.NLog.html": {
    "href": "api/Apache.Ignite.NLog.html",
    "title": "Namespace Apache.Ignite.NLog | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.NLog Classes IgniteNLogLogger Ignite NLog integration."
  },
  "api/Apache.Ignite.Core.Binary.BinaryConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Binary.BinaryConfiguration.html",
    "title": "Class BinaryConfiguration | Apache Ignite.NET",
    "keywords": "Class BinaryConfiguration Binary type configuration. Inheritance System.Object BinaryConfiguration Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Binary Assembly : Apache.Ignite.Core.dll Syntax public class BinaryConfiguration Constructors BinaryConfiguration() Initializes a new instance of the BinaryConfiguration class. Declaration public BinaryConfiguration() BinaryConfiguration(BinaryConfiguration) Initializes a new instance of the BinaryConfiguration class. Declaration public BinaryConfiguration(BinaryConfiguration cfg) Parameters Type Name Description BinaryConfiguration cfg The binary configuration to copy. BinaryConfiguration(Type[]) Initializes a new instance of the BinaryConfiguration class. Declaration public BinaryConfiguration(params Type[] binaryTypes) Parameters Type Name Description System.Type [] binaryTypes Binary types to register. Fields DefaultCompactFooter Default CompactFooter setting. Declaration public const bool DefaultCompactFooter = true Field Value Type Description System.Boolean DefaultKeepDeserialized Default KeepDeserialized setting. Declaration public const bool DefaultKeepDeserialized = true Field Value Type Description System.Boolean Properties CompactFooter Gets or sets a value indicating whether to write footers in compact form. When enabled, Ignite will not write fields metadata when serializing objects, because internally metadata is distributed inside cluster. This increases serialization performance. WARNING! This mode should be disabled when already serialized data can be taken from some external sources (e.g.cache store which stores data in binary form, data center replication, etc.). Otherwise binary objects without any associated metadata could could not be deserialized. Declaration public bool CompactFooter { get; set; } Property Value Type Description System.Boolean IdMapper Default ID mapper. Declaration public IBinaryIdMapper IdMapper { get; set; } Property Value Type Description IBinaryIdMapper KeepDeserialized Default keep deserialized flag. Declaration public bool KeepDeserialized { get; set; } Property Value Type Description System.Boolean NameMapper Default name mapper. Declaration public IBinaryNameMapper NameMapper { get; set; } Property Value Type Description IBinaryNameMapper Serializer Default serializer. Declaration public IBinarySerializer Serializer { get; set; } Property Value Type Description IBinarySerializer TypeConfigurations Type configurations. Declaration public ICollection<BinaryTypeConfiguration> TypeConfigurations { get; set; } Property Value Type Description System.Collections.Generic.ICollection < BinaryTypeConfiguration > Types Gets or sets a collection of assembly-qualified type names (the result of System.Type.AssemblyQualifiedName ) for binarizable types. Shorthand for creating BinaryTypeConfiguration . Declaration public ICollection<string> Types { get; set; } Property Value Type Description System.Collections.Generic.ICollection < System.String >"
  },
  "api/Apache.Ignite.Core.Binary.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.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. Interfaces IIgniteClient Main entry point for Ignite Thin Client APIs. You can obtain an instance of IIgniteClient through one of the StartClient() overloads. Instances of this class and all nested APIs are thread safe. Enums ClientStatusCode Client status codes (see StatusCode )."
  },
  "api/Apache.Ignite.Core.Cluster.ClusterGroupEmptyException.html": {
    "href": "api/Apache.Ignite.Core.Cluster.ClusterGroupEmptyException.html",
    "title": "Class ClusterGroupEmptyException | Apache Ignite.NET",
    "keywords": "Class ClusterGroupEmptyException Indicates an illegal call on empty projection. Thrown by projection when operation that requires at least one node is called on empty projection. Inheritance System.Object System.Exception IgniteException ClusterGroupEmptyException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cluster Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class ClusterGroupEmptyException : IgniteException, ISerializable, _Exception Constructors ClusterGroupEmptyException() Initializes a new instance of the ClusterGroupEmptyException class. Declaration public ClusterGroupEmptyException() ClusterGroupEmptyException(SerializationInfo, StreamingContext) Initializes a new instance of the ClusterGroupEmptyException class. Declaration protected ClusterGroupEmptyException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization info. System.Runtime.Serialization.StreamingContext ctx Streaming context. ClusterGroupEmptyException(String) Initializes a new instance of the ClusterGroupEmptyException class. Declaration public ClusterGroupEmptyException(string msg) Parameters Type Name Description System.String msg Exception message. ClusterGroupEmptyException(String, Exception) Initializes a new instance of the ClusterGroupEmptyException class. Declaration public ClusterGroupEmptyException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Common.IgniteFutureCancelledException.html": {
    "href": "api/Apache.Ignite.Core.Common.IgniteFutureCancelledException.html",
    "title": "Class IgniteFutureCancelledException | Apache Ignite.NET",
    "keywords": "Class IgniteFutureCancelledException Indicates future cancellation within Ignite. Inheritance System.Object System.Exception IgniteException IgniteFutureCancelledException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Common Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class IgniteFutureCancelledException : IgniteException, ISerializable, _Exception Constructors IgniteFutureCancelledException() Initializes a new instance of the IgniteFutureCancelledException class. Declaration public IgniteFutureCancelledException() IgniteFutureCancelledException(SerializationInfo, StreamingContext) Initializes a new instance of the IgniteFutureCancelledException class. Declaration protected IgniteFutureCancelledException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. IgniteFutureCancelledException(String) Initializes a new instance of the IgniteFutureCancelledException class. Declaration public IgniteFutureCancelledException(string message) Parameters Type Name Description System.String message The message that describes the error. IgniteFutureCancelledException(String, Exception) Initializes a new instance of the IgniteFutureCancelledException class. Declaration public IgniteFutureCancelledException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Common.IgniteGuid.html": {
    "href": "api/Apache.Ignite.Core.Common.IgniteGuid.html",
    "title": "Struct IgniteGuid | Apache Ignite.NET",
    "keywords": "Struct IgniteGuid Ignite guid with additional local ID. Implements System.IEquatable < IgniteGuid > Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() Namespace : Apache.Ignite.Core.Common Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public struct IgniteGuid : IEquatable<IgniteGuid>, IBinaryWriteAware Constructors IgniteGuid(Guid, Int64) Initializes a new instance of the IgniteGuid struct. Declaration public IgniteGuid(Guid globalId, long localId) Parameters Type Name Description System.Guid globalId The global id. System.Int64 localId The local id. Properties GlobalId Gets the global id. Declaration public Guid GlobalId { get; } Property Value Type Description System.Guid LocalId Gets the local id. Declaration public long LocalId { get; } Property Value Type Description System.Int64 Methods Equals(IgniteGuid) Indicates whether the current object is equal to another object of the same type. Declaration public bool Equals(IgniteGuid other) Parameters Type Name Description IgniteGuid other An object to compare with this object. Returns Type Description System.Boolean true if the current object is equal to the other parameter; otherwise, false. Equals(Object) Determines whether the specified System.Object , is equal to this instance. Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj The System.Object to compare with this instance. Returns Type Description System.Boolean true if the specified System.Object is equal to this instance; otherwise, false . Overrides System.ValueType.Equals(System.Object) GetHashCode() Returns a hash code for this instance. Declaration public override int GetHashCode() Returns Type Description System.Int32 A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Overrides System.ValueType.GetHashCode() ToString() Returns a System.String that represents this instance. Declaration public override string ToString() Returns Type Description System.String A System.String that represents this instance. Overrides System.ValueType.ToString() Operators Equality(IgniteGuid, IgniteGuid) Implements the operator ==. Declaration public static bool operator ==(IgniteGuid a, IgniteGuid b) Parameters Type Name Description IgniteGuid a First item. IgniteGuid b Second item. Returns Type Description System.Boolean The result of the operator. Inequality(IgniteGuid, IgniteGuid) Implements the operator !=. Declaration public static bool operator !=(IgniteGuid a, IgniteGuid b) Parameters Type Name Description IgniteGuid a First item. IgniteGuid b Second item. Returns Type Description System.Boolean The result of the operator. Implements System.IEquatable<T>"
  },
  "api/Apache.Ignite.Core.Compute.ComputeTaskAdapter-3.html": {
    "href": "api/Apache.Ignite.Core.Compute.ComputeTaskAdapter-3.html",
    "title": "Class ComputeTaskAdapter<TArg, TJobRes, TTaskRes> | Apache Ignite.NET",
    "keywords": "Class ComputeTaskAdapter<TArg, TJobRes, TTaskRes> Convenience adapter for IComputeTask<TArg, TJobRes, TRes> interface Inheritance System.Object ComputeTaskAdapter<TArg, TJobRes, TTaskRes> ComputeTaskSplitAdapter<TArg, TJobRes, TTaskRes> Implements IComputeTask <TArg, TJobRes, TTaskRes> Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Compute Assembly : Apache.Ignite.Core.dll Syntax public abstract class ComputeTaskAdapter<TArg, TJobRes, TTaskRes> : IComputeTask<TArg, TJobRes, TTaskRes> Type Parameters Name Description TArg TJobRes TTaskRes Methods Map(IList<IClusterNode>, TArg) This method is called to map or split Ignite task into multiple Ignite jobs. This is the first method that gets called when task execution starts. Declaration public abstract IDictionary<IComputeJob<TJobRes>, IClusterNode> Map(IList<IClusterNode> subgrid, TArg arg) Parameters Type Name Description System.Collections.Generic.IList < IClusterNode > subgrid Nodes available for this task execution. Note that order of nodes is guaranteed to be randomized by container. This ensures that every time you simply iterate through Ignite nodes, the order of nodes will be random which over time should result into all nodes being used equally. TArg arg Task execution argument. Can be null . This is the same argument as the one passed into ICompute.Execute() methods. Returns Type Description System.Collections.Generic.IDictionary < IComputeJob <TJobRes>, IClusterNode > Map of Ignite jobs assigned to subgrid node. If null or empty map is returned, exception will be thrown. OnResult(IComputeJobResult<TJobRes>, IList<IComputeJobResult<TJobRes>>) Default implementation which will wait for all jobs to complete before calling Reduce(IList<IComputeJobResult<TJobRes>>) method. If remote job resulted in exception Exception is not null ), then Failover policy will be returned if the exception is instance of ClusterTopologyException or ComputeExecutionRejectedException , which means that remote node either failed or job execution was rejected before it got a chance to start. In all other cases the exception will be rethrown which will ultimately cause task to fail. Declaration public virtual ComputeJobResultPolicy OnResult(IComputeJobResult<TJobRes> res, IList<IComputeJobResult<TJobRes>> rcvd) Parameters Type Name Description IComputeJobResult <TJobRes> res Received remote Ignite executable result. System.Collections.Generic.IList < IComputeJobResult <TJobRes>> rcvd All previously received results. Returns Type Description ComputeJobResultPolicy Result policy that dictates how to process further upcoming job results. Reduce(IList<IComputeJobResult<TJobRes>>) Reduces (or aggregates) results received so far into one compound result to be returned to caller via task. Note, that if some jobs did not succeed and could not be failed over then the list of results passed into this method will include the failed results. Otherwise, failed results will not be in the list. Declaration public abstract TTaskRes Reduce(IList<IComputeJobResult<TJobRes>> results) Parameters Type Name Description System.Collections.Generic.IList < IComputeJobResult <TJobRes>> results Received job results. Note that if task class has ComputeTaskNoResultCacheAttribute attribute, then this list will be empty. Returns Type Description TTaskRes Task result constructed from results of remote executions. Implements IComputeTask<TArg, TJobRes, TRes>"
  },
  "api/Apache.Ignite.Core.Compute.ComputeTaskCancelledException.html": {
    "href": "api/Apache.Ignite.Core.Compute.ComputeTaskCancelledException.html",
    "title": "Class ComputeTaskCancelledException | Apache Ignite.NET",
    "keywords": "Class ComputeTaskCancelledException This exception indicates that Ignite task was cancelled. Inheritance System.Object System.Exception IgniteException ComputeTaskCancelledException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Compute Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class ComputeTaskCancelledException : IgniteException, ISerializable, _Exception Constructors ComputeTaskCancelledException() Initializes a new instance of the ComputeTaskCancelledException class. Declaration public ComputeTaskCancelledException() ComputeTaskCancelledException(SerializationInfo, StreamingContext) Initializes a new instance of the ComputeTaskCancelledException class. Declaration protected ComputeTaskCancelledException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. ComputeTaskCancelledException(String) Initializes a new instance of the ComputeTaskCancelledException class. Declaration public ComputeTaskCancelledException(string message) Parameters Type Name Description System.String message The message that describes the error. ComputeTaskCancelledException(String, Exception) Initializes a new instance of the ComputeTaskCancelledException class. Declaration public ComputeTaskCancelledException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Compute.IComputeTask-3.html": {
    "href": "api/Apache.Ignite.Core.Compute.IComputeTask-3.html",
    "title": "Interface IComputeTask<TArg, TJobRes, TRes> | Apache Ignite.NET",
    "keywords": "Interface IComputeTask<TArg, TJobRes, TRes> Ignite task interface defines a task that can be executed on the grid. Ignite task is responsible for splitting business logic into multiple Ignite jobs, receiving results from individual Ignite jobs executing on remote nodes, and reducing (aggregating) received jobs' results into final Ignite task result. Upon request to execute a task, the system will do the following: Inject annotated resources into task instance. Apply Map(IList<IClusterNode>, TArg) . This method is responsible for splitting business logic into multiple jobs (units of execution) and mapping them to Ignite nodes. System will send mapped Ignite jobs to their respective nodes. Once job execution results become available, OnResult(IComputeJobResult<TJobRes>, IList<IComputeJobResult<TJobRes>>) method will be called for ech received job result. The policy returned by this method will determine the way task reacts to every job result. If Wait is returned, task will continue to wait for other job results. If this result is the last job result, then reduce phase will be started. If Reduce is returned, reduce phase will be started right away without waiting for other jobs completion (all remaining jobs will receive cancel request). If Failover is returned, job will be failed over to another node for execution. Note that if you use ComputeTaskAdapter<TArg, TJobRes, TTaskRes> , it will automatically fail jobs to another node for 2 well-known failure cases: 1) job has failed to due to node crash (in this case Exception will return ClusterTopologyException ); 2) job execution was rejected, i.e. remote node has cancelled job before it got a chance to execute, while it still was on the waiting list. (in this case Exception will return ComputeExecutionRejectedException ). Once all results are received or OnResult(IComputeJobResult<TJobRes>, IList<IComputeJobResult<TJobRes>>) method returned Reduce policy, method Reduce(IList<IComputeJobResult<TJobRes>>) is called to aggregate received results into one final result. Once this method is finished the execution of the Ignite task is complete. This result will be returned to the user through future. Namespace : Apache.Ignite.Core.Compute Assembly : Apache.Ignite.Core.dll Syntax public interface IComputeTask<in TArg, TJobRes, out TRes> Type Parameters Name Description TArg Argument type. TJobRes Type of job result. TRes Type of final task result after reduce. Methods Map(IList<IClusterNode>, TArg) This method is called to map or split Ignite task into multiple Ignite jobs. This is the first method that gets called when task execution starts. Declaration IDictionary<IComputeJob<TJobRes>, IClusterNode> Map(IList<IClusterNode> subgrid, TArg arg) Parameters Type Name Description System.Collections.Generic.IList < IClusterNode > subgrid Nodes available for this task execution. Note that order of nodes is guaranteed to be randomized by container. This ensures that every time you simply iterate through Ignite nodes, the order of nodes will be random which over time should result into all nodes being used equally. TArg arg Task execution argument. Can be null . This is the same argument as the one passed into ICompute.Execute() methods. Returns Type Description System.Collections.Generic.IDictionary < IComputeJob <TJobRes>, IClusterNode > Map of Ignite jobs assigned to subgrid node. If null or empty map is returned, exception will be thrown. OnResult(IComputeJobResult<TJobRes>, IList<IComputeJobResult<TJobRes>>) Asynchronous callback invoked every time a result from remote execution is received. It is ultimately upto this method to return a policy based on which the system will either wait for more results, reduce results received so far, or failover this job to another node. See ComputeJobResultPolicy for more information. Declaration ComputeJobResultPolicy OnResult(IComputeJobResult<TJobRes> res, IList<IComputeJobResult<TJobRes>> rcvd) Parameters Type Name Description IComputeJobResult <TJobRes> res Received remote Ignite executable result. System.Collections.Generic.IList < IComputeJobResult <TJobRes>> rcvd All previously received results. Note that if task class has ComputeTaskNoResultCacheAttribute attribute, then this list will be empty. Returns Type Description ComputeJobResultPolicy Result policy that dictates how to process further upcoming job results. Reduce(IList<IComputeJobResult<TJobRes>>) Reduces (or aggregates) results received so far into one compound result to be returned to caller via future. Note, that if some jobs did not succeed and could not be failed over then the list of results passed into this method will include the failed results. Otherwise, failed results will not be in the list. Declaration TRes Reduce(IList<IComputeJobResult<TJobRes>> results) Parameters Type Name Description System.Collections.Generic.IList < IComputeJobResult <TJobRes>> results Received job results. Note that if task class has ComputeTaskNoResultCacheAttribute attribute, then this list will be empty. Returns Type Description TRes Task result constructed from results of remote executions."
  },
  "api/Apache.Ignite.Core.Compute.html": {
    "href": "api/Apache.Ignite.Core.Compute.html",
    "title": "Namespace Apache.Ignite.Core.Compute | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Compute Classes ComputeExecutionRejectedException Indicates a situation when execution service provided by the user in configuration rejects execution. ComputeJobAdapter<T> Convenience adapter for IComputeJob<TRes> implementations. It provides the following functionality: Default implementation of Cancel() method and ability to check whether cancellation occurred with IsCancelled() method. Ability to set and get job arguments via SetArguments(Object[]) and GetArgument<TArg>(Int32) methods. ComputeJobFailoverException This runtime exception can be thrown from Execute() method to force job failover to another node within task topology. IComputeFunc<TArg, TRes> or IComputeFunc<TRes> passed into any of the ICompute methods can also throw this exception to force failover. ComputeTaskAdapter<TArg, TJobRes, TTaskRes> Convenience adapter for IComputeTask<TArg, TJobRes, TRes> interface ComputeTaskCancelledException This exception indicates that Ignite task was cancelled. ComputeTaskNoResultCacheAttribute This attribute disables caching of task results when attached to IComputeTask<TArg, TJobRes, TRes> instance. Use it when number of jobs within task grows too big, or jobs themselves are too large to keep in memory throughout task execution. By default all results are cached and passed into OnResult(IComputeJobResult<TJobRes>, IList<IComputeJobResult<TJobRes>>) and Reduce(IList<IComputeJobResult<TJobRes>>) methods. When this attribute is attached to a task class, then this list of job results will always be empty. ComputeTaskSplitAdapter<TArg, TJobRes, TTaskRes> This class defines simplified adapter for IComputeTask<TArg, TJobRes, TRes> . This adapter can be used when jobs can be randomly assigned to available Ignite nodes. This adapter is sufficient in most homogeneous environments where all nodes are equally suitable for executing grid job, see Split(Int32, TArg) method for more details. ComputeTaskTimeoutException Indicates that task execution timed out. ComputeUserUndeclaredException This exception is thrown when user's code throws undeclared runtime exception. By user core it is assumed the code in Ignite task, Ignite job or SPI. In most cases it should be an indication of unrecoverable error condition such as assertion, out of memory error, etc. Interfaces ICompute Defines Ignite functionality for executing tasks and closures over nodes in the IClusterGroup . Instance of ICompute is obtained from grid projection using GetCompute() method. Note that if attempt is made to execute a computation over an empty projection (i.e. projection that does not have any alive nodes), ClusterGroupEmptyException will be thrown out of result task. Ignite must select a node for a computation to be executed. The node will be selected based on the underlying GridLoadBalancingSpi , which by default sequentially picks next available node from grid projection. Other load balancing policies, such as random or adaptive , can be configured as well by selecting different load balancing SPI in Ignite configuration. If your logic requires some custom load balancing behavior, consider implementing ComputeTask in Java directly. Ignite guarantees that as long as there is at least one Ignite node standing, every job will be executed. Jobs will automatically failover to another node if a remote node crashed or has rejected execution due to lack of resources. By default, in case of failover, next load balanced node will be picked for job execution. Also jobs will never be re-routed to the nodes they have failed on. This behavior can be changed by configuring any of the existing or a custom FailoverSpi in Ignite configuration. All members are thread-safe and may be used concurrently from multiple threads. IComputeAction Defines a void function having no arguments. IComputeFunc<TRes> Defines function having no arguments. IComputeFunc<TArg, TRes> Defines function having a single argument. IComputeJob<TRes> Defines executable unit for IComputeTask<TArg, TJobRes, TRes> . Ignite task gets split into jobs when Map(IList<IClusterNode>, TArg) method is called. This method returns all jobs for the task mapped to their corresponding Ignite nodes for execution. Grid will then serialize this jobs and send them to requested nodes for execution. Once job execution is complete, the return value will be sent back to parent task and will be passed into OnResult(IComputeJobResult<TJobRes>, IList<IComputeJobResult<TJobRes>>) method via IComputeJobResult<TRes> instance. Ignite job implementation can be injected with IIgnite using InstanceResourceAttribute attribute. IComputeJobResult<TRes> Job execution result which gets passed to OnResult(IComputeJobResult<TJobRes>, IList<IComputeJobResult<TJobRes>>) method. IComputeReducer<TRes, TReduceRes> Compute reducer which is capable of result collecting and reducing. IComputeTask<TJobRes, TReduceRes> IComputeTask without an argument. IComputeTask<TArg, TJobRes, TRes> Ignite task interface defines a task that can be executed on the grid. Ignite task is responsible for splitting business logic into multiple Ignite jobs, receiving results from individual Ignite jobs executing on remote nodes, and reducing (aggregating) received jobs' results into final Ignite task result. Upon request to execute a task, the system will do the following: Inject annotated resources into task instance. Apply Map(IList<IClusterNode>, TArg) . This method is responsible for splitting business logic into multiple jobs (units of execution) and mapping them to Ignite nodes. System will send mapped Ignite jobs to their respective nodes. Once job execution results become available, OnResult(IComputeJobResult<TJobRes>, IList<IComputeJobResult<TJobRes>>) method will be called for ech received job result. The policy returned by this method will determine the way task reacts to every job result. If Wait is returned, task will continue to wait for other job results. If this result is the last job result, then reduce phase will be started. If Reduce is returned, reduce phase will be started right away without waiting for other jobs completion (all remaining jobs will receive cancel request). If Failover is returned, job will be failed over to another node for execution. Note that if you use ComputeTaskAdapter<TArg, TJobRes, TTaskRes> , it will automatically fail jobs to another node for 2 well-known failure cases: 1) job has failed to due to node crash (in this case Exception will return ClusterTopologyException ); 2) job execution was rejected, i.e. remote node has cancelled job before it got a chance to execute, while it still was on the waiting list. (in this case Exception will return ComputeExecutionRejectedException ). Once all results are received or OnResult(IComputeJobResult<TJobRes>, IList<IComputeJobResult<TJobRes>>) method returned Reduce policy, method Reduce(IList<IComputeJobResult<TJobRes>>) is called to aggregate received results into one final result. Once this method is finished the execution of the Ignite task is complete. This result will be returned to the user through future. Enums ComputeJobResultPolicy This enumeration provides different types of actions following the last received job result. See OnResult(IComputeJobResult<TJobRes>, IList<IComputeJobResult<TJobRes>>) for more details."
  },
  "api/Apache.Ignite.Core.Datastream.StreamVisitor-2.html": {
    "href": "api/Apache.Ignite.Core.Datastream.StreamVisitor-2.html",
    "title": "Class StreamVisitor<TK, TV> | Apache Ignite.NET",
    "keywords": "Class StreamVisitor<TK, TV> Convenience adapter to visit every key-value tuple in the stream. Note that the visitor does not update the cache. Inheritance System.Object StreamVisitor<TK, TV> Implements IStreamReceiver <TK, TV> Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Datastream Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public sealed class StreamVisitor<TK, TV> : IStreamReceiver<TK, TV> Type Parameters Name Description TK The type of the cache key. TV The type of the cache value. Constructors StreamVisitor(Action<ICache<TK, TV>, ICacheEntry<TK, TV>>) Initializes a new instance of the StreamVisitor<TK, TV> class. Declaration public StreamVisitor(Action<ICache<TK, TV>, ICacheEntry<TK, TV>> action) Parameters Type Name Description System.Action < ICache <TK, TV>, ICacheEntry <TK, TV>> action The action to be called on each stream entry. Methods Receive(ICache<TK, TV>, ICollection<ICacheEntry<TK, TV>>) Updates cache with batch of entries. Declaration public void Receive(ICache<TK, TV> cache, ICollection<ICacheEntry<TK, TV>> entries) Parameters Type Name Description ICache <TK, TV> cache Cache. System.Collections.Generic.ICollection < ICacheEntry <TK, TV>> entries Entries. Implements IStreamReceiver<TK, TV>"
  },
  "api/Apache.Ignite.Core.Datastream.html": {
    "href": "api/Apache.Ignite.Core.Datastream.html",
    "title": "Namespace Apache.Ignite.Core.Datastream | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Datastream Classes DataStreamerDefaults Data streamer configuration defaults. StreamTransformer<TK, TV, TArg, TRes> Convenience adapter to transform update existing values in streaming cache based on the previously cached value. StreamVisitor<TK, TV> Convenience adapter to visit every key-value tuple in the stream. Note that the visitor does not update the cache. Interfaces IDataStreamer<TK, TV> Data streamer is responsible for loading external data into cache. It achieves it by properly buffering updates and properly mapping keys to nodes responsible for the data to make sure that there is the least amount of data movement possible and optimal network and memory utilization. Note that streamer will load data concurrently by multiple internal threads, so the data may get to remote nodes in different order from which it was added to the streamer. Also note that IDataStreamer is not the only way to load data into cache. Alternatively you can use LoadCache(Action<TK, TV>, Object[]) method to load data from underlying data store. You can also use standard cache put and putAll operations as well, but they most likely will not perform as well as this class for loading data. And finally, data can be loaded from underlying data store on demand, whenever it is accessed - for this no explicit data loading step is needed. IDataStreamer supports the following configuration properties: PerNodeBufferSizeWhen entries are added to data streamer they are not sent to Ignite right away and are buffered internally for better performance and network utilization. This setting controls the size of internal per-node buffer before buffered data is sent to remote node. Default value is 1024. 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.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.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.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.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.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.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"
  },
  "api/Apache.Ignite.Linq.CompiledQuery.html": {
    "href": "api/Apache.Ignite.Linq.CompiledQuery.html",
    "title": "Class CompiledQuery | Apache Ignite.NET",
    "keywords": "Class CompiledQuery Represents a compiled cache query. Inheritance System.Object CompiledQuery Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Linq Assembly : Apache.Ignite.Linq.dll Syntax public static class CompiledQuery Methods Compile<T>(Expression<Func<IQueryable<T>>>) Creates a new delegate that represents the compiled cache query. Declaration public static Func<IQueryCursor<T>> Compile<T>(Expression<Func<IQueryable<T>>> query) Parameters Type Name Description System.Linq.Expressions.Expression < System.Func < System.Linq.IQueryable <T>>> query The query to compile. Returns Type Description System.Func < IQueryCursor <T>> Delegate that represents the compiled cache query. Type Parameters Name Description T Compile<T>(IQueryable<T>) Creates a new delegate that represents the compiled cache query with any number of arguments. This method differs from other Compile methods in that it takes in ICacheQueryable directly, and returns a delegate that takes an array of parameters. It is up to the user to provide query arguments in correct order. This method also imposes no restrictions on where the query comes from (in contrary to other methods). Declaration public static CompiledQueryFunc<T> Compile<T>(IQueryable<T> query) Parameters Type Name Description System.Linq.IQueryable <T> query The query to compile. Returns Type Description CompiledQueryFunc <T> Delegate that represents the compiled cache query. Type Parameters Name Description T Compile<T, T1>(Expression<Func<T1, IQueryable<T>>>) Creates a new delegate that represents the compiled cache query. Declaration public static Func<T1, IQueryCursor<T>> Compile<T, T1>(Expression<Func<T1, IQueryable<T>>> query) Parameters Type Name Description System.Linq.Expressions.Expression < System.Func <T1, System.Linq.IQueryable <T>>> query The query to compile. Returns Type Description System.Func <T1, IQueryCursor <T>> Delegate that represents the compiled cache query. Type Parameters Name Description T T1 Compile<T, T1, T2>(Expression<Func<T1, T2, IQueryable<T>>>) Creates a new delegate that represents the compiled cache query. Declaration public static Func<T1, T2, IQueryCursor<T>> Compile<T, T1, T2>(Expression<Func<T1, T2, IQueryable<T>>> query) Parameters Type Name Description System.Linq.Expressions.Expression < System.Func <T1, T2, System.Linq.IQueryable <T>>> query The query to compile. Returns Type Description System.Func <T1, T2, IQueryCursor <T>> Delegate that represents the compiled cache query. Type Parameters Name Description T T1 T2 Compile<T, T1, T2, T3>(Expression<Func<T1, T2, T3, IQueryable<T>>>) Creates a new delegate that represents the compiled cache query. Declaration public static Func<T1, T2, T3, IQueryCursor<T>> Compile<T, T1, T2, T3>(Expression<Func<T1, T2, T3, IQueryable<T>>> query) Parameters Type Name Description System.Linq.Expressions.Expression < System.Func <T1, T2, T3, System.Linq.IQueryable <T>>> query The query to compile. Returns Type Description System.Func <T1, T2, T3, IQueryCursor <T>> Delegate that represents the compiled cache query. Type Parameters Name Description T T1 T2 T3 Compile<T, T1, T2, T3, T4>(Expression<Func<T1, T2, T3, T4, IQueryable<T>>>) Creates a new delegate that represents the compiled cache query. Declaration public static Func<T1, T2, T3, T4, IQueryCursor<T>> Compile<T, T1, T2, T3, T4>(Expression<Func<T1, T2, T3, T4, IQueryable<T>>> query) Parameters Type Name Description System.Linq.Expressions.Expression < System.Func <T1, T2, T3, T4, System.Linq.IQueryable <T>>> query The query to compile. Returns Type Description System.Func <T1, T2, T3, T4, IQueryCursor <T>> Delegate that represents the compiled cache query. Type Parameters Name Description T T1 T2 T3 T4 Compile<T, T1, T2, T3, T4, T5>(Expression<Func<T1, T2, T3, T4, T5, IQueryable<T>>>) Creates a new delegate that represents the compiled cache query. Declaration public static Func<T1, T2, T3, T4, T5, IQueryCursor<T>> Compile<T, T1, T2, T3, T4, T5>(Expression<Func<T1, T2, T3, T4, T5, IQueryable<T>>> query) Parameters Type Name Description System.Linq.Expressions.Expression < System.Func <T1, T2, T3, T4, T5, System.Linq.IQueryable <T>>> query The query to compile. Returns Type Description System.Func <T1, T2, T3, T4, T5, IQueryCursor <T>> Delegate that represents the compiled cache query. Type Parameters Name Description T T1 T2 T3 T4 T5 Compile<T, T1, T2, T3, T4, T5, T6>(Expression<Func<T1, T2, T3, T4, T5, T6, IQueryable<T>>>) Creates a new delegate that represents the compiled cache query. Declaration public static Func<T1, T2, T3, T4, T5, T6, IQueryCursor<T>> Compile<T, T1, T2, T3, T4, T5, T6>(Expression<Func<T1, T2, T3, T4, T5, T6, IQueryable<T>>> query) Parameters Type Name Description System.Linq.Expressions.Expression < System.Func <T1, T2, T3, T4, T5, T6, System.Linq.IQueryable <T>>> query The query to compile. Returns Type Description System.Func <T1, T2, T3, T4, T5, T6, IQueryCursor <T>> Delegate that represents the compiled cache query. Type Parameters Name Description T T1 T2 T3 T4 T5 T6 Compile<T, T1, T2, T3, T4, T5, T6, T7>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, IQueryable<T>>>) Creates a new delegate that represents the compiled cache query. Declaration public static Func<T1, T2, T3, T4, T5, T6, T7, IQueryCursor<T>> Compile<T, T1, T2, T3, T4, T5, T6, T7>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, IQueryable<T>>> query) Parameters Type Name Description System.Linq.Expressions.Expression < System.Func <T1, T2, T3, T4, T5, T6, T7, System.Linq.IQueryable <T>>> query The query to compile. Returns Type Description System.Func <T1, T2, T3, T4, T5, T6, T7, IQueryCursor <T>> Delegate that represents the compiled cache query. Type Parameters Name Description T T1 T2 T3 T4 T5 T6 T7 Compile<T, T1, T2, T3, T4, T5, T6, T7, T8>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, IQueryable<T>>>) Creates a new delegate that represents the compiled cache query. Declaration public static Func<T1, T2, T3, T4, T5, T6, T7, T8, IQueryCursor<T>> Compile<T, T1, T2, T3, T4, T5, T6, T7, T8>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, IQueryable<T>>> query) Parameters Type Name Description System.Linq.Expressions.Expression < System.Func <T1, T2, T3, T4, T5, T6, T7, T8, System.Linq.IQueryable <T>>> query The query to compile. Returns Type Description System.Func <T1, T2, T3, T4, T5, T6, T7, T8, IQueryCursor <T>> Delegate that represents the compiled cache query. Type Parameters Name Description T T1 T2 T3 T4 T5 T6 T7 T8"
  },
  "api/Apache.Ignite.Core.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.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.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.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.Transactions.ITransaction.html": {
    "href": "api/Apache.Ignite.Core.Transactions.ITransaction.html",
    "title": "Interface ITransaction | Apache Ignite.NET",
    "keywords": "Interface ITransaction Grid cache transaction. Cache transactions support the following isolation levels: ReadCommitted isolation level means that always a committed value will be provided for read operations. With this isolation level values are always read from cache global memory or persistent store every time a value is accessed. In other words, if the same key is accessed more than once within the same transaction, it may have different value every time since global cache memory may be updated concurrently by other threads. RepeatableRead isolation level means that if a value was read once within transaction, then all consecutive reads will provide the same in-transaction value. With this isolation level accessed values are stored within in-transaction memory, so consecutive access to the same key within the same transaction will always return the value that was previously read or updated within this transaction. If concurrency is Pessimistic , then a lock on the key will be acquired prior to accessing the value. Serializable isolation level means that all transactions occur in a completely isolated fashion, as if all transactions in the system had executed serially, one after the other. Read access with this level happens the same way as with RepeatableRead level. However, in Optimistic mode, if some transactions cannot be serially isolated from each other, then one winner will be picked and the other transactions in conflict will result in TransactionOptimisticException being thrown on Java side. Cache transactions support the following concurrency models: Optimistic - in this mode all cache operations are not distributed to other nodes until Commit() . In this mode one PREPARE message will be sent to participating cache nodes to start acquiring per-transaction locks, and once all nodes reply OK (i.e. Phase 1 completes successfully), a one-way COMMIT message is sent without waiting for reply. If it is necessary to know whenever remote nodes have committed as well, synchronous commit or synchronous rollback should be enabled via CacheConfiguration.setWriteSynchronizationMode . Note that in this mode, optimistic failures are only possible in conjunction with Serializable isolation level. In all other cases, optimistic transactions will never fail optimistically and will always be identically ordered on all participating Ignite nodes. Pessimistic - in this mode a lock is acquired on all cache operations with exception of read operations in ReadCommitted mode. All optional filters passed into cache operations will be evaluated after successful lock acquisition. Whenever Commit() is called, a single one-way COMMIT message is sent to participating cache nodes without waiting for reply. Note that there is no reason for distributed PREPARE step, as all locks have been already acquired. Just like with optimistic mode, it is possible to configure synchronous commit or rollback and wait till transaction commits on all participating remote nodes. In addition to standard CacheAtomicityMode.TRANSACTIONAL behavior, Ignite also supports a lighter CacheAtomicityMode.ATOMIC mode as well. In this mode distributed transactions and distributed locking are not supported. Disabling transactions and locking allows to achieve much higher performance and throughput ratios. It is recommended that CacheAtomicityMode.TRANSACTIONAL mode is used whenever full ACID -compliant transactions are not needed. You can use cache transactions as follows: ICacheTx tx = cache.TxStart(); try { int v1 = cache<string, int>.Get(\"k1\"); // Check if v1 satisfies some condition before doing a put. if (v1 > 0) cache.Put<string, int>(\"k1\", 2); cache.Removex(\"k2); // Commit the transaction. tx.Commit(); } finally { tx.Dispose(); } Inherited Members System.IDisposable.Dispose() Namespace : Apache.Ignite.Core.Transactions Assembly : Apache.Ignite.Core.dll Syntax public interface ITransaction : IDisposable Properties Concurrency Transaction concurrency mode. Declaration TransactionConcurrency Concurrency { get; } Property Value Type Description TransactionConcurrency Isolation Transaction isolation level. Declaration TransactionIsolation Isolation { get; } Property Value Type Description TransactionIsolation IsRollbackOnly Gets a value indicating whether this transaction was marked as rollback-only. Declaration bool IsRollbackOnly { get; } Property Value Type Description System.Boolean NodeId ID of the node on which this transaction started. Declaration Guid NodeId { get; } Property Value Type Description System.Guid Originating node ID. StartTime Start time of this transaction on this node. Declaration DateTime StartTime { get; } Property Value Type Description System.DateTime State Current transaction state. Declaration TransactionState State { get; } Property Value Type Description TransactionState ThreadId ID of the thread in which this transaction started. Declaration long ThreadId { get; } Property Value Type Description System.Int64 Timeout Timeout for this transaction. If transaction times out prior to it's completion, an exception will be thrown. System.TimeSpan.Zero for infinite timeout. Declaration TimeSpan Timeout { get; } Property Value Type Description System.TimeSpan Methods AddMeta<TV>(String, TV) Adds a new metadata. Declaration void AddMeta<TV>(string name, TV val) Parameters Type Name Description System.String name Metadata name. TV val Metadata value. Type Parameters Name Description TV Commit() Commits this transaction. Declaration void Commit() CommitAsync() Commits this transaction. Declaration Task CommitAsync() Returns Type Description System.Threading.Tasks.Task Meta<TV>(String) Gets metadata by name. Declaration TV Meta<TV>(string name) Parameters Type Name Description System.String name Metadata name. Returns Type Description TV Metadata value. Type Parameters Name Description TV Exceptions Type Condition System.Collections.Generic.KeyNotFoundException If metadata key was not found. RemoveMeta<TV>(String) Removes metadata by name. Declaration TV RemoveMeta<TV>(string name) Parameters Type Name Description System.String name Metadata name. Returns Type Description TV Value of removed metadata or default value for V type. Type Parameters Name Description TV Rollback() Rolls back this transaction. Declaration void Rollback() RollbackAsync() Rolls back this transaction. Declaration Task RollbackAsync() Returns Type Description System.Threading.Tasks.Task SetRollbackonly() Modify the transaction associated with the current thread such that the only possible outcome of the transaction is to roll back the transaction. Declaration bool SetRollbackonly() Returns Type Description System.Boolean True if rollback-only flag was set as a result of this operation, false if it was already set prior to this call or could not be set because transaction is already finishing up committing or rolling back."
  },
  "api/Apache.Ignite.Core.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 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.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.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.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.AspNet.html": {
    "href": "api/Apache.Ignite.AspNet.html",
    "title": "Namespace Apache.Ignite.AspNet | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.AspNet Classes IgniteOutputCacheProvider ASP.NET output cache provider that uses Ignite cache as a storage. You can either start Ignite yourself, and provide gridName attribute, or provide igniteConfigurationSectionName attribute to start Ignite automatically from specified configuration section (see IgniteConfigurationSection ) using igniteConfigurationSectionName . cacheName attribute specifies Ignite cache name to use for data storage. This attribute can be omitted if cache name is null. IgniteSessionStateStoreProvider ASP.NET Session-State Store Provider that uses Ignite distributed cache as an underlying storage. You can either start Ignite yourself, and provide gridName attribute, or provide igniteConfigurationSectionName attribute to start Ignite automatically from specified configuration section (see IgniteConfigurationSection ) using igniteConfigurationSectionName . cacheName attribute specifies Ignite cache name to use for data storage. This attribute can be omitted if cache name is null. Optional applicationId attribute allows sharing a single Ignite cache between multiple web applications. IgniteWebUtils Ignite web utilities."
  },
  "api/Apache.Ignite.Core.Binary.BinaryTypeConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Binary.BinaryTypeConfiguration.html",
    "title": "Class BinaryTypeConfiguration | Apache Ignite.NET",
    "keywords": "Class BinaryTypeConfiguration Binary type configuration. Inheritance System.Object BinaryTypeConfiguration Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Binary Assembly : Apache.Ignite.Core.dll Syntax public class BinaryTypeConfiguration Constructors BinaryTypeConfiguration() Constructor. Declaration public BinaryTypeConfiguration() BinaryTypeConfiguration(BinaryTypeConfiguration) Copying constructor. Declaration public BinaryTypeConfiguration(BinaryTypeConfiguration cfg) Parameters Type Name Description BinaryTypeConfiguration cfg Configuration to copy. BinaryTypeConfiguration(String) Constructor. Declaration public BinaryTypeConfiguration(string typeName) Parameters Type Name Description System.String typeName Type name. BinaryTypeConfiguration(Type) Constructor. Declaration public BinaryTypeConfiguration(Type type) Parameters Type Name Description System.Type type Type. Properties AffinityKeyFieldName Affinity key field name. Declaration public string AffinityKeyFieldName { get; set; } Property Value Type Description System.String IdMapper ID mapper for the given type. When it is necessary to resolve class (field) ID, then this property will be checked first. Otherwise, ID will be hash code of the class (field) simple name in lower case. Declaration public IBinaryIdMapper IdMapper { get; set; } Property Value Type Description IBinaryIdMapper IsEnum Gets or sets a value indicating whether this instance describes an enum type. Declaration public bool IsEnum { get; set; } Property Value Type Description System.Boolean KeepDeserialized Keep deserialized flag. If set to non-null value, overrides default value set in BinaryTypeConfiguration . Declaration public bool ? KeepDeserialized { get; set; } Property Value Type Description System.Nullable < System.Boolean > NameMapper Name mapper for the given type. Declaration public IBinaryNameMapper NameMapper { get; set; } Property Value Type Description IBinaryNameMapper Serializer Serializer for the given type. If not provided and class implements IBinarizable then its custom logic will be used. If not provided and class doesn't implement IBinarizable then all fields of the class except of those with [NotSerialized] attribute will be serialized with help of reflection. Declaration public IBinarySerializer Serializer { get; set; } Property Value Type Description IBinarySerializer TypeName Fully qualified type name. Declaration public string TypeName { get; set; } Property Value Type Description System.String Methods ToString() Returns a string that represents the current object. Declaration public override string ToString() Returns Type Description System.String A string that represents the current object. Overrides System.Object.ToString()"
  },
  "api/Apache.Ignite.Core.Binary.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.IBinaryObjectBuilder.html": {
    "href": "api/Apache.Ignite.Core.Binary.IBinaryObjectBuilder.html",
    "title": "Interface IBinaryObjectBuilder | Apache Ignite.NET",
    "keywords": "Interface IBinaryObjectBuilder binary object builder. Provides ability to build binary objects dynamically without having class definitions. Note that type ID is required in order to build binary object. Usually it is enough to provide a simple type name and Ignite will generate the type ID automatically. Namespace : Apache.Ignite.Core.Binary Assembly : Apache.Ignite.Core.dll Syntax public interface IBinaryObjectBuilder Methods Build() Build the object. Declaration IBinaryObject Build() Returns Type Description IBinaryObject Resulting binary object. GetField<T>(String) Get object field value. If value is another binary object, then builder for this object will be returned. If value is a container for other objects (array, ICollection, IDictionary), then container will be returned with primitive types in deserialized form and binary objects as builders. Any change in builder or collection returned through this method will be reflected in the resulting binary object after build. Declaration T GetField<T>(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description T Field value. Type Parameters Name Description T RemoveField(String) Remove object field. Declaration IBinaryObjectBuilder RemoveField(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description IBinaryObjectBuilder Current builder instance. SetArrayField<T>(String, T[]) Sets the array field. Declaration IBinaryObjectBuilder SetArrayField<T>(string fieldName, T[] val) Parameters Type Name Description System.String fieldName Name of the field. T[] val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. Type Parameters Name Description T SetBooleanArrayField(String, Boolean[]) Sets the boolean array field. Declaration IBinaryObjectBuilder SetBooleanArrayField(string fieldName, bool[] val) Parameters Type Name Description System.String fieldName Name of the field. System.Boolean [] val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetBooleanField(String, Boolean) Sets the boolean field. Declaration IBinaryObjectBuilder SetBooleanField(string fieldName, bool val) Parameters Type Name Description System.String fieldName Name of the field. System.Boolean val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetByteArrayField(String, Byte[]) Sets the byte array field. Declaration IBinaryObjectBuilder SetByteArrayField(string fieldName, byte[] val) Parameters Type Name Description System.String fieldName Name of the field. System.Byte [] val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetByteField(String, Byte) Sets the byte field. Declaration IBinaryObjectBuilder SetByteField(string fieldName, byte val) Parameters Type Name Description System.String fieldName Name of the field. System.Byte val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetCharArrayField(String, Char[]) Sets the char array field. Declaration IBinaryObjectBuilder SetCharArrayField(string fieldName, char[] val) Parameters Type Name Description System.String fieldName Name of the field. System.Char [] val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetCharField(String, Char) Sets the char field. Declaration IBinaryObjectBuilder SetCharField(string fieldName, char val) Parameters Type Name Description System.String fieldName Name of the field. System.Char val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetCollectionField(String, ICollection) Sets the collection field. Declaration IBinaryObjectBuilder SetCollectionField(string fieldName, ICollection val) Parameters Type Name Description System.String fieldName Name of the field. System.Collections.ICollection val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetDecimalArrayField(String, Nullable<Decimal>[]) Sets the decimal array field. Declaration IBinaryObjectBuilder SetDecimalArrayField(string fieldName, decimal ? [] val) Parameters Type Name Description System.String fieldName Name of the field. System.Nullable < System.Decimal >[] val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetDecimalField(String, Nullable<Decimal>) Sets the decimal field. Declaration IBinaryObjectBuilder SetDecimalField(string fieldName, decimal ? val) Parameters Type Name Description System.String fieldName Name of the field. System.Nullable < System.Decimal > val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetDictionaryField(String, IDictionary) Sets the dictionary field. Declaration IBinaryObjectBuilder SetDictionaryField(string fieldName, IDictionary val) Parameters Type Name Description System.String fieldName Name of the field. System.Collections.IDictionary val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetDoubleArrayField(String, Double[]) Sets the double array field. Declaration IBinaryObjectBuilder SetDoubleArrayField(string fieldName, double[] val) Parameters Type Name Description System.String fieldName Name of the field. System.Double [] val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetDoubleField(String, Double) Sets the double field. Declaration IBinaryObjectBuilder SetDoubleField(string fieldName, double val) Parameters Type Name Description System.String fieldName Name of the field. System.Double val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetEnumArrayField<T>(String, T[]) Sets the enum array field. Declaration IBinaryObjectBuilder SetEnumArrayField<T>(string fieldName, T[] val) Parameters Type Name Description System.String fieldName Name of the field. T[] val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. Type Parameters Name Description T SetEnumField<T>(String, T) Sets the enum field. Declaration IBinaryObjectBuilder SetEnumField<T>(string fieldName, T val) Parameters Type Name Description System.String fieldName Name of the field. T val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. Type Parameters Name Description T SetField<T>(String, T) Set object field value. Value can be of any type including other IBinaryObject and other builders. Declaration IBinaryObjectBuilder SetField<T>(string fieldName, T val) Parameters Type Name Description System.String fieldName Field name. T val Field value. Returns Type Description IBinaryObjectBuilder Current builder instance. Type Parameters Name Description T SetFloatArrayField(String, Single[]) Sets the float array field. Declaration IBinaryObjectBuilder SetFloatArrayField(string fieldName, float[] val) Parameters Type Name Description System.String fieldName Name of the field. System.Single [] val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetFloatField(String, Single) Sets the float field. Declaration IBinaryObjectBuilder SetFloatField(string fieldName, float val) Parameters Type Name Description System.String fieldName Name of the field. System.Single val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetGuidArrayField(String, Nullable<Guid>[]) Sets the guid array field. Declaration IBinaryObjectBuilder SetGuidArrayField(string fieldName, Guid? [] val) Parameters Type Name Description System.String fieldName Name of the field. System.Nullable < System.Guid >[] val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetGuidField(String, Nullable<Guid>) Sets the guid field. Declaration IBinaryObjectBuilder SetGuidField(string fieldName, Guid? val) Parameters Type Name Description System.String fieldName Name of the field. System.Nullable < System.Guid > val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetIntArrayField(String, Int32[]) Sets the int array field. Declaration IBinaryObjectBuilder SetIntArrayField(string fieldName, int[] val) Parameters Type Name Description System.String fieldName Name of the field. System.Int32 [] val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetIntField(String, Int32) Sets the int field. Declaration IBinaryObjectBuilder SetIntField(string fieldName, int val) Parameters Type Name Description System.String fieldName Name of the field. System.Int32 val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetLongArrayField(String, Int64[]) Sets the long array field. Declaration IBinaryObjectBuilder SetLongArrayField(string fieldName, long[] val) Parameters Type Name Description System.String fieldName Name of the field. System.Int64 [] val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetLongField(String, Int64) Sets the long field. Declaration IBinaryObjectBuilder SetLongField(string fieldName, long val) Parameters Type Name Description System.String fieldName Name of the field. System.Int64 val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetShortArrayField(String, Int16[]) Sets the short array field. Declaration IBinaryObjectBuilder SetShortArrayField(string fieldName, short[] val) Parameters Type Name Description System.String fieldName Name of the field. System.Int16 [] val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetShortField(String, Int16) Sets the short field. Declaration IBinaryObjectBuilder SetShortField(string fieldName, short val) Parameters Type Name Description System.String fieldName Name of the field. System.Int16 val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetStringArrayField(String, String[]) Sets the string array field. Declaration IBinaryObjectBuilder SetStringArrayField(string fieldName, string[] val) Parameters Type Name Description System.String fieldName Name of the field. System.String [] val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetStringField(String, String) Sets the string field. Declaration IBinaryObjectBuilder SetStringField(string fieldName, string val) Parameters Type Name Description System.String fieldName Name of the field. System.String val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetTimestampArrayField(String, Nullable<DateTime>[]) Sets the timestamp array field. Declaration IBinaryObjectBuilder SetTimestampArrayField(string fieldName, DateTime? [] val) Parameters Type Name Description System.String fieldName Name of the field. System.Nullable < System.DateTime >[] val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetTimestampField(String, Nullable<DateTime>) Sets the timestamp field. Declaration IBinaryObjectBuilder SetTimestampField(string fieldName, DateTime? val) Parameters Type Name Description System.String fieldName Name of the field. System.Nullable < System.DateTime > val The value. Returns Type Description IBinaryObjectBuilder Current builder instance."
  },
  "api/Apache.Ignite.Core.Cache.Affinity.AffinityFunctionBase.html": {
    "href": "api/Apache.Ignite.Core.Cache.Affinity.AffinityFunctionBase.html",
    "title": "Class AffinityFunctionBase | Apache Ignite.NET",
    "keywords": "Class AffinityFunctionBase Base class for predefined affinity functions. Inheritance System.Object AffinityFunctionBase RendezvousAffinityFunction Implements IAffinityFunction Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Affinity Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public abstract class AffinityFunctionBase : IAffinityFunction Fields DefaultPartitions The default value for Partitions property. Declaration public const int DefaultPartitions = 1024 Field Value Type Description System.Int32 Properties ExcludeNeighbors Gets or sets a value indicating whether to exclude same-host-neighbors from being backups of each other. Declaration public virtual bool ExcludeNeighbors { get; set; } Property Value Type Description System.Boolean Partitions Gets or sets the total number of partitions. Declaration public virtual int Partitions { get; set; } Property Value Type Description System.Int32 Methods AssignPartitions(AffinityFunctionContext) Gets affinity nodes for a partition. In case of replicated cache, all returned nodes are updated in the same manner. In case of partitioned cache, the returned list should contain only the primary and back up nodes with primary node being always first. Note that partitioned affinity must obey the following contract: given that node N is primary for some key K , if any other node(s) leave grid and no node joins grid, node N will remain primary for key K . Declaration public virtual IEnumerable<IEnumerable<IClusterNode>> AssignPartitions(AffinityFunctionContext context) Parameters Type Name Description AffinityFunctionContext context The affinity function context. Returns Type Description System.Collections.Generic.IEnumerable < System.Collections.Generic.IEnumerable < IClusterNode >> A collection of partitions, where each partition is a collection of nodes, where first node is a primary node, and other nodes are backup nodes. GetPartition(Object) Gets partition number for a given key starting from 0. Partitioned caches should make sure that keys are about evenly distributed across all partitions from 0 to Partitions for best performance. Note that for fully replicated caches it is possible to segment key sets among different grid node groups. In that case each node group should return a unique partition number. However, unlike partitioned cache, mappings of keys to nodes in replicated caches are constant and a node cannot migrate from one partition to another. Declaration public virtual int GetPartition(object key) Parameters Type Name Description System.Object key Key to get partition for. Returns Type Description System.Int32 Partition number for a given key. RemoveNode(Guid) Removes node from affinity. This method is called when it is safe to remove disconnected node from affinity mapping. Declaration public virtual void RemoveNode(Guid nodeId) Parameters Type Name Description System.Guid nodeId The node identifier. Implements IAffinityFunction"
  },
  "api/Apache.Ignite.Core.Cache.Affinity.Rendezvous.html": {
    "href": "api/Apache.Ignite.Core.Cache.Affinity.Rendezvous.html",
    "title": "Namespace Apache.Ignite.Core.Cache.Affinity.Rendezvous | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Cache.Affinity.Rendezvous Classes RendezvousAffinityFunction Affinity function for partitioned cache based on Highest Random Weight algorithm."
  },
  "api/Apache.Ignite.Core.Cache.CachePeekMode.html": {
    "href": "api/Apache.Ignite.Core.Cache.CachePeekMode.html",
    "title": "Enum CachePeekMode | Apache Ignite.NET",
    "keywords": "Enum CachePeekMode Enumeration of all supported cache peek modes. Namespace : Apache.Ignite.Core.Cache Assembly : Apache.Ignite.Core.dll Syntax [Flags] public enum CachePeekMode Fields Name Description All Peeks into all available cache storages. Backup Peek value from backup copies of partitioned cache only (skip near cache). In case of LOCAL cache, behaves as All mode. Near Peek into near cache only (don't peek into partitioned cache). In case of LOCAL cache, behaves as All mode. Offheap Peeks value from the off-heap storage only, without loading off-heap value into cache. Onheap Peeks value from the on-heap storage only. Primary Peek value from primary copy of partitioned cache only (skip near cache). In case of LOCAL cache, behaves as All mode."
  },
  "api/Apache.Ignite.Core.Cache.Configuration.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.DataPageEvictionMode.html": {
    "href": "api/Apache.Ignite.Core.Cache.Configuration.DataPageEvictionMode.html",
    "title": "Enum DataPageEvictionMode | Apache Ignite.NET",
    "keywords": "Enum DataPageEvictionMode Memory page eviction mode. Only data pages, that store key-value entries, are eligible for eviction. The other types of pages, like index or system pages, are not evictable. Namespace : Apache.Ignite.Core.Cache.Configuration Assembly : Apache.Ignite.Core.dll Syntax [Obsolete(\"Use Apache.Ignite.Core.Configuration.DataPageEvictionMode\")] public enum DataPageEvictionMode Fields Name Description Disabled Eviction is disabled. Random2Lru Activates Random-2-LRU algorithm which is a scan resistant version of Random-LRU. This algorithm differs from Random-LRU only in a way that two latest access timestamps are stored for every data page. At the eviction time, a minimum between two latest timestamps is taken for further comparison with minimums of other pages that might be evicted. LRU-2 outperforms LRU by resolving \"one-hit wonder\" problem - if a data page is accessed rarely, but accidentally accessed once, its protected from eviction for a long time. RandomLru Random-LRU algorithm. Once a memory region defined by a memory policy is configured, an off-heap array is allocated to track last usage timestamp for every individual data page. The size of the array equals to MaxSize / PageSize . When a data page is accessed, its timestamp gets updated in the tracking array. The page index in the tracking array equals to pageAddress / MaxSize . When some pages need to be evicted, the algorithm randomly chooses 5 indexes from the tracking array and evicts a page with the latest timestamp. If some of the indexes point to non-data pages (index or system pages) then the algorithm picks other pages."
  },
  "api/Apache.Ignite.Core.Cache.Configuration.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"
  },
  "api/Apache.Ignite.Core.Cache.Event.ICacheEntryEvent-2.html": {
    "href": "api/Apache.Ignite.Core.Cache.Event.ICacheEntryEvent-2.html",
    "title": "Interface ICacheEntryEvent<TK, TV> | Apache Ignite.NET",
    "keywords": "Interface ICacheEntryEvent<TK, TV> Cache entry event. Inherited Members ICacheEntry<TK, TV>.Key ICacheEntry<TK, TV>.Value Namespace : Apache.Ignite.Core.Cache.Event Assembly : Apache.Ignite.Core.dll Syntax public interface ICacheEntryEvent<out TK, out TV> : ICacheEntry<TK, TV> Type Parameters Name Description TK TV Properties EventType Event type. Declaration CacheEntryEventType EventType { get; } Property Value Type Description CacheEntryEventType HasOldValue Whether old value exists. Declaration bool HasOldValue { get; } Property Value Type Description System.Boolean HasValue Whether value exists. Declaration bool HasValue { get; } Property Value Type Description System.Boolean OldValue Gets old the value. Declaration TV OldValue { get; } Property Value Type Description TV"
  },
  "api/Apache.Ignite.Core.Cache.Event.ICacheEntryEventFilter-2.html": {
    "href": "api/Apache.Ignite.Core.Cache.Event.ICacheEntryEventFilter-2.html",
    "title": "Interface ICacheEntryEventFilter<TK, TV> | Apache Ignite.NET",
    "keywords": "Interface ICacheEntryEventFilter<TK, TV> Cache entry event filter. Namespace : Apache.Ignite.Core.Cache.Event Assembly : Apache.Ignite.Core.dll Syntax public interface ICacheEntryEventFilter<TK, TV> Type Parameters Name Description TK TV Methods Evaluate(ICacheEntryEvent<TK, TV>) Evaluates cache entry event. Declaration bool Evaluate(ICacheEntryEvent<TK, TV> evt) Parameters Type Name Description ICacheEntryEvent <TK, TV> evt Event. Returns Type Description System.Boolean"
  },
  "api/Apache.Ignite.Core.Cache.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.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.Query.IFieldsQueryCursor.html": {
    "href": "api/Apache.Ignite.Core.Cache.Query.IFieldsQueryCursor.html",
    "title": "Interface IFieldsQueryCursor | Apache Ignite.NET",
    "keywords": "Interface IFieldsQueryCursor Fields query cursor. Inherited Members IQueryCursor<IList<Object>>.GetAll() System.Collections.Generic.IEnumerable<System.Collections.Generic.IList<System.Object>>.GetEnumerator() System.IDisposable.Dispose() Namespace : Apache.Ignite.Core.Cache.Query Assembly : Apache.Ignite.Core.dll Syntax public interface IFieldsQueryCursor : IQueryCursor<IList<object>>, IEnumerable<IList<object>>, IEnumerable, IDisposable Properties FieldNames Gets the field names. Declaration IList<string> FieldNames { get; } Property Value Type Description System.Collections.Generic.IList < System.String >"
  },
  "api/Apache.Ignite.Core.Cache.Query.IQueryCursor-1.html": {
    "href": "api/Apache.Ignite.Core.Cache.Query.IQueryCursor-1.html",
    "title": "Interface IQueryCursor<T> | Apache Ignite.NET",
    "keywords": "Interface IQueryCursor<T> Query result cursor. Can be processed either in iterative mode, or by taking all entries using GetAll() method. Note that you get enumerator or call GetAll() method only once during cursor lifetime. Any further attempts to get enumerator or all entries will result in exception. Inherited Members System.Collections.Generic.IEnumerable<T>.GetEnumerator() System.IDisposable.Dispose() Namespace : Apache.Ignite.Core.Cache.Query Assembly : Apache.Ignite.Core.dll Syntax public interface IQueryCursor<T> : IEnumerable<T>, IEnumerable, IDisposable Type Parameters Name Description T Methods GetAll() Gets all query results. Use this method when you know in advance that query result is relatively small and will not cause memory utilization issues. Declaration IList<T> GetAll() Returns Type Description System.Collections.Generic.IList <T> List containing all query results."
  },
  "api/Apache.Ignite.Core.Client.Cache.html": {
    "href": "api/Apache.Ignite.Core.Client.Cache.html",
    "title": "Namespace Apache.Ignite.Core.Client.Cache | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Client.Cache Classes CacheClientConfiguration Ignite client cache configuration. Same thing as CacheConfiguration , but with a subset of properties that can be accessed from Ignite thin client (see IIgniteClient ). Note that caches created from server nodes can be accessed from thin client, and vice versa. The only difference is that thin client can not read or write certain CacheConfiguration properties, so a separate class exists to make it clear which properties can be used. Interfaces ICacheClient<TK, TV> Client cache API. See GetCache<TK, TV>(String) ."
  },
  "api/Apache.Ignite.Core.Client.ClientStatusCode.html": {
    "href": "api/Apache.Ignite.Core.Client.ClientStatusCode.html",
    "title": "Enum ClientStatusCode | Apache Ignite.NET",
    "keywords": "Enum ClientStatusCode Client status codes (see StatusCode ). Namespace : Apache.Ignite.Core.Client Assembly : Apache.Ignite.Core.dll Syntax public enum ClientStatusCode Fields Name Description CacheDoesNotExist Specified cache does not exist. CacheExists Cache already exists. Fail Operation failed (general-purpose code). InvalidOpCode Invalid request operation code. Success Operation succeeded. TooManyCursors The too many cursors (see MaxOpenCursorsPerConnection )."
  },
  "api/Apache.Ignite.Core.Cluster.IClusterNodeFilter.html": {
    "href": "api/Apache.Ignite.Core.Cluster.IClusterNodeFilter.html",
    "title": "Interface IClusterNodeFilter | Apache Ignite.NET",
    "keywords": "Interface IClusterNodeFilter Represents cluster node filter. Namespace : Apache.Ignite.Core.Cluster Assembly : Apache.Ignite.Core.dll Syntax public interface IClusterNodeFilter Methods Invoke(IClusterNode) Returns a value indicating whether provided node satisfies this predicate. Declaration bool Invoke(IClusterNode node) Parameters Type Name Description IClusterNode node Cluster node. Returns Type Description System.Boolean Value indicating whether provided node satisfies this predicate."
  },
  "api/Apache.Ignite.Core.Cluster.html": {
    "href": "api/Apache.Ignite.Core.Cluster.html",
    "title": "Namespace Apache.Ignite.Core.Cluster | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Cluster Classes ClusterGroupEmptyException Indicates an illegal call on empty projection. Thrown by projection when operation that requires at least one node is called on empty projection. ClusterTopologyException Indicates an error with grid topology (e.g., crashed node, etc.) Interfaces IBaselineNode Baseline topology node (see GetBaselineTopology() ). ICluster Represents whole cluster (group of all nodes in a cluster). All members are thread-safe and may be used concurrently from multiple threads. IClusterGroup Defines grid projection which represents a common functionality over a group of nodes. Grid projection allows to group Ignite nodes into various subgroups to perform distributed operations on them. All ForXXX(...)' methods will create a child grid projection from existing projection. If you create a new projection from current one, then the resulting projection will include a subset of nodes from current projection. The following code snippet shows how to create grid projections: var g = Ignition.GetIgnite(); // Projection over remote nodes. var remoteNodes = g.ForRemotes(); // Projection over random remote node. var randomNode = g.ForRandom(); // Projection over all nodes with cache named \"myCache\" enabled. var cacheNodes = g.ForCacheNodes(\"myCache\"); // Projection over all nodes that have user attribute \"group\" set to value \"worker\". var workerNodes = g.ForAttribute(\"group\", \"worker\"); Grid projection provides functionality for executing tasks and closures over nodes in this projection using GetCompute() . All members are thread-safe and may be used concurrently from multiple threads. IClusterMetrics Represents runtime information of a cluster. Apart from obvious statistical value, this information is used for implementation of load balancing, failover, and collision SPIs. For example, collision SPI in combination with fail-over SPI could check if other nodes don't have any active or waiting jobs and fail-over some jobs to those nodes. Node metrics for any node can be accessed via GetMetrics() method. Keep in mind that there will be a certain network delay (usually equal to heartbeat delay) for the accuracy of node metrics. However, when accessing metrics on local node the metrics are always accurate and up to date. IClusterNode Interface representing a single cluster node. Use GetAttribute<T>(String) or GetMetrics() to get static and dynamic information about remote nodes. You can get a list of all nodes in grid by calling GetNodes() on IIgnite instance. You can use Ignite node attributes to provide static information about a node. This information is initialized once within grid, during node startup, and remains the same throughout the lifetime of a node. All members are thread-safe and may be used concurrently from multiple threads. IClusterNodeFilter Represents cluster node filter."
  },
  "api/Apache.Ignite.Core.Compute.ComputeExecutionRejectedException.html": {
    "href": "api/Apache.Ignite.Core.Compute.ComputeExecutionRejectedException.html",
    "title": "Class ComputeExecutionRejectedException | Apache Ignite.NET",
    "keywords": "Class ComputeExecutionRejectedException Indicates a situation when execution service provided by the user in configuration rejects execution. Inheritance System.Object System.Exception IgniteException ComputeExecutionRejectedException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Compute Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class ComputeExecutionRejectedException : IgniteException, ISerializable, _Exception Constructors ComputeExecutionRejectedException() Initializes a new instance of the ComputeExecutionRejectedException class. Declaration public ComputeExecutionRejectedException() ComputeExecutionRejectedException(SerializationInfo, StreamingContext) Initializes a new instance of the ComputeExecutionRejectedException class. Declaration protected ComputeExecutionRejectedException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. ComputeExecutionRejectedException(String) Initializes a new instance of the ComputeExecutionRejectedException class. Declaration public ComputeExecutionRejectedException(string message) Parameters Type Name Description System.String message The message that describes the error. ComputeExecutionRejectedException(String, Exception) Initializes a new instance of the ComputeExecutionRejectedException class. Declaration public ComputeExecutionRejectedException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Compute.ComputeJobAdapter-1.html": {
    "href": "api/Apache.Ignite.Core.Compute.ComputeJobAdapter-1.html",
    "title": "Class ComputeJobAdapter<T> | Apache Ignite.NET",
    "keywords": "Class ComputeJobAdapter<T> Convenience adapter for IComputeJob<TRes> implementations. It provides the following functionality: Default implementation of Cancel() method and ability to check whether cancellation occurred with IsCancelled() method. Ability to set and get job arguments via SetArguments(Object[]) and GetArgument<TArg>(Int32) methods. Inheritance System.Object ComputeJobAdapter<T> Implements IComputeJob <T> Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Compute Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public abstract class ComputeJobAdapter<T> : IComputeJob<T> Type Parameters Name Description T Constructors ComputeJobAdapter() No-arg constructor. Declaration protected ComputeJobAdapter() ComputeJobAdapter(Object[]) Creates job with specified arguments. Declaration protected ComputeJobAdapter(params object[] args) Parameters Type Name Description System.Object [] args Optional job arguments. Methods Cancel() This method is called when system detects that completion of this job can no longer alter the overall outcome (for example, when parent task has already reduced the results). Note that job cancellation is only a hint, and it is really up to the actual job instance to gracefully finish execution and exit. Declaration public void Cancel() Execute() Executes this job. Declaration public abstract T Execute() Returns Type Description T Job execution result (possibly null ). This result will be returned in IComputeJobResult<TRes> object passed into OnResult(IComputeJobResult<TJobRes>, IList<IComputeJobResult<TJobRes>>) on caller node. GetArgument<TArg>(Int32) Sets given arguments. Declaration public TArg GetArgument<TArg>(int idx) Parameters Type Name Description System.Int32 idx Index of the argument. Returns Type Description TArg Type Parameters Name Description TArg IsCancelled() This method tests whether or not this job was cancelled. This method is thread-safe and can be called without extra synchronization. This method can be periodically called in Execute() method implementation to check whether or not this job cancelled. Note that system calls Cancel() method only as a hint and this is a responsibility of the implementation of the job to properly cancel its execution. Declaration protected bool IsCancelled() Returns Type Description System.Boolean True if this job was cancelled, false otherwise. SetArguments(Object[]) Sets given arguments. Declaration public void SetArguments(params object[] args) Parameters Type Name Description System.Object [] args Optional job arguments to set. Implements IComputeJob<TRes>"
  },
  "api/Apache.Ignite.Core.Compute.IComputeReducer-2.html": {
    "href": "api/Apache.Ignite.Core.Compute.IComputeReducer-2.html",
    "title": "Interface IComputeReducer<TRes, TReduceRes> | Apache Ignite.NET",
    "keywords": "Interface IComputeReducer<TRes, TReduceRes> Compute reducer which is capable of result collecting and reducing. Namespace : Apache.Ignite.Core.Compute Assembly : Apache.Ignite.Core.dll Syntax public interface IComputeReducer<in TRes, out TReduceRes> Type Parameters Name Description TRes Type of results passed for reducing. TReduceRes Type of reduced result. Methods Collect(TRes) Collect closure execution result. Declaration bool Collect(TRes res) Parameters Type Name Description TRes res Result. Returns Type Description System.Boolean True to continue collecting results until all closures are finished, false to start reducing. Reduce() Reduce closure execution results collected earlier. Declaration TReduceRes Reduce() Returns Type Description TReduceRes Reduce result."
  },
  "api/Apache.Ignite.Core.Compute.IComputeTask-2.html": {
    "href": "api/Apache.Ignite.Core.Compute.IComputeTask-2.html",
    "title": "Interface IComputeTask<TJobRes, TReduceRes> | Apache Ignite.NET",
    "keywords": "Interface IComputeTask<TJobRes, TReduceRes> IComputeTask without an argument. Inherited Members IComputeTask<Object, TJobRes, TReduceRes>.Map(IList<IClusterNode>, Object) IComputeTask<Object, TJobRes, TReduceRes>.OnResult(IComputeJobResult<TJobRes>, IList<IComputeJobResult<TJobRes>>) IComputeTask<Object, TJobRes, TReduceRes>.Reduce(IList<IComputeJobResult<TJobRes>>) Namespace : Apache.Ignite.Core.Compute Assembly : Apache.Ignite.Core.dll Syntax public interface IComputeTask<TJobRes, out TReduceRes> : IComputeTask<object, TJobRes, TReduceRes> Type Parameters Name Description TJobRes TReduceRes"
  },
  "api/Apache.Ignite.Core.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 DefaultTimeout The default timeout (see Timeout ). Negative value means no timeout. Declaration public static readonly TimeSpan DefaultTimeout Field Value Type Description System.TimeSpan"
  },
  "api/Apache.Ignite.Core.Datastream.IDataStreamer-2.html": {
    "href": "api/Apache.Ignite.Core.Datastream.IDataStreamer-2.html",
    "title": "Interface IDataStreamer<TK, TV> | Apache Ignite.NET",
    "keywords": "Interface IDataStreamer<TK, TV> Data streamer is responsible for loading external data into cache. It achieves it by properly buffering updates and properly mapping keys to nodes responsible for the data to make sure that there is the least amount of data movement possible and optimal network and memory utilization. Note that streamer will load data concurrently by multiple internal threads, so the data may get to remote nodes in different order from which it was added to the streamer. Also note that IDataStreamer is not the only way to load data into cache. Alternatively you can use LoadCache(Action<TK, TV>, Object[]) method to load data from underlying data store. You can also use standard cache put and putAll operations as well, but they most likely will not perform as well as this class for loading data. And finally, data can be loaded from underlying data store on demand, whenever it is accessed - for this no explicit data loading step is needed. IDataStreamer supports the following configuration properties: PerNodeBufferSizeWhen entries are added to data streamer they are not sent to Ignite right away and are buffered internally for better performance and network utilization. This setting controls the size of internal per-node buffer before buffered data is sent to remote node. Default value is 1024. PerNodeParallelOperationsSometimes data may be added to the data streamer faster than it can be put in cache. In this case, new buffered load messages are sent to remote nodes before responses from previous ones are received. This could cause unlimited heap memory utilization growth on local and remote nodes. To control memory utilization, this setting limits maximum allowed number of parallel buffered load messages that are being processed on remote nodes. If this number is exceeded, then data streamer add/remove methods will block to control memory utilization. Default value is 16. AutoFlushFrequencyAutomatic flush frequency in milliseconds. Essentially, this is the time after which the streamer will make an attempt to submit all data added so far to remote nodes. Note that there is no guarantee that data will be delivered after this concrete attempt (e.g., it can fail when topology is changing), but it won't be lost anyway. Disabled by default (default value is 0 ). IsolatedDefines if data streamer will assume that there are no other concurrent updates and allow data streamer choose most optimal concurrent implementation. Default value is false . All members are thread-safe and may be used concurrently from multiple threads. Inherited Members System.IDisposable.Dispose() Namespace : Apache.Ignite.Core.Datastream Assembly : Apache.Ignite.Core.dll Syntax public interface IDataStreamer<TK, TV> : IDisposable Type Parameters Name Description TK TV Properties AllowOverwrite Gets or sets a value indicating whether existing values can be overwritten by the data streamer. Performance is better when this flag is false. NOTE: When false, cache updates won't be propagated to cache store (even if SkipStore is false). Default is false . Declaration bool AllowOverwrite { get; set; } Property Value Type Description System.Boolean AutoFlushFrequency Automatic flush frequency in milliseconds. Essentially, this is the time after which the streamer will make an attempt to submit all data added so far to remote nodes. Note that there is no guarantee that data will be delivered after this concrete attempt (e.g., it can fail when topology is changing), but it won't be lost anyway. If set to 0 , automatic flush is disabled. Default is 0 (disabled). Declaration long AutoFlushFrequency { get; set; } Property Value Type Description System.Int64 CacheName Name of the cache to load data to. Declaration string CacheName { get; } Property Value Type Description System.String PerNodeBufferSize Size of per node key-value pairs buffer. Setter must be called before any add/remove operation. Default is DefaultPerNodeBufferSize . Declaration int PerNodeBufferSize { get; set; } Property Value Type Description System.Int32 PerNodeParallelOperations Maximum number of parallel load operations for a single node. Setter must be called before any add/remove operation. Default is 0, which means Ignite calculates this automatically as DataStreamerThreadPoolSize * DefaultParallelOperationsMultiplier . Declaration int PerNodeParallelOperations { get; set; } Property Value Type Description System.Int32 Receiver Gets or sets custom stream receiver. Declaration IStreamReceiver<TK, TV> Receiver { get; set; } Property Value Type Description IStreamReceiver <TK, TV> SkipStore Flag indicating that write-through behavior should be disabled for data loading. AllowOverwrite must be true for write-through to work. Default is false . Declaration bool SkipStore { get; set; } Property Value Type Description System.Boolean Task Gets the task for this loading process. This task completes whenever method Close(Boolean) completes. Declaration Task Task { get; } Property Value Type Description System.Threading.Tasks.Task Timeout Gets or sets the timeout. Negative values mean no timeout. Default is DefaultTimeout . Timeout is used in the following cases: Any data addition method can be blocked when all per node parallel operations are exhausted. The timeout defines the max time you will be blocked waiting for a permit to add a chunk of data into the streamer; Total timeout time for Flush() operation; Total timeout time for Close(Boolean) operation. Declaration TimeSpan Timeout { get; set; } Property Value Type Description System.TimeSpan Methods AddData(TK, TV) Adds single key-value pair for loading. Passing null as value will be interpreted as removal. Declaration Task AddData(TK key, TV val) Parameters Type Name Description TK key Key. TV val Value. Returns Type Description System.Threading.Tasks.Task Task for this operation. AddData(ICollection<KeyValuePair<TK, TV>>) Adds collection of key-value pairs for loading. Declaration Task AddData(ICollection<KeyValuePair<TK, TV>> entries) Parameters Type Name Description System.Collections.Generic.ICollection < System.Collections.Generic.KeyValuePair <TK, TV>> entries Entries. Returns Type Description System.Threading.Tasks.Task Task for this operation. AddData(KeyValuePair<TK, TV>) Adds single key-value pair for loading. Passing null as pair's value will be interpreted as removal. Declaration Task AddData(KeyValuePair<TK, TV> pair) Parameters Type Name Description System.Collections.Generic.KeyValuePair <TK, TV> pair Key-value pair. Returns Type Description System.Threading.Tasks.Task Task for this operation. Close(Boolean) Closes this streamer optionally loading any remaining data. Declaration void Close(bool cancel) Parameters Type Name Description System.Boolean cancel Whether to cancel ongoing loading operations. When set to true there is not guarantees what data will be actually loaded to cache. Flush() Loads any remaining data, but doesn't close the streamer. Data can be still added after flush is finished. This method blocks and doesn't allow to add any data until all data is loaded. Declaration void Flush() RemoveData(TK) Adds key for removal. Declaration Task RemoveData(TK key) Parameters Type Name Description TK key Key. Returns Type Description System.Threading.Tasks.Task Task for this operation. TryFlush() Makes an attempt to load remaining data. This method is mostly similar to Flush() with the difference that it won't wait and will exit immediately. Declaration void TryFlush() WithKeepBinary<TK1, TV1>() Gets streamer instance with binary mode enabled, changing key and/or value types if necessary. In binary mode stream receiver gets data in binary format. You can only change key/value types when transitioning from non-binary to binary streamer; Changing type of binary streamer is not allowed and will throw an System.InvalidOperationException Declaration IDataStreamer<TK1, TV1> WithKeepBinary<TK1, TV1>() Returns Type Description IDataStreamer <TK1, TV1> Streamer instance with binary mode enabled. Type Parameters Name Description TK1 Key type in binary mode. TV1 Value type in binary mode."
  },
  "api/Apache.Ignite.Core.Discovery.Tcp.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.Ignition.html": {
    "href": "api/Apache.Ignite.Core.Ignition.html",
    "title": "Class Ignition | Apache Ignite.NET",
    "keywords": "Class Ignition This class defines a factory for the main Ignite API. Use Start() method to start Ignite with default configuration. All members are thread-safe and may be used concurrently from multiple threads. Inheritance System.Object Ignition Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core Assembly : Apache.Ignite.Core.dll Syntax public static class Ignition Fields ClientConfigurationSectionName Default configuration section name. Declaration public const string ClientConfigurationSectionName = \"igniteClientConfiguration\" Field Value Type Description System.String ConfigurationSectionName Default configuration section name. Declaration public const string ConfigurationSectionName = \"igniteConfiguration\" Field Value Type Description System.String Properties ClientMode Gets or sets a value indicating whether Ignite should be started in client mode. Client nodes cannot hold data in caches. Declaration public static bool ClientMode { get; set; } Property Value Type Description System.Boolean Methods GetAll() Gets all started Ignite instances. Declaration public static ICollection<IIgnite> GetAll() Returns Type Description System.Collections.Generic.ICollection < IIgnite > All Ignite instances. GetIgnite() Gets the default Ignite instance with null name, or an instance with any name when there is only one. Note that caller of this method should not assume that it will return the same instance every time. Declaration public static IIgnite GetIgnite() Returns Type Description IIgnite Default Ignite instance. Exceptions Type Condition IgniteException When there is no matching Ignite instance. GetIgnite(String) Gets a named Ignite instance. If Ignite name is null or empty string, then default no-name Ignite will be returned. Note that caller of this method should not assume that it will return the same instance every time. Note that single process can run multiple Ignite instances and every Ignite instance (and its node) can belong to a different grid. Ignite name defines what grid a particular Ignite instance (and correspondingly its node) belongs to. Declaration public static IIgnite GetIgnite(string name) Parameters Type Name Description System.String name Ignite name to which requested Ignite instance belongs. If null , then Ignite instance belonging to a default no-name Ignite will be returned. Returns Type Description IIgnite An instance of named grid. Exceptions Type Condition IgniteException When there is no Ignite instance with specified name. Start() Starts Ignite with default configuration. By default this method will use Ignite configuration defined in {IGNITE_HOME}/config/default-config.xml configuration file. If such file is not found, then all system defaults will be used. Declaration public static IIgnite Start() Returns Type Description IIgnite Started Ignite. Start(IgniteConfiguration) Starts Ignite with given configuration. Declaration public static IIgnite Start(IgniteConfiguration cfg) Parameters Type Name Description IgniteConfiguration cfg Returns Type Description IIgnite Started Ignite. Start(String) Starts all grids specified within given Spring XML configuration file. If Ignite with given name is already started, then exception is thrown. In this case all instances that may have been started so far will be stopped too. Declaration public static IIgnite Start(string springCfgPath) Parameters Type Name Description System.String springCfgPath Spring XML configuration file path or URL. Note, that the path can be absolute or relative to IGNITE_HOME. Returns Type Description IIgnite Started Ignite. If Spring configuration contains multiple Ignite instances, then the 1st found instance is returned. StartClient() Reads IgniteClientConfiguration from application configuration IgniteClientConfigurationSection with ClientConfigurationSectionName name and connects Ignite lightweight (thin) client to an Ignite node. Thin client connects to an existing Ignite node with a socket and does not start JVM in process. Declaration public static IIgniteClient StartClient() Returns Type Description IIgniteClient Ignite client instance. StartClient(IgniteClientConfiguration) Connects Ignite lightweight (thin) client to an Ignite node. Thin client connects to an existing Ignite node with a socket and does not start JVM in process. Declaration public static IIgniteClient StartClient(IgniteClientConfiguration clientConfiguration) Parameters Type Name Description IgniteClientConfiguration clientConfiguration The client configuration. Returns Type Description IIgniteClient Ignite client instance. StartClient(String) Reads IgniteClientConfiguration from application configuration IgniteClientConfigurationSection with specified name and connects Ignite lightweight (thin) client to an Ignite node. Thin client connects to an existing Ignite node with a socket and does not start JVM in process. Declaration public static IIgniteClient StartClient(string sectionName) Parameters Type Name Description System.String sectionName Name of the configuration section. Returns Type Description IIgniteClient Ignite client instance. StartClient(String, String) Reads IgniteConfiguration from application configuration IgniteConfigurationSection with specified name and starts Ignite. Declaration public static IIgniteClient StartClient(string sectionName, string configPath) Parameters Type Name Description System.String sectionName Name of the section. System.String configPath Path to the configuration file. Returns Type Description IIgniteClient Started Ignite. StartFromApplicationConfiguration() Reads IgniteConfiguration from application configuration IgniteConfigurationSection with ConfigurationSectionName name and starts Ignite. Declaration public static IIgnite StartFromApplicationConfiguration() Returns Type Description IIgnite Started Ignite. StartFromApplicationConfiguration(String) Reads IgniteConfiguration from application configuration IgniteConfigurationSection with specified name and starts Ignite. Declaration public static IIgnite StartFromApplicationConfiguration(string sectionName) Parameters Type Name Description System.String sectionName Name of the section. Returns Type Description IIgnite Started Ignite. StartFromApplicationConfiguration(String, String) Reads IgniteConfiguration from application configuration IgniteConfigurationSection with specified name and starts Ignite. Declaration public static IIgnite StartFromApplicationConfiguration(string sectionName, string configPath) Parameters Type Name Description System.String sectionName Name of the section. System.String configPath Path to the configuration file. Returns Type Description IIgnite Started Ignite. Stop(String, Boolean) Stops named grid. If cancel flag is set to true then all jobs currently executing on local node will be interrupted. If grid name is null , then default no-name Ignite will be stopped. Declaration public static bool Stop(string name, bool cancel) Parameters Type Name Description System.String name Grid name. If null , then default no-name Ignite will be stopped. System.Boolean cancel If true then all jobs currently executing will be cancelled by calling ComputeJob.cancel method. Returns Type Description System.Boolean true if named Ignite instance was indeed found and stopped, false othwerwise (the instance with given name was not found). StopAll(Boolean) Stops all started grids. If cancel flag is set to true then all jobs currently executing on local node will be interrupted. Declaration public static void StopAll(bool cancel) Parameters Type Name Description System.Boolean cancel If true then all jobs currently executing will be cancelled by calling ComputeJob.Cancel() method. TryGetIgnite() Gets the default Ignite instance with null name, or an instance with any name when there is only one. Returns null when there are no Ignite instances started, or when there are more than one, and none of them has null name. Declaration public static IIgnite TryGetIgnite() Returns Type Description IIgnite An instance of default no-name grid, or null. TryGetIgnite(String) Gets a named Ignite instance, or null if none found. If Ignite name is null or empty string, then default no-name Ignite will be returned. Note that caller of this method should not assume that it will return the same instance every time. Note that single process can run multiple Ignite instances and every Ignite instance (and its node) can belong to a different grid. Ignite name defines what grid a particular Ignite instance (and correspondingly its node) belongs to. Declaration public static IIgnite TryGetIgnite(string name) Parameters Type Name Description System.String name Ignite name to which requested Ignite instance belongs. If null , then Ignite instance belonging to a default no-name Ignite will be returned. Returns Type Description IIgnite An instance of named grid, or null."
  },
  "api/Apache.Ignite.Core.IIgnite.html": {
    "href": "api/Apache.Ignite.Core.IIgnite.html",
    "title": "Interface IIgnite | Apache Ignite.NET",
    "keywords": "Interface IIgnite Main entry point for all Ignite APIs. You can obtain an instance of IIgnite through GetIgnite() , or for named grids you can use GetIgnite(String) . Note that you can have multiple instances of IIgnite running in the same process by giving each instance a different name. All members are thread-safe and may be used concurrently from multiple threads. Inherited Members System.IDisposable.Dispose() Namespace : Apache.Ignite.Core Assembly : Apache.Ignite.Core.dll Syntax public interface IIgnite : IDisposable Properties Logger Gets the logger. See Logger for customization. Declaration ILogger Logger { get; } Property Value Type Description ILogger Name Gets the name of the grid this Ignite instance (and correspondingly its local node) belongs to. Note that single process can have multiple Ignite instances all belonging to different grids. Grid name allows to indicate to what grid this particular Ignite instance (i.e. Ignite runtime and its local node) belongs to. If default Ignite instance is used, then null is returned. Refer to Ignition documentation for information on how to start named grids. Declaration string Name { get; } Property Value Type Description System.String Name of the grid, or null for default grid. Methods AddCacheConfiguration(CacheConfiguration) Adds cache configuration template. Name should contain *. Template settins are applied to a cache created with CreateCache<TK, TV>(String) if specified name matches the template name. Declaration void AddCacheConfiguration(CacheConfiguration configuration) Parameters Type Name Description CacheConfiguration configuration Configuration. CreateCache<TK, TV>(CacheConfiguration) Dynamically starts new cache using provided configuration. Declaration ICache<TK, TV> CreateCache<TK, TV>(CacheConfiguration configuration) Parameters Type Name Description CacheConfiguration configuration Cache configuration. Returns Type Description ICache <TK, TV> Existing or newly created cache. Type Parameters Name Description TK Cache key type. TV Cache value type. CreateCache<TK, TV>(CacheConfiguration, NearCacheConfiguration) Dynamically starts new cache using provided configuration. Declaration ICache<TK, TV> CreateCache<TK, TV>(CacheConfiguration configuration, NearCacheConfiguration nearConfiguration) Parameters Type Name Description CacheConfiguration configuration Cache configuration. NearCacheConfiguration nearConfiguration Near cache configuration for client. Returns Type Description ICache <TK, TV> Existing or newly created cache. Type Parameters Name Description TK Cache key type. TV Cache value type. CreateCache<TK, TV>(String) Dynamically starts new cache using template configuration. Declaration ICache<TK, TV> CreateCache<TK, TV>(string name) Parameters Type Name Description System.String name Cache name. Returns Type Description ICache <TK, TV> Existing or newly created cache. Type Parameters Name Description TK Cache key type. TV Cache value type. CreateNearCache<TK, TV>(String, NearCacheConfiguration) Starts a near cache on local client node if cache with specified was previously started. This method does not work on server nodes. Declaration ICache<TK, TV> CreateNearCache<TK, TV>(string name, NearCacheConfiguration configuration) Parameters Type Name Description System.String name The name. NearCacheConfiguration configuration The configuration. Returns Type Description ICache <TK, TV> Near cache instance. Type Parameters Name Description TK Cache key type. TV Cache value type. DestroyCache(String) Destroys dynamically created (with CreateCache<TK, TV>(String) or GetOrCreateCache<TK, TV>(String) ) cache. Declaration void DestroyCache(string name) Parameters Type Name Description System.String name The name of the cache to stop. GetAffinity(String) Gets affinity service to provide information about data partitioning and distribution. Declaration ICacheAffinity GetAffinity(string name) Parameters Type Name Description System.String name Cache name. Returns Type Description ICacheAffinity Cache data affinity service. GetAtomicLong(String, Int64, Boolean) Gets an atomic long with specified name from cache. Creates new atomic long in cache if it does not exist and create is true. Declaration IAtomicLong GetAtomicLong(string name, long initialValue, bool create) Parameters Type Name Description System.String name Name of the atomic long. System.Int64 initialValue Initial value for the atomic long. Ignored if create is false. System.Boolean create Flag indicating whether atomic long should be created if it does not exist. Returns Type Description IAtomicLong Atomic long instance with specified name, or null if it does not exist and create flag is not set. Exceptions Type Condition IgniteException If atomic long could not be fetched or created. GetAtomicReference<T>(String, T, Boolean) Gets an atomic reference with specified name from cache. Creates new atomic reference in cache if it does not exist and create is true. Declaration IAtomicReference<T> GetAtomicReference<T>(string name, T initialValue, bool create) Parameters Type Name Description System.String name Name of the atomic reference. T initialValue Initial value for the atomic reference. Ignored if create is false. System.Boolean create Flag indicating whether atomic reference should be created if it does not exist. Returns Type Description IAtomicReference <T> Atomic reference instance with specified name, or null if it does not exist and create flag is not set. Type Parameters Name Description T Exceptions Type Condition IgniteException If atomic reference could not be fetched or created. GetAtomicSequence(String, Int64, Boolean) Gets an atomic sequence with specified name from cache. Creates new atomic sequence in cache if it does not exist and create is true. Declaration IAtomicSequence GetAtomicSequence(string name, long initialValue, bool create) Parameters Type Name Description System.String name Name of the atomic sequence. System.Int64 initialValue Initial value for the atomic sequence. Ignored if create is false. System.Boolean create Flag indicating whether atomic sequence should be created if it does not exist. Returns Type Description IAtomicSequence Atomic sequence instance with specified name, or null if it does not exist and create flag is not set. Exceptions Type Condition IgniteException If atomic sequence could not be fetched or created. GetBinary() Gets an instance of IBinary interface. Declaration IBinary GetBinary() Returns Type Description IBinary Instance of IBinary interface GetCache<TK, TV>(String) Gets the cache instance for the given name to work with keys and values of specified types. You can get instances of ICache of the same name, but with different key/value types. These will use the same named cache, but only allow working with entries of specified types. Attempt to retrieve an entry of incompatible type will result in System.InvalidCastException . Use GetCache<TK, TV>(String) in order to work with entries of arbitrary types. Declaration ICache<TK, TV> GetCache<TK, TV>(string name) Parameters Type Name Description System.String name Cache name. Returns Type Description ICache <TK, TV> Cache instance for given name. Type Parameters Name Description TK Cache key type. TV Cache value type. GetCacheNames() Gets the collection of names of currently available caches, or empty collection if there are no caches. Declaration ICollection<string> GetCacheNames() Returns Type Description System.Collections.Generic.ICollection < System.String > Collection of names of currently available caches. GetCluster() Gets an instance of ICluster interface. Declaration ICluster GetCluster() Returns Type Description ICluster GetCompute() Gets compute functionality over this grid projection. All operations on the returned ICompute instance will only include nodes from this projection. Declaration ICompute GetCompute() Returns Type Description ICompute Compute instance over this grid projection. GetConfiguration() Gets the configuration of this Ignite instance. Declaration IgniteConfiguration GetConfiguration() Returns Type Description IgniteConfiguration GetDataRegionMetrics() Gets a collection of memory metrics, one for each DataRegionConfigurations . Metrics should be enabled with MetricsEnabled . Declaration ICollection<IDataRegionMetrics> GetDataRegionMetrics() Returns Type Description System.Collections.Generic.ICollection < IDataRegionMetrics > GetDataRegionMetrics(String) Gets the memory metrics for the specified data region. To get metrics for the default memory region, use DefaultDataRegionName . Declaration IDataRegionMetrics GetDataRegionMetrics(string dataRegionName) Parameters Type Name Description System.String dataRegionName Name of the data region. Returns Type Description IDataRegionMetrics GetDataStorageMetrics() Gets the persistent store metrics. To enable metrics set MetricsEnabled property in DataStorageConfiguration . Declaration IDataStorageMetrics GetDataStorageMetrics() Returns Type Description IDataStorageMetrics GetDataStreamer<TK, TV>(String) Gets a new instance of data streamer associated with given cache name. Data streamer is responsible for loading external data into Ignite. For more information refer to IDataStreamer<TK, TV> documentation. Declaration IDataStreamer<TK, TV> GetDataStreamer<TK, TV>(string cacheName) Parameters Type Name Description System.String cacheName Cache name ( null for default cache). Returns Type Description IDataStreamer <TK, TV> Data streamer. Type Parameters Name Description TK TV GetEvents() Gets events facade over all cluster nodes. Declaration IEvents GetEvents() Returns Type Description IEvents Events facade over all cluster nodes. GetMemoryMetrics() Gets a collection of memory metrics, one for each MemoryPolicies . Memory metrics should be enabled with MetricsEnabled . Obsolete, use GetDataRegionMetrics() . Declaration [Obsolete(\"Use GetDataRegionMetrics.\")] ICollection<IMemoryMetrics> GetMemoryMetrics() Returns Type Description System.Collections.Generic.ICollection < IMemoryMetrics > GetMemoryMetrics(String) Gets the memory metrics for the specified memory policy. To get metrics for the default memory region, use DefaultMemoryPolicyName . Obsolete, use GetDataRegionMetrics(String) . Declaration [Obsolete(\"Use GetDataRegionMetrics.\")] IMemoryMetrics GetMemoryMetrics(string memoryPolicyName) Parameters Type Name Description System.String memoryPolicyName Name of the memory policy. Returns Type Description IMemoryMetrics GetMessaging() Gets messaging facade over all cluster nodes. Declaration IMessaging GetMessaging() Returns Type Description IMessaging Messaging instance over all cluster nodes. GetOrCreateCache<TK, TV>(CacheConfiguration) Gets existing cache with the given name or creates new one using provided configuration. Declaration ICache<TK, TV> GetOrCreateCache<TK, TV>(CacheConfiguration configuration) Parameters Type Name Description CacheConfiguration configuration Cache configuration. Returns Type Description ICache <TK, TV> Existing or newly created cache. Type Parameters Name Description TK Cache key type. TV Cache value type. GetOrCreateCache<TK, TV>(CacheConfiguration, NearCacheConfiguration) Gets existing cache with the given name or creates new one using provided configuration. Declaration ICache<TK, TV> GetOrCreateCache<TK, TV>(CacheConfiguration configuration, NearCacheConfiguration nearConfiguration) Parameters Type Name Description CacheConfiguration configuration Cache configuration. NearCacheConfiguration nearConfiguration Near cache configuration for client. Returns Type Description ICache <TK, TV> Existing or newly created cache. Type Parameters Name Description TK Cache key type. TV Cache value type. GetOrCreateCache<TK, TV>(String) Gets existing cache with the given name or creates new one using template configuration. Declaration ICache<TK, TV> GetOrCreateCache<TK, TV>(string name) Parameters Type Name Description System.String name Cache name. Returns Type Description ICache <TK, TV> Existing or newly created cache. Type Parameters Name Description TK Cache key type. TV Cache value type. GetOrCreateNearCache<TK, TV>(String, NearCacheConfiguration) Gets existing near cache with the given name or creates a new one. Declaration ICache<TK, TV> GetOrCreateNearCache<TK, TV>(string name, NearCacheConfiguration configuration) Parameters Type Name Description System.String name The name. NearCacheConfiguration configuration The configuration. Returns Type Description ICache <TK, TV> Near cache instance. Type Parameters Name Description TK Cache key type. TV Cache value type. GetPersistentStoreMetrics() Gets the persistent store metrics. To enable metrics set MetricsEnabled property in PersistentStoreConfiguration . Declaration [Obsolete(\"Use GetDataStorageMetrics.\")] IPersistentStoreMetrics GetPersistentStoreMetrics() Returns Type Description IPersistentStoreMetrics GetPlugin<T>(String) Gets the plugin by name. Declaration T GetPlugin<T>(string name)where T : class Parameters Type Name Description System.String name Plugin name. Returns Type Description T Plugin instance. Type Parameters Name Description T Plugin type Exceptions Type Condition PluginNotFoundException When plugin with specified name has not been found. GetServices() Gets services facade over all cluster nodes. Declaration IServices GetServices() Returns Type Description IServices Services facade over all cluster nodes. GetTransactions() Gets Ignite transactions facade. Declaration ITransactions GetTransactions() Returns Type Description ITransactions IsActive() Determines whether this grid is in active state. Declaration [Obsolete(\"Use GetCluster().IsActive instead.\")] bool IsActive() Returns Type Description System.Boolean true if the grid is active; otherwise, false . ResetLostPartitions(IEnumerable<String>) Clears partitions' lost state and moves caches to a normal mode. Declaration void ResetLostPartitions(IEnumerable<string> cacheNames) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.String > cacheNames Names of caches to reset partitions for. ResetLostPartitions(String[]) Clears partitions' lost state and moves caches to a normal mode. Declaration void ResetLostPartitions(params string[] cacheNames) Parameters Type Name Description System.String [] cacheNames Names of caches to reset partitions for. SetActive(Boolean) Changes Ignite grid state to active or inactive. Declaration [Obsolete(\"Use GetCluster().SetActive instead.\")] void SetActive(bool isActive) Parameters Type Name Description System.Boolean isActive Events ClientDisconnected Occurs when client node disconnects from the cluster. This event can only occur when this instance runs in client mode ( ClientMode ). Declaration event EventHandler ClientDisconnected Event Type Type Description System.EventHandler ClientReconnected Occurs when client node reconnects to the cluster. This event can only occur when this instance runs in client mode ( ClientMode ). Declaration event EventHandler<ClientReconnectEventArgs> ClientReconnected Event Type Type Description System.EventHandler < ClientReconnectEventArgs > Stopped Occurs when node has stopped. Node can't be used at this point. See also: AfterNodeStop . Declaration event EventHandler Stopped Event Type Type Description System.EventHandler Stopping Occurs when node begins to stop. Node is fully functional at this point. See also: BeforeNodeStop . Declaration event EventHandler Stopping Event Type Type Description System.EventHandler"
  },
  "api/Apache.Ignite.Core.Interop.IPlatformTarget.html": {
    "href": "api/Apache.Ignite.Core.Interop.IPlatformTarget.html",
    "title": "Interface IPlatformTarget | Apache Ignite.NET",
    "keywords": "Interface IPlatformTarget Interface to interoperate with org.apache.ignite.internal.processors.platform.PlatformTarget on Java side. Namespace : Apache.Ignite.Core.Interop Assembly : Apache.Ignite.Core.dll Syntax public interface IPlatformTarget Methods DoOutOpAsync<T>(Int32, Action<IBinaryRawWriter>, Func<IBinaryRawReader, T>) Performs asynchronous operation. Declaration Task<T> DoOutOpAsync<T>(int type, Action<IBinaryRawWriter> writeAction, Func<IBinaryRawReader, T> readAction) Parameters Type Name Description System.Int32 type Operation type code. System.Action < IBinaryRawWriter > writeAction Write action (can be null). System.Func < IBinaryRawReader , T> readAction Read function (can be null). Returns Type Description System.Threading.Tasks.Task <T> Task. Type Parameters Name Description T Result type DoOutOpAsync<T>(Int32, Action<IBinaryRawWriter>, Func<IBinaryRawReader, T>, CancellationToken) Performs asynchronous operation. Declaration Task<T> DoOutOpAsync<T>(int type, Action<IBinaryRawWriter> writeAction, Func<IBinaryRawReader, T> readAction, CancellationToken cancellationToken) Parameters Type Name Description System.Int32 type Operation type code. System.Action < IBinaryRawWriter > writeAction Write action (can be null). System.Func < IBinaryRawReader , T> readAction Read function (can be null). System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task <T> Task. Type Parameters Name Description T Result type InLongOutLong(Int32, Int64) Performs InLongOutLong operation. Declaration long InLongOutLong(int type, long val) Parameters Type Name Description System.Int32 type Operation type code. System.Int64 val Value. Returns Type Description System.Int64 Result. InObjectStreamOutObjectStream<T>(Int32, IPlatformTarget, Action<IBinaryRawWriter>, Func<IBinaryRawReader, IPlatformTarget, T>) Performs InObjectStreamOutObjectStream operation. Declaration T InObjectStreamOutObjectStream<T>(int type, IPlatformTarget arg, Action<IBinaryRawWriter> writeAction, Func<IBinaryRawReader, IPlatformTarget, T> readAction) Parameters Type Name Description System.Int32 type Operation type code. IPlatformTarget arg Target argument. System.Action < IBinaryRawWriter > writeAction Write action. System.Func < IBinaryRawReader , IPlatformTarget , T> readAction Read action. Returns Type Description T Result. Type Parameters Name Description T Result type. InStreamOutLong(Int32, Action<IBinaryRawWriter>) Performs InStreamOutLong operation. Declaration long InStreamOutLong(int type, Action<IBinaryRawWriter> writeAction) Parameters Type Name Description System.Int32 type Operation type code. System.Action < IBinaryRawWriter > writeAction Write action. Returns Type Description System.Int64 Result. InStreamOutObject(Int32, Action<IBinaryRawWriter>) Performs InStreamOutObject operation. Declaration IPlatformTarget InStreamOutObject(int type, Action<IBinaryRawWriter> writeAction) Parameters Type Name Description System.Int32 type Operation type code. System.Action < IBinaryRawWriter > writeAction Write action. Returns Type Description IPlatformTarget Result. InStreamOutStream<T>(Int32, Action<IBinaryRawWriter>, Func<IBinaryRawReader, T>) Performs InStreamOutStream operation. Declaration T InStreamOutStream<T>(int type, Action<IBinaryRawWriter> writeAction, Func<IBinaryRawReader, T> readAction) Parameters Type Name Description System.Int32 type Operation type code. System.Action < IBinaryRawWriter > writeAction Write action. System.Func < IBinaryRawReader , T> readAction Read action. Returns Type Description T Result. Type Parameters Name Description T Result type. OutObject(Int32) Performs the OutObject operation. Declaration IPlatformTarget OutObject(int type) Parameters Type Name Description System.Int32 type Operation type code. Returns Type Description IPlatformTarget Result. OutStream<T>(Int32, Func<IBinaryRawReader, T>) Performs OutStream operation. Declaration T OutStream<T>(int type, Func<IBinaryRawReader, T> readAction) Parameters Type Name Description System.Int32 type Operation type code. System.Func < IBinaryRawReader , T> readAction Read action. Returns Type Description T Result. Type Parameters Name Description T Result type."
  },
  "api/Apache.Ignite.Core.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.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.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.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.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.Services.IService.html": {
    "href": "api/Apache.Ignite.Core.Services.IService.html",
    "title": "Interface IService | Apache Ignite.NET",
    "keywords": "Interface IService Represents Ignite-managed service. Namespace : Apache.Ignite.Core.Services Assembly : Apache.Ignite.Core.dll Syntax public interface IService Methods Cancel(IServiceContext) Cancels this instance. Note that Ignite cannot guarantee that the service exits from Execute(IServiceContext) method whenever Cancel(IServiceContext) is called. It is up to the user to make sure that the service code properly reacts to cancellations. Declaration void Cancel(IServiceContext context) Parameters Type Name Description IServiceContext context Service execution context. Execute(IServiceContext) Starts execution of this service. This method is automatically invoked whenever an instance of the service is deployed on a Ignite node. Note that service is considered deployed even after it exits the Execute method and can be cancelled (or undeployed) only by calling any of the Cancel methods on IServices API. Also note that service is not required to exit from Execute method until Cancel method was called. Declaration void Execute(IServiceContext context) Parameters Type Name Description IServiceContext context Service execution context. Init(IServiceContext) Initializes this instance before execution. Declaration void Init(IServiceContext context) Parameters Type Name Description IServiceContext context Service execution context."
  },
  "api/Apache.Ignite.Core.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.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.Linq.QueryOptions.html": {
    "href": "api/Apache.Ignite.Linq.QueryOptions.html",
    "title": "Class QueryOptions | Apache Ignite.NET",
    "keywords": "Class QueryOptions Cache query options. Inheritance System.Object QueryOptions Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Linq Assembly : Apache.Ignite.Linq.dll Syntax public class QueryOptions Constructors QueryOptions() Initializes a new instance of the QueryOptions class. Declaration public QueryOptions() Fields DefaultPageSize Default page size. Declaration public const int DefaultPageSize = 1024 Field Value Type Description System.Int32 Properties Colocated Gets or sets a value indicating whether this query operates on colocated data. Whenever Ignite executes a distributed query, it sends sub-queries to individual cluster members. If you know in advance that the elements of your query selection are colocated together on the same node and you group by colocated key (primary or affinity key), then Ignite can make significant performance and network optimizations by grouping data on remote nodes. Declaration public bool Colocated { get; set; } Property Value Type Description System.Boolean EnableDistributedJoins Gets or sets a value indicating whether distributed joins should be enabled for this query. When disabled, join results will only contain colocated data (joins work locally). When enabled, joins work as expected, no matter how the data is distributed. Declaration public bool EnableDistributedJoins { get; set; } Property Value Type Description System.Boolean true if enable distributed joins should be enabled; otherwise, false . EnforceJoinOrder Gets or sets a value indicating whether join order of tables should be enforced. When true, query optimizer will not reorder tables in join. It is not recommended to enable this property until you are sure that your indexes and the query itself are correct and tuned as much as possible but query optimizer still produces wrong join order. Declaration public bool EnforceJoinOrder { get; set; } Property Value Type Description System.Boolean true if join order should be enforced; otherwise, false . Lazy Gets or sets a value indicating whether this query is lazy. By default Ignite attempts to fetch the whole query result set to memory and send it to the client. For small and medium result sets this provides optimal performance and minimize duration of internal database locks, thus increasing concurrency. If result set is too big to fit in available memory this could lead to excessive GC pauses and even OutOfMemoryError. Use this flag as a hint for Ignite to fetch result set lazily, thus minimizing memory consumption at the cost of moderate performance hit. Declaration public bool Lazy { get; set; } Property Value Type Description System.Boolean Local Local flag. When set query will be executed only on local node, so only local entries will be returned as query result. Defaults to false . Declaration public bool Local { get; set; } Property Value Type Description System.Boolean PageSize Page size, defaults to DefaultPageSize . Declaration public int PageSize { get; set; } Property Value Type Description System.Int32 ReplicatedOnly Gets or sets a value indicating whether this query contains only replicated tables. This is a hint for potentially more effective execution. Declaration public bool ReplicatedOnly { get; set; } Property Value Type Description System.Boolean TableName Gets or sets the name of the table. Table name is equal to short class name of a cache value. When a cache has only one type of values, or only one QueryEntity defined, table name will be inferred and can be omitted (null). Declaration public string TableName { get; set; } Property Value Type Description System.String The name of the table. Timeout Gets or sets the query timeout. Query will be automatically cancelled if the execution timeout is exceeded. Default is System.TimeSpan.Zero , which means no timeout. Declaration public TimeSpan Timeout { get; set; } Property Value Type Description System.TimeSpan"
  },
  "api/Apache.Ignite.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. Delegates CompiledQueryFunc<T> Delegate for compiled query with arbitrary number of arguments."
  },
  "api/Apache.Ignite.Log4Net.IgniteLog4NetLogger.html": {
    "href": "api/Apache.Ignite.Log4Net.IgniteLog4NetLogger.html",
    "title": "Class IgniteLog4NetLogger | Apache Ignite.NET",
    "keywords": "Class IgniteLog4NetLogger Ignite log4net integration. Inheritance System.Object IgniteLog4NetLogger Implements ILogger Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Log4Net Assembly : Apache.Ignite.Log4Net.dll Syntax public class IgniteLog4NetLogger : ILogger Constructors IgniteLog4NetLogger() Initializes a new instance of the IgniteLog4NetLogger class. Declaration public IgniteLog4NetLogger() IgniteLog4NetLogger(ILog) Initializes a new instance of the IgniteLog4NetLogger class. Declaration public IgniteLog4NetLogger(ILog log) Parameters Type Name Description log4net.ILog log The log. Methods ConvertLogLevel(LogLevel) Converts the Ignite LogLevel to the log4net log level. Declaration public static Level ConvertLogLevel(LogLevel level) Parameters Type Name Description LogLevel level The Ignite log level. Returns Type Description log4net.Core.Level Corresponding log4net log level. IsEnabled(LogLevel) Determines whether the specified log level is enabled. Declaration public bool IsEnabled(LogLevel level) Parameters Type Name Description LogLevel level The level. Returns Type Description System.Boolean Value indicating whether the specified log level is enabled Log(LogLevel, String, Object[], IFormatProvider, String, String, Exception) Logs the specified message. Declaration public void Log(LogLevel level, string message, object[] args, IFormatProvider formatProvider, string category, string nativeErrorInfo, Exception ex) Parameters Type Name Description LogLevel level The level. System.String message The message. System.Object [] args The arguments to format message . Can be null (formatting will not occur). System.IFormatProvider formatProvider The format provider. Can be null if args is null. System.String category The logging category name. System.String nativeErrorInfo The native error information. System.Exception ex The exception. Can be null. Implements ILogger"
  },
  "api/Apache.Ignite.Core.Binary.BinaryReflectiveSerializer.html": {
    "href": "api/Apache.Ignite.Core.Binary.BinaryReflectiveSerializer.html",
    "title": "Class BinaryReflectiveSerializer | Apache Ignite.NET",
    "keywords": "Class BinaryReflectiveSerializer Binary serializer which reflectively writes all fields except of ones with System.NonSerializedAttribute . Note that Java platform stores dates as a difference between current time and predefined absolute UTC date. Therefore, this difference is always the same for all time zones. .NET, in contrast, stores dates as a difference between current time and some predefined date relative to the current time zone. It means that this difference will be different as you change time zones. To overcome this discrepancy Ignite always converts .Net date to UTC form before serializing and allows user to decide whether to deserialize them in UTC or local form using ReadTimestamp(..., true/false) methods in IBinaryReader and IBinaryRawReader . This serializer always read dates in UTC form. It means that if you have local date in any field/property, it will be implicitly converted to UTC form after the first serialization-deserialization cycle. Inheritance System.Object BinaryReflectiveSerializer Implements IBinarySerializer Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Binary Assembly : Apache.Ignite.Core.dll Syntax public sealed class BinaryReflectiveSerializer : IBinarySerializer Properties ForceTimestamp Gets or sets a value indicating whether all DateTime values should be written as Timestamp. Timestamp format is required for values used in SQL and for interoperation with other platforms. Only UTC values are supported in Timestamp format. Other values will cause an exception on write. Normally serializer uses WriteObject<T>(String, T) for DateTime fields. This attribute changes the behavior to WriteTimestamp(String, Nullable<DateTime>) . See also TimestampAttribute . Declaration public bool ForceTimestamp { get; set; } Property Value Type Description System.Boolean RawMode Gets or value indicating whether raw mode serialization should be used. Raw mode does not include field names, improving performance and memory usage. However, queries do not support raw objects. Declaration public bool RawMode { get; set; } Property Value Type Description System.Boolean Methods ReadBinary(Object, IBinaryReader) Read binary object. Declaration public void ReadBinary(object obj, IBinaryReader reader) Parameters Type Name Description System.Object obj Instantiated empty object. IBinaryReader reader Binary reader. WriteBinary(Object, IBinaryWriter) Write binary object. Declaration public void WriteBinary(object obj, IBinaryWriter writer) Parameters Type Name Description System.Object obj Object. IBinaryWriter writer Binary writer. Implements IBinarySerializer"
  },
  "api/Apache.Ignite.Core.Binary.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.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.Binary.html": {
    "href": "api/Apache.Ignite.Core.Binary.html",
    "title": "Namespace Apache.Ignite.Core.Binary | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Binary Classes BinaryBasicNameMapper Base binary name mapper implementation. BinaryConfiguration Binary type configuration. BinaryObjectException Indicates an error during binarization. BinaryReflectiveSerializer Binary serializer which reflectively writes all fields except of ones with System.NonSerializedAttribute . Note that Java platform stores dates as a difference between current time and predefined absolute UTC date. Therefore, this difference is always the same for all time zones. .NET, in contrast, stores dates as a difference between current time and some predefined date relative to the current time zone. It means that this difference will be different as you change time zones. To overcome this discrepancy Ignite always converts .Net date to UTC form before serializing and allows user to decide whether to deserialize them in UTC or local form using ReadTimestamp(..., true/false) methods in IBinaryReader and IBinaryRawReader . This serializer always read dates in UTC form. It means that if you have local date in any field/property, it will be implicitly converted to UTC form after the first serialization-deserialization cycle. BinaryTypeConfiguration Binary type configuration. BinaryTypeNames Binary type name constants. TimestampAttribute Instructs the serializer to write DateTime fields and properties in Timestamp format, which is interoperable with other platforms and works in SQL, but does not allow non-UTC values. When applied to a struct or a class, changes behavior for all fields and properties. Normally serializer uses WriteObject<T>(String, T) for DateTime fields. This attribute changes the behavior to WriteTimestamp(String, Nullable<DateTime>) . See also ForceTimestamp . Interfaces IBinarizable Interface to implement custom serialization logic. IBinary Defines binary objects functionality. With binary objects you are able to: Seamlessly interoperate between Java, .NET, and C++. Make any object binary with zero code change to your existing code. Nest binary objects within each other. Automatically handle circular or null references. Automatically convert collections and maps between Java, .NET, and C++. Optionally avoid deserialization of objects on the server side. Avoid need to have concrete class definitions on the server side. Dynamically change structure of the classes without having to restart the cluster. Index into binary objects for querying purposes. IBinaryIdMapper Maps class name and class field names to integer identifiers. IBinaryNameMapper Maps type and field names to different names. IBinaryObject Wrapper for serialized objects. IBinaryObjectBuilder binary object builder. Provides ability to build binary objects dynamically without having class definitions. Note that type ID is required in order to build binary object. Usually it is enough to provide a simple type name and Ignite will generate the type ID automatically. IBinaryRawReader Raw reader for binary objects. IBinaryRawWriter Raw writer for binary objects. IBinaryReader Reader for binary objects. IBinarySerializer Binary serializer. IBinaryType Binary type metadata. IBinaryWriter Writer for binary objects."
  },
  "api/Apache.Ignite.Core.Cache.Affinity.Rendezvous.RendezvousAffinityFunction.html": {
    "href": "api/Apache.Ignite.Core.Cache.Affinity.Rendezvous.RendezvousAffinityFunction.html",
    "title": "Class RendezvousAffinityFunction | Apache Ignite.NET",
    "keywords": "Class RendezvousAffinityFunction Affinity function for partitioned cache based on Highest Random Weight algorithm. Inheritance System.Object AffinityFunctionBase RendezvousAffinityFunction Implements IAffinityFunction Inherited Members AffinityFunctionBase.DefaultPartitions AffinityFunctionBase.Partitions AffinityFunctionBase.GetPartition(Object) AffinityFunctionBase.RemoveNode(Guid) AffinityFunctionBase.AssignPartitions(AffinityFunctionContext) AffinityFunctionBase.ExcludeNeighbors System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Affinity.Rendezvous Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class RendezvousAffinityFunction : AffinityFunctionBase, IAffinityFunction Implements IAffinityFunction"
  },
  "api/Apache.Ignite.Core.Cache.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.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.QueryIndex.html": {
    "href": "api/Apache.Ignite.Core.Cache.Configuration.QueryIndex.html",
    "title": "Class QueryIndex | Apache Ignite.NET",
    "keywords": "Class QueryIndex Represents cache query index configuration. Inheritance System.Object QueryIndex Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Configuration Assembly : Apache.Ignite.Core.dll Syntax public class QueryIndex Constructors QueryIndex() Initializes a new instance of the QueryIndex class. Declaration public QueryIndex() QueryIndex(QueryIndexField[]) Initializes a new instance of the QueryIndex class. Declaration public QueryIndex(params QueryIndexField[] fields) Parameters Type Name Description QueryIndexField [] fields The fields. QueryIndex(Boolean, QueryIndexType, String[]) Initializes a new instance of the QueryIndex class. Declaration public QueryIndex(bool isDescending, QueryIndexType indexType, params string[] fieldNames) Parameters Type Name Description System.Boolean isDescending Sort direction. QueryIndexType indexType Type of the index. System.String [] fieldNames Names of the fields to index. QueryIndex(Boolean, String[]) Initializes a new instance of the QueryIndex class. Declaration public QueryIndex(bool isDescending, params string[] fieldNames) Parameters Type Name Description System.Boolean isDescending Sort direction. System.String [] fieldNames Names of the fields to index. QueryIndex(String[]) Initializes a new instance of the QueryIndex class. Declaration public QueryIndex(params string[] fieldNames) Parameters Type Name Description System.String [] fieldNames Names of the fields to index. Fields DefaultInlineSize Default value for InlineSize . Declaration public const int DefaultInlineSize = -1 Field Value Type Description System.Int32 Properties Fields Gets or sets a collection of fields to be indexed. Declaration public ICollection<QueryIndexField> Fields { get; set; } Property Value Type Description System.Collections.Generic.ICollection < QueryIndexField > IndexType Gets or sets the type of the index. Declaration public QueryIndexType IndexType { get; set; } Property Value Type Description QueryIndexType InlineSize Gets index inline size in bytes. When enabled part of indexed value will be placed directly to index pages, thus minimizing data page accesses and increasing query performance. Allowed values: -1 (default) - determine inline size automatically(see below) 0 - index inline is disabled(not recommended) positive value - fixed index inline When set to -1 , Ignite will try to detect inline size automatically. It will be no more than SqlIndexMaxInlineSize . Index inline will be enabled for all fixed-length types, but will not be enabled for System.String . Declaration public int InlineSize { get; set; } Property Value Type Description System.Int32 Name Gets or sets the index name. Will be set automatically if not specified. Declaration public string Name { get; set; } Property Value Type Description System.String"
  },
  "api/Apache.Ignite.Core.Cache.Event.ICacheEntryEventListener-2.html": {
    "href": "api/Apache.Ignite.Core.Cache.Event.ICacheEntryEventListener-2.html",
    "title": "Interface ICacheEntryEventListener<TK, TV> | Apache Ignite.NET",
    "keywords": "Interface ICacheEntryEventListener<TK, TV> Cache entry event listener. Namespace : Apache.Ignite.Core.Cache.Event Assembly : Apache.Ignite.Core.dll Syntax public interface ICacheEntryEventListener<TK, TV> Type Parameters Name Description TK TV Methods OnEvent(IEnumerable<ICacheEntryEvent<TK, TV>>) Event callback. Declaration void OnEvent(IEnumerable<ICacheEntryEvent<TK, TV>> evts) Parameters Type Name Description System.Collections.Generic.IEnumerable < ICacheEntryEvent <TK, TV>> evts Events."
  },
  "api/Apache.Ignite.Core.Cache.Event.html": {
    "href": "api/Apache.Ignite.Core.Cache.Event.html",
    "title": "Namespace Apache.Ignite.Core.Cache.Event | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Cache.Event Interfaces ICacheEntryEvent<TK, TV> Cache entry event. ICacheEntryEventFilter<TK, TV> Cache entry event filter. ICacheEntryEventListener<TK, TV> Cache entry event listener. Enums CacheEntryEventType Cache event type."
  },
  "api/Apache.Ignite.Core.Cache.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. 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. 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. 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. RebalancingBytesRate Gets estimated rebalancing speed in bytes. Declaration long RebalancingBytesRate { get; } Property Value Type Description System.Int64 Estimated rebalancing speed in bytes. RebalancingKeysRate Gets estimated rebalancing speed in keys. Declaration long RebalancingKeysRate { get; } Property Value Type Description System.Int64 Estimated rebalancing speed in keys. RebalancingPartitionsCount Gets number of currently rebalancing partitions on current node. Declaration int RebalancingPartitionsCount { get; } Property Value Type Description System.Int32 Number of currently rebalancing partitions on current node. RebalancingStartTime Gets rebalancing start time. entries in onheap cache and near entries. Declaration long RebalancingStartTime { get; } Property Value Type Description System.Int64 Rebalancing start time. Size Gets number of non-null values in the cache. Declaration int Size { get; } Property Value Type Description System.Int32 Number of non-null values in the cache. TotalPartitionsCount Gets total number of partitions on current node. Declaration int TotalPartitionsCount { get; } Property Value Type Description System.Int32 Total number of partitions on current node. TxCommitQueueSize Gets committed transaction queue size. Declaration int TxCommitQueueSize { get; } Property Value Type Description System.Int32 Committed transaction queue size. TxCommittedVersionsSize Gets number of cached committed transaction IDs. Declaration int TxCommittedVersionsSize { get; } Property Value Type Description System.Int32 Number of cached committed transaction IDs. TxDhtCommitQueueSize Gets committed DHT transaction queue size. Declaration int TxDhtCommitQueueSize { get; } Property Value Type Description System.Int32 Committed DHT transaction queue size. TxDhtCommittedVersionsSize Gets number of cached committed DHT transaction IDs. Declaration int TxDhtCommittedVersionsSize { get; } Property Value Type Description System.Int32 Number of cached committed DHT transaction IDs. TxDhtPrepareQueueSize Gets prepared DHT transaction queue size. Declaration int TxDhtPrepareQueueSize { get; } Property Value Type Description System.Int32 Prepared DHT transaction queue size. TxDhtRolledbackVersionsSize Gets number of cached rolled back DHT transaction IDs. Declaration int TxDhtRolledbackVersionsSize { get; } Property Value Type Description System.Int32 Number of cached rolled back DHT transaction IDs. TxDhtStartVersionCountsSize Gets DHT start version counts map size. Declaration int TxDhtStartVersionCountsSize { get; } Property Value Type Description System.Int32 DHT start version counts map size. TxDhtThreadMapSize Gets transaction DHT per-thread map size. Declaration int TxDhtThreadMapSize { get; } Property Value Type Description System.Int32 DHT thread map size. TxDhtXidMapSize Gets transaction DHT per-Xid map size. Declaration int TxDhtXidMapSize { get; } Property Value Type Description System.Int32 Transaction DHT per-Xid map size. TxPrepareQueueSize Gets prepared transaction queue size. Declaration int TxPrepareQueueSize { get; } Property Value Type Description System.Int32 Prepared transaction queue size. TxRolledbackVersionsSize Gets number of cached rolled back transaction IDs. Declaration int TxRolledbackVersionsSize { get; } Property Value Type Description System.Int32 Number of cached rolled back transaction IDs. TxStartVersionCountsSize Gets start version counts map size. Declaration int TxStartVersionCountsSize { get; } Property Value Type Description System.Int32 Start version counts map size. TxThreadMapSize Gets transaction per-thread map size. Declaration int TxThreadMapSize { get; } Property Value Type Description System.Int32 Thread map size. TxXidMapSize Gets transaction per-Xid map size. Declaration int TxXidMapSize { get; } Property Value Type Description System.Int32 Transaction per-Xid map size. ValueType Determines the required type of values for this cache, if any. Declaration string ValueType { get; } Property Value Type Description System.String The fully qualified class name of the value type, or \"java.lang.Object\" if the type is undefined. WriteBehindBufferSize Gets count of entries that were processed by the write-behind store and have not been flushed to the underlying store yet. Declaration int WriteBehindBufferSize { get; } Property Value Type Description System.Int32 Total count of entries in cache store internal buffer. WriteBehindCriticalOverflowCount Gets count of write buffer overflow events in progress at the moment. Each overflow event causes the ongoing flush operation to be performed synchronously. Declaration int WriteBehindCriticalOverflowCount { get; } Property Value Type Description System.Int32 Count of cache overflow events since start. WriteBehindErrorRetryCount Gets count of cache entries that are in a store-retry state. An entry is assigned a store-retry state when underlying store failed due some reason and cache has enough space to retain this entry till the next try. Declaration int WriteBehindErrorRetryCount { get; } Property Value Type Description System.Int32 Count of entries in store-retry state. WriteBehindFlushFrequency Gets the cache flush frequency. All pending operations on the underlying store will be performed within time interval not less then this value. If this value is 0, then flush is performed only when buffer size exceeds flush size. Declaration long WriteBehindFlushFrequency { get; } Property Value Type Description System.Int64 Flush frequency in milliseconds. WriteBehindFlushSize Gets the maximum size of the write-behind buffer. When the count of unique keys in write buffer exceeds this value, the buffer is scheduled for write to the underlying store. If this value is 0, then flush is performed only on time-elapsing basis. Declaration int WriteBehindFlushSize { get; } Property Value Type Description System.Int32 Buffer size that triggers flush procedure. WriteBehindFlushThreadCount Gets the number of flush threads that will perform store update operations. Declaration int WriteBehindFlushThreadCount { get; } Property Value Type Description System.Int32 Count of worker threads. WriteBehindStoreBatchSize Gets the maximum count of similar (put or remove) operations that can be grouped to a single batch. Declaration int WriteBehindStoreBatchSize { get; } Property Value Type Description System.Int32 Maximum size of batch. WriteBehindTotalCriticalOverflowCount Gets count of write buffer overflow events since initialization. Each overflow event causes the ongoing flush operation to be performed synchronously. Declaration int WriteBehindTotalCriticalOverflowCount { get; } Property Value Type Description System.Int32 Count of cache overflow events since start."
  },
  "api/Apache.Ignite.Core.Cache.IMemoryMetrics.html": {
    "href": "api/Apache.Ignite.Core.Cache.IMemoryMetrics.html",
    "title": "Interface IMemoryMetrics | Apache Ignite.NET",
    "keywords": "Interface IMemoryMetrics Memory usage metrics. Obsolete, use IDataRegionMetrics . Namespace : Apache.Ignite.Core.Cache Assembly : Apache.Ignite.Core.dll Syntax [Obsolete(\"See IDataRegionMetrics.\")] public interface IMemoryMetrics Properties AllocationRate Gets the allocation rate, in pages per second. Declaration float AllocationRate { get; } Property Value Type Description System.Single EvictionRate Gets the eviction rate, in pages per second. Declaration float EvictionRate { get; } Property Value Type Description System.Single LargeEntriesPagesPercentage Gets the percentage of pages fully occupied by entries that are larger than page. Declaration float LargeEntriesPagesPercentage { get; } Property Value Type Description System.Single Name Gets the memory policy name. Declaration string Name { get; } Property Value Type Description System.String PageFillFactor Gets the page fill factor: the percentage of used space. Declaration float PageFillFactor { get; } Property Value Type Description System.Single TotalAllocatedPages Gets the count of allocated pages. Declaration long TotalAllocatedPages { get; } Property Value Type Description System.Int64"
  },
  "api/Apache.Ignite.Core.Cache.Query.SqlFieldsQuery.html": {
    "href": "api/Apache.Ignite.Core.Cache.Query.SqlFieldsQuery.html",
    "title": "Class SqlFieldsQuery | Apache Ignite.NET",
    "keywords": "Class SqlFieldsQuery SQL fields query. Inheritance System.Object SqlFieldsQuery Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Query Assembly : Apache.Ignite.Core.dll Syntax public class SqlFieldsQuery Constructors SqlFieldsQuery(String, Boolean, Object[]) Constructor, Declaration public SqlFieldsQuery(string sql, bool loc, params object[] args) Parameters Type Name Description System.String sql SQL. System.Boolean loc Whether query should be executed locally. System.Object [] args Arguments. SqlFieldsQuery(String, Object[]) Constructor. Declaration public SqlFieldsQuery(string sql, params object[] args) Parameters Type Name Description System.String sql SQL. System.Object [] args Arguments. Fields DefaultPageSize Default page size. Declaration public const int DefaultPageSize = 1024 Field Value Type Description System.Int32 Properties Arguments Arguments. Declaration public object[] Arguments { get; set; } Property Value Type Description System.Object [] Colocated Gets or sets a value indicating whether this query operates on colocated data. Whenever Ignite executes a distributed query, it sends sub-queries to individual cluster members. If you know in advance that the elements of your query selection are colocated together on the same node and you group by colocated key (primary or affinity key), then Ignite can make significant performance and network optimizations by grouping data on remote nodes. Declaration public bool Colocated { get; set; } Property Value Type Description System.Boolean EnableDistributedJoins Gets or sets a value indicating whether distributed joins should be enabled for this query. When disabled, join results will only contain colocated data (joins work locally). When enabled, joins work as expected, no matter how the data is distributed. Declaration public bool EnableDistributedJoins { get; set; } Property Value Type Description System.Boolean true if enable distributed joins should be enabled; otherwise, false . EnforceJoinOrder Gets or sets a value indicating whether join order of tables should be enforced. When true, query optimizer will not reorder tables in join. It is not recommended to enable this property until you are sure that your indexes and the query itself are correct and tuned as much as possible but query optimizer still produces wrong join order. Declaration public bool EnforceJoinOrder { get; set; } Property Value Type Description System.Boolean true if join order should be enforced; otherwise, false . Lazy Gets or sets a value indicating whether this SqlFieldsQuery is lazy. By default Ignite attempts to fetch the whole query result set to memory and send it to the client. For small and medium result sets this provides optimal performance and minimize duration of internal database locks, thus increasing concurrency. If result set is too big to fit in available memory this could lead to excessive GC pauses and even OutOfMemoryError. Use this flag as a hint for Ignite to fetch result set lazily, thus minimizing memory consumption at the cost of moderate performance hit. Declaration public bool Lazy { get; set; } Property Value Type Description System.Boolean Local Local flag. When set query will be executed only on local node, so only local entries will be returned as query result. Defaults to false . Declaration public bool Local { get; set; } Property Value Type Description System.Boolean PageSize Optional page size. Defaults to DefaultPageSize . Declaration public int PageSize { get; set; } Property Value Type Description System.Int32 ReplicatedOnly Gets or sets a value indicating whether this query contains only replicated tables. This is a hint for potentially more effective execution. Declaration public bool ReplicatedOnly { get; set; } Property Value Type Description System.Boolean Schema Gets or sets the default schema name for the query. If not set, current cache name is used, which means you can omit schema name for tables within the current cache. Declaration public string Schema { get; set; } Property Value Type Description System.String Sql SQL. Declaration public string Sql { get; set; } Property Value Type Description System.String Timeout Gets or sets the query timeout. Query will be automatically cancelled if the execution timeout is exceeded. Default is System.TimeSpan.Zero , which means no timeout. Declaration public TimeSpan Timeout { get; set; } Property Value Type Description System.TimeSpan Methods ToString() Returns a System.String that represents this instance. Declaration public override string ToString() Returns Type Description System.String A System.String that represents this instance. Overrides System.Object.ToString()"
  },
  "api/Apache.Ignite.Core.Cache.Query.SqlQuery.html": {
    "href": "api/Apache.Ignite.Core.Cache.Query.SqlQuery.html",
    "title": "Class SqlQuery | Apache Ignite.NET",
    "keywords": "Class SqlQuery SQL Query. Inheritance System.Object QueryBase SqlQuery Inherited Members QueryBase.DefaultPageSize QueryBase.Local QueryBase.PageSize System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Query Assembly : Apache.Ignite.Core.dll Syntax public class SqlQuery : QueryBase Constructors SqlQuery(String, String, Boolean, Object[]) Constructor. Declaration public SqlQuery(string queryType, string sql, bool local, params object[] args) Parameters Type Name Description System.String queryType Type. System.String sql SQL. System.Boolean local Whether query should be executed locally. System.Object [] args Arguments. SqlQuery(String, String, Object[]) Constructor. Declaration public SqlQuery(string queryType, string sql, params object[] args) Parameters Type Name Description System.String queryType Type. System.String sql SQL. System.Object [] args Arguments. SqlQuery(Type, String, Boolean, Object[]) Constructor. Declaration public SqlQuery(Type queryType, string sql, bool local, params object[] args) Parameters Type Name Description System.Type queryType Type. System.String sql SQL. System.Boolean local Whether query should be executed locally. System.Object [] args Arguments. SqlQuery(Type, String, Object[]) Constructor. Declaration public SqlQuery(Type queryType, string sql, params object[] args) Parameters Type Name Description System.Type queryType Type. System.String sql SQL. System.Object [] args Arguments. Properties Arguments Arguments. Declaration public object[] Arguments { get; set; } Property Value Type Description System.Object [] EnableDistributedJoins Gets or sets a value indicating whether distributed joins should be enabled for this query. When disabled, join results will only contain colocated data (joins work locally). When enabled, joins work as expected, no matter how the data is distributed. Declaration public bool EnableDistributedJoins { get; set; } Property Value Type Description System.Boolean true if enable distributed joins should be enabled; otherwise, false . QueryType Type. Declaration public string QueryType { get; set; } Property Value Type Description System.String ReplicatedOnly Gets or sets a value indicating whether this query contains only replicated tables. This is a hint for potentially more effective execution. Declaration public bool ReplicatedOnly { get; set; } Property Value Type Description System.Boolean Sql SQL. Declaration public string Sql { get; set; } Property Value Type Description System.String Timeout Gets or sets the query timeout. Query will be automatically cancelled if the execution timeout is exceeded. Default is System.TimeSpan.Zero , which means no timeout. Declaration public TimeSpan Timeout { get; set; } Property Value Type Description System.TimeSpan Methods ToString() Returns a System.String that represents this instance. Declaration public override string ToString() Returns Type Description System.String A System.String that represents this instance. Overrides System.Object.ToString()"
  },
  "api/Apache.Ignite.Core.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 CacheAtomicUpdateTimeoutException Indicates atomic operation timeout. 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> Enums CachePeekMode Enumeration of all supported cache peek modes."
  },
  "api/Apache.Ignite.Core.Cluster.ICluster.html": {
    "href": "api/Apache.Ignite.Core.Cluster.ICluster.html",
    "title": "Interface ICluster | Apache Ignite.NET",
    "keywords": "Interface ICluster Represents whole cluster (group of all nodes in a cluster). All members are thread-safe and may be used concurrently from multiple threads. Inherited Members IClusterGroup.Ignite IClusterGroup.GetCompute() IClusterGroup.ForNodes(IEnumerable<IClusterNode>) IClusterGroup.ForNodes(IClusterNode[]) IClusterGroup.ForNodeIds(IEnumerable<Guid>) IClusterGroup.ForNodeIds(Guid[]) IClusterGroup.ForPredicate(Func<IClusterNode, Boolean>) IClusterGroup.ForAttribute(String, String) IClusterGroup.ForCacheNodes(String) IClusterGroup.ForDataNodes(String) IClusterGroup.ForClientNodes(String) IClusterGroup.ForRemotes() IClusterGroup.ForDaemons() IClusterGroup.ForHost(IClusterNode) IClusterGroup.ForRandom() IClusterGroup.ForOldest() IClusterGroup.ForYoungest() IClusterGroup.ForDotNet() IClusterGroup.ForServers() IClusterGroup.GetNodes() IClusterGroup.GetNode(Guid) IClusterGroup.GetNode() IClusterGroup.GetMetrics() IClusterGroup.GetMessaging() IClusterGroup.GetEvents() IClusterGroup.GetServices() Namespace : Apache.Ignite.Core.Cluster Assembly : Apache.Ignite.Core.dll Syntax public interface ICluster : IClusterGroup Properties ClientReconnectTask Gets the reconnect task, which will transition to Completed state when local client node reconnects to the cluster. Result of the task indicates whether cluster has been restarted. If local node is not in client mode or is not disconnected, returns completed task. Declaration Task<bool> ClientReconnectTask { get; } Property Value Type Description System.Threading.Tasks.Task < System.Boolean > The reconnect task. TopologyVersion Gets current topology version. In case of TCP discovery topology versions are sequential they start from 1 and get incremented every time whenever a node joins or leaves. For other discovery SPIs topology versions may not be (and likely are not) sequential. Declaration long TopologyVersion { get; } Property Value Type Description System.Int64 Current topology version. Methods DisableWal(String) Disables write-ahead logging for specified cache. When WAL is disabled, changes are not logged to disk. This significantly improves cache update speed.The drawback is absence of local crash-recovery guarantees. If node is crashed, local content of WAL-disabled cache will be cleared on restart to avoid data corruption. Internally this method will wait for all current cache operations to finish and prevent new cache operations from being executed.Then checkpoint is initiated to flush all data to disk.Control is returned to the callee when all dirty pages are prepared for checkpoint, but not necessarily flushed to disk. WAL state can be changed only for persistent caches. Declaration void DisableWal(string cacheName) Parameters Type Name Description System.String cacheName Name of the cache. EnableWal(String) Enables write-ahead logging for specified cache. Restoring crash-recovery guarantees of a previous call to DisableWal(String) . Internally this method will wait for all current cache operations to finish and prevent new cache operations from being executed. Then checkpoint is initiated to flush all data to disk. Control is returned to the callee when all data is persisted to disk. WAL state can be changed only for persistent caches. Declaration void EnableWal(string cacheName) Parameters Type Name Description System.String cacheName Name of the cache. ForLocal() Gets monadic projection consisting from the local node. Declaration IClusterGroup ForLocal() Returns Type Description IClusterGroup Monadic projection consisting from the local node. GetBaselineTopology() Gets the baseline topology. Returns null if SetBaselineTopology(Int64) has not been called. Declaration ICollection<IBaselineNode> GetBaselineTopology() Returns Type Description System.Collections.Generic.ICollection < IBaselineNode > GetLocalNode() Gets local Ignite node. Declaration IClusterNode GetLocalNode() Returns Type Description IClusterNode Local Ignite node. GetTopology(Int64) Gets a topology by version. Returns null if topology history storage doesn't contain specified topology version (history currently keeps the last 1000 snapshots). Declaration ICollection<IClusterNode> GetTopology(long ver) Parameters Type Name Description System.Int64 ver Topology version. Returns Type Description System.Collections.Generic.ICollection < IClusterNode > Collection of Ignite nodes which represented by specified topology version, if it is present in history storage, null otherwise. Exceptions Type Condition IgniteException If underlying SPI implementation does not support topology history. Currently only org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi supports topology history. IsActive() Determines whether this grid is in active state. Declaration bool IsActive() Returns Type Description System.Boolean true if the grid is active; otherwise, false . IsWalEnabled(String) Determines whether write-ahead logging is enabled for specified cache. Declaration bool IsWalEnabled(string cacheName) Parameters Type Name Description System.String cacheName Name of the cache. Returns Type Description System.Boolean PingNode(Guid) Pings a remote node. Declaration bool PingNode(Guid nodeId) Parameters Type Name Description System.Guid nodeId ID of a node to ping. Returns Type Description System.Boolean True if node for a given ID is alive, false otherwise. ResetMetrics() Resets local I/O, job, and task execution metrics. Declaration void ResetMetrics() SetActive(Boolean) Changes Ignite grid state to active or inactive. Declaration void SetActive(bool isActive) Parameters Type Name Description System.Boolean isActive SetBaselineTopology(IEnumerable<IBaselineNode>) Sets the baseline topology nodes. Declaration void SetBaselineTopology(IEnumerable<IBaselineNode> nodes) Parameters Type Name Description System.Collections.Generic.IEnumerable < IBaselineNode > nodes The nodes. SetBaselineTopology(Int64) Sets the baseline topology from the cluster topology of the given version. This method requires active cluster ( IsActive() ). Declaration void SetBaselineTopology(long topologyVersion) Parameters Type Name Description System.Int64 topologyVersion The topology version."
  },
  "api/Apache.Ignite.Core.Cluster.IClusterGroup.html": {
    "href": "api/Apache.Ignite.Core.Cluster.IClusterGroup.html",
    "title": "Interface IClusterGroup | Apache Ignite.NET",
    "keywords": "Interface IClusterGroup Defines grid projection which represents a common functionality over a group of nodes. Grid projection allows to group Ignite nodes into various subgroups to perform distributed operations on them. All ForXXX(...)' methods will create a child grid projection from existing projection. If you create a new projection from current one, then the resulting projection will include a subset of nodes from current projection. The following code snippet shows how to create grid projections: var g = Ignition.GetIgnite(); // Projection over remote nodes. var remoteNodes = g.ForRemotes(); // Projection over random remote node. var randomNode = g.ForRandom(); // Projection over all nodes with cache named \"myCache\" enabled. var cacheNodes = g.ForCacheNodes(\"myCache\"); // Projection over all nodes that have user attribute \"group\" set to value \"worker\". var workerNodes = g.ForAttribute(\"group\", \"worker\"); Grid projection provides functionality for executing tasks and closures over nodes in this projection using GetCompute() . All members are thread-safe and may be used concurrently from multiple threads. Namespace : Apache.Ignite.Core.Cluster Assembly : Apache.Ignite.Core.dll Syntax public interface IClusterGroup Properties Ignite Instance of Ignite. Declaration IIgnite Ignite { get; } Property Value Type Description IIgnite Methods ForAttribute(String, String) Creates projection for nodes containing given name and value specified in user attributes. Declaration IClusterGroup ForAttribute(string name, string val) Parameters Type Name Description System.String name Name of the attribute. System.String val Optional attribute value to match. Returns Type Description IClusterGroup Grid projection for nodes containing specified attribute. ForCacheNodes(String) Creates projection for all nodes that have cache with specified name running. Declaration IClusterGroup ForCacheNodes(string name) Parameters Type Name Description System.String name Cache name to include into projection. Returns Type Description IClusterGroup Projection over nodes that have specified cache running. ForClientNodes(String) Creates projection for all nodes that have cache with specified name running and cache distribution mode is CLIENT_ONLY or NEAR_ONLY. Declaration IClusterGroup ForClientNodes(string name) Parameters Type Name Description System.String name Cache name to include into projection. Returns Type Description IClusterGroup Projection over nodes that have specified cache running. ForDaemons() Gets a cluster group consisting of the daemon nodes. Daemon nodes are the usual grid nodes that participate in topology but not visible on the main APIs, i.e. they are not part of any cluster group. The only way to see daemon nodes is to use this method. Daemon nodes are used primarily for management and monitoring functionality that is build on Ignite and needs to participate in the topology, but also needs to be excluded from the \"normal\" topology, so that it won't participate in the task execution or in-memory data grid storage. Declaration IClusterGroup ForDaemons() Returns Type Description IClusterGroup Cluster group consisting of the daemon nodes. ForDataNodes(String) Creates projection for all nodes that have cache with specified name running and cache distribution mode is PARTITIONED_ONLY or NEAR_PARTITIONED. Declaration IClusterGroup ForDataNodes(string name) Parameters Type Name Description System.String name Cache name to include into projection. Returns Type Description IClusterGroup Projection over nodes that have specified cache running. ForDotNet() Creates grid projection for nodes supporting .Net, i.e. for nodes started with Apache.Ignite.exe. Declaration IClusterGroup ForDotNet() Returns Type Description IClusterGroup Grid projection for nodes supporting .Net. ForHost(IClusterNode) Gets grid projection consisting from the nodes in this projection residing on the same host as given node. Declaration IClusterGroup ForHost(IClusterNode node) Parameters Type Name Description IClusterNode node Node residing on the host for which projection is created. Returns Type Description IClusterGroup Projection for nodes residing on the same host as passed in node. ForNodeIds(IEnumerable<Guid>) Creates a grid projection over a given set of node IDs. Declaration IClusterGroup ForNodeIds(IEnumerable<Guid> ids) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Guid > ids Collection of node IDs to create a projection from. Returns Type Description IClusterGroup Projection over provided Ignite node IDs. ForNodeIds(Guid[]) Creates a grid projection over a given set of node IDs. Declaration IClusterGroup ForNodeIds(params Guid[] ids) Parameters Type Name Description System.Guid [] ids Collection of node IDs to create a projection from. Returns Type Description IClusterGroup Projection over provided Ignite node IDs. ForNodes(IClusterNode[]) Creates a grid projection over a given set of nodes. Declaration IClusterGroup ForNodes(params IClusterNode[] nodes) Parameters Type Name Description IClusterNode [] nodes Collection of nodes to create a projection from. Returns Type Description IClusterGroup Projection over provided Ignite nodes. ForNodes(IEnumerable<IClusterNode>) Creates a grid projection over a given set of nodes. Declaration IClusterGroup ForNodes(IEnumerable<IClusterNode> nodes) Parameters Type Name Description System.Collections.Generic.IEnumerable < IClusterNode > nodes Collection of nodes to create a projection from. Returns Type Description IClusterGroup Projection over provided Ignite nodes. ForOldest() Creates grid projection with one oldest node in the current projection. The resulting projection is dynamic and will always pick the next oldest node if the previous one leaves topology even after the projection has been created. Declaration IClusterGroup ForOldest() Returns Type Description IClusterGroup Grid projection with one oldest node from the current projection. ForPredicate(Func<IClusterNode, Boolean>) Creates a grid projection which includes all nodes that pass the given predicate filter. Declaration IClusterGroup ForPredicate(Func<IClusterNode, bool> p) Parameters Type Name Description System.Func < IClusterNode , System.Boolean > p Predicate filter for nodes to include into this projection. Returns Type Description IClusterGroup Grid projection for nodes that passed the predicate filter. ForRandom() Creates grid projection with one random node from current projection. Declaration IClusterGroup ForRandom() Returns Type Description IClusterGroup Grid projection with one random node from current projection. ForRemotes() Gets grid projection consisting from the nodes in this projection excluding the local node. Declaration IClusterGroup ForRemotes() Returns Type Description IClusterGroup Grid projection consisting from the nodes in this projection excluding the local node. ForServers() Creates a cluster group of nodes started in server mode ( ClientMode ). Declaration IClusterGroup ForServers() Returns Type Description IClusterGroup Cluster group of nodes started in server mode. ForYoungest() Creates grid projection with one youngest node in the current projection. The resulting projection is dynamic and will always pick the newest node in the topology, even if more nodes entered after the projection has been created. Declaration IClusterGroup ForYoungest() Returns Type Description IClusterGroup Grid projection with one youngest node from the current projection. GetCompute() Gets compute functionality over this grid projection. All operations on the returned ICompute instance will only include nodes from this projection. Declaration ICompute GetCompute() Returns Type Description ICompute Compute instance over this grid projection. GetEvents() Gets events facade over nodes within this cluster group. All operations on the returned IEvents > instance will only include nodes from current cluster group. Declaration IEvents GetEvents() Returns Type Description IEvents Events instance over this cluster group. GetMessaging() Gets messaging facade over nodes within this cluster group. All operations on the returned IMessaging > instance will only include nodes from current cluster group. Declaration IMessaging GetMessaging() Returns Type Description IMessaging Messaging instance over this cluster group. GetMetrics() Gets a metrics snapshot for this projection Declaration IClusterMetrics GetMetrics() Returns Type Description IClusterMetrics Grid projection metrics snapshot. GetNode() Gets first node from the list of nodes in this projection. Declaration IClusterNode GetNode() Returns Type Description IClusterNode Node. GetNode(Guid) Gets a node for given ID from this grid projection. Declaration IClusterNode GetNode(Guid id) Parameters Type Name Description System.Guid id Node ID. Returns Type Description IClusterNode Node with given ID from this projection or null if such node does not exist in this projection. GetNodes() Gets read-only collections of nodes in this projection. Declaration ICollection<IClusterNode> GetNodes() Returns Type Description System.Collections.Generic.ICollection < IClusterNode > All nodes in this projection. GetServices() Gets services facade over nodes within this cluster group. All operations on the returned IServices > instance will only include nodes from current cluster group. Declaration IServices GetServices() Returns Type Description IServices Services instance over this cluster group."
  },
  "api/Apache.Ignite.Core.Communication.ICommunicationSpi.html": {
    "href": "api/Apache.Ignite.Core.Communication.ICommunicationSpi.html",
    "title": "Interface ICommunicationSpi | Apache Ignite.NET",
    "keywords": "Interface ICommunicationSpi Communication SPI is responsible for data exchange between nodes. Communication SPI is one of the most important SPIs in Ignite. It is used heavily throughout the system and provides means for all data exchanges between nodes, such as internal implementation details and user driven messages. Only predefined implementation is supported now: TcpCommunicationSpi . Namespace : Apache.Ignite.Core.Communication Assembly : Apache.Ignite.Core.dll Syntax public interface ICommunicationSpi"
  },
  "api/Apache.Ignite.Core.Communication.Tcp.TcpCommunicationSpi.html": {
    "href": "api/Apache.Ignite.Core.Communication.Tcp.TcpCommunicationSpi.html",
    "title": "Class TcpCommunicationSpi | Apache Ignite.NET",
    "keywords": "Class TcpCommunicationSpi TcpCommunicationSpi is default communication SPI which uses TCP/IP protocol and Java NIO to communicate with other nodes. At startup, this SPI tries to start listening to local port specified by LocalPort property. If local port is occupied, then SPI will automatically increment the port number until it can successfully bind for listening. LocalPortRange configuration parameter controls maximum number of ports that SPI will try before it fails. Port range comes very handy when starting multiple grid nodes on the same machine or even in the same VM. In this case all nodes can be brought up without a single change in configuration. Inheritance System.Object TcpCommunicationSpi Implements ICommunicationSpi Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Communication.Tcp Assembly : Apache.Ignite.Core.dll Syntax public class TcpCommunicationSpi : ICommunicationSpi Constructors TcpCommunicationSpi() Initializes a new instance of the TcpCommunicationSpi class. Declaration public TcpCommunicationSpi() Fields DefaultAckSendThreshold Default value of AckSendThreshold property. Declaration public const int DefaultAckSendThreshold = 16 Field Value Type Description System.Int32 DefaultConnectTimeout Default value of ConnectTimeout property. Declaration public static readonly TimeSpan DefaultConnectTimeout Field Value Type Description System.TimeSpan DefaultDirectBuffer Default value of DirectBuffer property. Declaration public const bool DefaultDirectBuffer = true Field Value Type Description System.Boolean DefaultDirectSendBuffer Default value of DirectSendBuffer property. Declaration public const bool DefaultDirectSendBuffer = false Field Value Type Description System.Boolean DefaultIdleConnectionTimeout Default value of IdleConnectionTimeout property. Declaration public static readonly TimeSpan DefaultIdleConnectionTimeout Field Value Type Description System.TimeSpan DefaultLocalPort Default value of LocalPort property. Declaration public const int DefaultLocalPort = 47100 Field Value Type Description System.Int32 DefaultLocalPortRange Default value of LocalPortRange property. Declaration public const int DefaultLocalPortRange = 100 Field Value Type Description System.Int32 DefaultMaxConnectTimeout Default value of MaxConnectTimeout property. Declaration public static readonly TimeSpan DefaultMaxConnectTimeout Field Value Type Description System.TimeSpan DefaultMessageQueueLimit Default value of MessageQueueLimit property. Declaration public const int DefaultMessageQueueLimit = 1024 Field Value Type Description System.Int32 DefaultReconnectCount Default value of ReconnectCount property. Declaration public const int DefaultReconnectCount = 10 Field Value Type Description System.Int32 DefaultSelectorsCount Default value of SelectorsCount property. Declaration public static readonly int DefaultSelectorsCount Field Value Type Description System.Int32 DefaultSocketBufferSize Default socket buffer size. Declaration public const int DefaultSocketBufferSize = 32768 Field Value Type Description System.Int32 DefaultTcpNoDelay Default value of TcpNoDelay property. Declaration public const bool DefaultTcpNoDelay = true Field Value Type Description System.Boolean Properties AckSendThreshold Gets or sets the number of received messages per connection to node after which acknowledgment message is sent. Declaration public int AckSendThreshold { get; set; } Property Value Type Description System.Int32 ConnectTimeout Gets or sets the connect timeout used when establishing connection with remote nodes. Declaration public TimeSpan ConnectTimeout { get; set; } Property Value Type Description System.TimeSpan DirectBuffer Gets or sets a value indicating whether to allocate direct (ByteBuffer.allocateDirect) or heap (ByteBuffer.allocate) buffer. Declaration public bool DirectBuffer { get; set; } Property Value Type Description System.Boolean DirectSendBuffer Gets or sets a value indicating whether to allocate direct (ByteBuffer.allocateDirect) or heap (ByteBuffer.allocate) send buffer. Declaration public bool DirectSendBuffer { get; set; } Property Value Type Description System.Boolean IdleConnectionTimeout Sets maximum idle connection timeout upon which a connection to client will be closed. Declaration public TimeSpan IdleConnectionTimeout { get; set; } Property Value Type Description System.TimeSpan LocalAddress Gets or sets the local host address for socket binding. Note that one node could have additional addresses beside the loopback one. This configuration parameter is optional. Declaration public string LocalAddress { get; set; } Property Value Type Description System.String LocalPort Gets or sets the local port for socket binding. Declaration public int LocalPort { get; set; } Property Value Type Description System.Int32 LocalPortRange Gets or sets local port range for local host ports (value must greater than or equal to 0 ). If provided local port LocalPort is occupied, implementation will try to increment the port number for as long as it is less than initial value plus this range. If port range value is 0 , then implementation will try bind only to the port provided by LocalPort method and fail if binding to this port did not succeed. Declaration public int LocalPortRange { get; set; } Property Value Type Description System.Int32 MaxConnectTimeout Gets or sets maximum connect timeout. If handshake is not established within connect timeout, then SPI tries to repeat handshake procedure with increased connect timeout. Connect timeout can grow till maximum timeout value, if maximum timeout value is reached then the handshake is considered as failed. 0 is interpreted as infinite timeout. Declaration public TimeSpan MaxConnectTimeout { get; set; } Property Value Type Description System.TimeSpan MessageQueueLimit Gets or sets the message queue limit for incoming and outgoing messages. When set to positive number send queue is limited to the configured value. 0 disables the limitation. Declaration public int MessageQueueLimit { get; set; } Property Value Type Description System.Int32 ReconnectCount Gets or sets the maximum number of reconnect attempts used when establishing connection with remote nodes. Declaration public int ReconnectCount { get; set; } Property Value Type Description System.Int32 SelectorsCount Gets or sets the count of selectors te be used in TCP server. Default value is DefaultSelectorsCount , which is calculated as Math.Min(4, Environment.ProcessorCount) Declaration public int SelectorsCount { get; set; } Property Value Type Description System.Int32 SlowClientQueueLimit Gets or sets slow client queue limit. When set to a positive number, communication SPI will monitor clients outbound message queue sizes and will drop those clients whose queue exceeded this limit. Usually this value should be set to the same value as MessageQueueLimit which controls message back-pressure for server nodes. The default value for this parameter is 0 which means unlimited. Declaration public int SlowClientQueueLimit { get; set; } Property Value Type Description System.Int32 SocketReceiveBufferSize Gets or sets the size of the socket receive buffer. Declaration public int SocketReceiveBufferSize { get; set; } Property Value Type Description System.Int32 SocketSendBufferSize Gets or sets the size of the socket send buffer. Declaration public int SocketSendBufferSize { get; set; } Property Value Type Description System.Int32 TcpNoDelay Gets or sets the value for TCP_NODELAY socket option. Each socket will be opened using provided value. Setting this option to true disables Nagle's algorithm for socket decreasing latency and delivery time for small messages. For systems that work under heavy network load it is advisable to set this value to false . Declaration public bool TcpNoDelay { get; set; } Property Value Type Description System.Boolean UnacknowledgedMessagesBufferSize Gets or sets the maximum number of stored unacknowledged messages per connection to node. If number of unacknowledged messages exceeds this number then connection to node is closed and reconnect is attempted. Declaration public int UnacknowledgedMessagesBufferSize { get; set; } Property Value Type Description System.Int32 Implements ICommunicationSpi"
  },
  "api/Apache.Ignite.Core.Compute.ComputeTaskTimeoutException.html": {
    "href": "api/Apache.Ignite.Core.Compute.ComputeTaskTimeoutException.html",
    "title": "Class ComputeTaskTimeoutException | Apache Ignite.NET",
    "keywords": "Class ComputeTaskTimeoutException Indicates that task execution timed out. Inheritance System.Object System.Exception IgniteException ComputeTaskTimeoutException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Compute Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class ComputeTaskTimeoutException : IgniteException, ISerializable, _Exception Constructors ComputeTaskTimeoutException() Initializes a new instance of the ComputeTaskTimeoutException class. Declaration public ComputeTaskTimeoutException() ComputeTaskTimeoutException(SerializationInfo, StreamingContext) Initializes a new instance of the ComputeTaskTimeoutException class. Declaration protected ComputeTaskTimeoutException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. ComputeTaskTimeoutException(String) Initializes a new instance of the ComputeTaskTimeoutException class. Declaration public ComputeTaskTimeoutException(string message) Parameters Type Name Description System.String message The message that describes the error. ComputeTaskTimeoutException(String, Exception) Initializes a new instance of the ComputeTaskTimeoutException class. Declaration public ComputeTaskTimeoutException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Compute.ComputeUserUndeclaredException.html": {
    "href": "api/Apache.Ignite.Core.Compute.ComputeUserUndeclaredException.html",
    "title": "Class ComputeUserUndeclaredException | Apache Ignite.NET",
    "keywords": "Class ComputeUserUndeclaredException This exception is thrown when user's code throws undeclared runtime exception. By user core it is assumed the code in Ignite task, Ignite job or SPI. In most cases it should be an indication of unrecoverable error condition such as assertion, out of memory error, etc. Inheritance System.Object System.Exception IgniteException ComputeUserUndeclaredException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Compute Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class ComputeUserUndeclaredException : IgniteException, ISerializable, _Exception Constructors ComputeUserUndeclaredException() Initializes a new instance of the ComputeUserUndeclaredException class. Declaration public ComputeUserUndeclaredException() ComputeUserUndeclaredException(SerializationInfo, StreamingContext) Initializes a new instance of the ComputeUserUndeclaredException class. Declaration protected ComputeUserUndeclaredException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. ComputeUserUndeclaredException(String) Initializes a new instance of the ComputeUserUndeclaredException class. Declaration public ComputeUserUndeclaredException(string message) Parameters Type Name Description System.String message The message that describes the error. ComputeUserUndeclaredException(String, Exception) Initializes a new instance of the ComputeUserUndeclaredException class. Declaration public ComputeUserUndeclaredException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Configuration.CheckpointWriteOrder.html": {
    "href": "api/Apache.Ignite.Core.Configuration.CheckpointWriteOrder.html",
    "title": "Enum CheckpointWriteOrder | Apache Ignite.NET",
    "keywords": "Enum CheckpointWriteOrder Defines checkpoint pages order on disk. Namespace : Apache.Ignite.Core.Configuration Assembly : Apache.Ignite.Core.dll Syntax public enum CheckpointWriteOrder Fields Name Description Random Pages are written in order provided by checkpoint pages collection iterator (which is basically a hashtable). Sequential All checkpoint pages are collected into single list and sorted by page index. Provides almost sequential disk writes, which can be much faster on some SSD models."
  },
  "api/Apache.Ignite.Core.Configuration.ClientConnectorConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Configuration.ClientConnectorConfiguration.html",
    "title": "Class ClientConnectorConfiguration | Apache Ignite.NET",
    "keywords": "Class ClientConnectorConfiguration Client connector configuration (ODBC, JDBC, Thin Client). Inheritance System.Object ClientConnectorConfiguration Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Configuration Assembly : Apache.Ignite.Core.dll Syntax public class ClientConnectorConfiguration Constructors ClientConnectorConfiguration() Initializes a new instance of the ClientConnectorConfiguration class. Declaration public ClientConnectorConfiguration() Fields DefaultIdleTimeout Default idle timeout. Declaration public static readonly TimeSpan DefaultIdleTimeout Field Value Type Description System.TimeSpan DefaultJdbcEnabled Default value for JdbcEnabled property. Declaration public const bool DefaultJdbcEnabled = true Field Value Type Description System.Boolean DefaultMaxOpenCursorsPerConnection Default maximum number of open cursors per connection. Declaration public const int DefaultMaxOpenCursorsPerConnection = 128 Field Value Type Description System.Int32 DefaultOdbcEnabled Default value for OdbcEnabled property. Declaration public const bool DefaultOdbcEnabled = true Field Value Type Description System.Boolean DefaultPort Default port. Declaration public const int DefaultPort = 10800 Field Value Type Description System.Int32 DefaultPortRange Default port range. Declaration public const int DefaultPortRange = 100 Field Value Type Description System.Int32 DefaultSocketBufferSize Default socket buffer size. Declaration public const int DefaultSocketBufferSize = 0 Field Value Type Description System.Int32 DefaultTcpNoDelay Default value of TcpNoDelay property. Declaration public const bool DefaultTcpNoDelay = true Field Value Type Description System.Boolean DefaultThinClientEnabled Default value for ThinClientEnabled property. Declaration public const bool DefaultThinClientEnabled = true Field Value Type Description System.Boolean DefaultThreadPoolSize Default SQL connector thread pool size. Declaration public static readonly int DefaultThreadPoolSize Field Value Type Description System.Int32 Properties Host Gets or sets the host. Declaration public string Host { get; set; } Property Value Type Description System.String IdleTimeout Gets or sets idle timeout for client connections on the server side. If no packets come within idle timeout, the connection is closed by the server. Zero or negative means no timeout. Declaration public TimeSpan IdleTimeout { get; set; } Property Value Type Description System.TimeSpan JdbcEnabled Gets or sets a value indicating whether JDBC connector is enabled. Declaration public bool JdbcEnabled { get; set; } Property Value Type Description System.Boolean MaxOpenCursorsPerConnection Gets or sets the maximum open cursors per connection. Declaration public int MaxOpenCursorsPerConnection { get; set; } Property Value Type Description System.Int32 OdbcEnabled Gets or sets a value indicating whether ODBC connector is enabled. Declaration public bool OdbcEnabled { get; set; } Property Value Type Description System.Boolean Port Gets or sets the port. Declaration public int Port { get; set; } Property Value Type Description System.Int32 PortRange Gets or sets the port range. Declaration public int PortRange { get; set; } Property Value Type Description System.Int32 SocketReceiveBufferSize Gets or sets the size of the socket receive buffer. When set to 0, operating system default is used. Declaration public int SocketReceiveBufferSize { get; set; } Property Value Type Description System.Int32 SocketSendBufferSize Gets or sets the size of the socket send buffer. When set to 0, operating system default is used. Declaration public int SocketSendBufferSize { get; set; } Property Value Type Description System.Int32 TcpNoDelay Gets or sets the value for TCP_NODELAY socket option. Each socket will be opened using provided value. Setting this option to true disables Nagle's algorithm for socket decreasing latency and delivery time for small messages. For systems that work under heavy network load it is advisable to set this value to false . Declaration public bool TcpNoDelay { get; set; } Property Value Type Description System.Boolean ThinClientEnabled Gets or sets a value indicating whether thin client connector is enabled. Declaration public bool ThinClientEnabled { get; set; } Property Value Type Description System.Boolean ThreadPoolSize Gets or sets the size of the thread pool. Declaration public int ThreadPoolSize { get; set; } Property Value Type Description System.Int32"
  },
  "api/Apache.Ignite.Core.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.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.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.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.AffinityTopologyVersion.html": {
    "href": "api/Apache.Ignite.Core.Cache.Affinity.AffinityTopologyVersion.html",
    "title": "Struct AffinityTopologyVersion | Apache Ignite.NET",
    "keywords": "Struct AffinityTopologyVersion Affinity topology version. Implements System.IEquatable < AffinityTopologyVersion > Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() Namespace : Apache.Ignite.Core.Cache.Affinity Assembly : Apache.Ignite.Core.dll Syntax public struct AffinityTopologyVersion : IEquatable<AffinityTopologyVersion> Constructors AffinityTopologyVersion(Int64, Int32) Initializes a new instance of the AffinityTopologyVersion struct. Declaration public AffinityTopologyVersion(long version, int minorVersion) Parameters Type Name Description System.Int64 version The version. System.Int32 minorVersion The minor version. Properties MinorVersion Gets the minor version, which is increased when new caches start. Declaration public int MinorVersion { get; } Property Value Type Description System.Int32 Version Gets the major version, same as TopologyVersion . Declaration public long Version { get; } Property Value Type Description System.Int64 Methods Equals(AffinityTopologyVersion) Indicates whether the current object is equal to another object of the same type. Declaration public bool Equals(AffinityTopologyVersion other) Parameters Type Name Description AffinityTopologyVersion other An object to compare with this object. Returns Type Description System.Boolean true if the current object is equal to the other parameter; otherwise, false. Equals(Object) Determines whether the specified System.Object , is equal to this instance. Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj The System.Object to compare with this instance. Returns Type Description System.Boolean true if the specified System.Object is equal to this instance; otherwise, false . Overrides System.ValueType.Equals(System.Object) GetHashCode() Returns a hash code for this instance. Declaration public override int GetHashCode() Returns Type Description System.Int32 A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Overrides System.ValueType.GetHashCode() ToString() Returns a System.String that represents this instance. Declaration public override string ToString() Returns Type Description System.String A System.String that represents this instance. Overrides System.ValueType.ToString() Operators Equality(AffinityTopologyVersion, AffinityTopologyVersion) Implements the operator ==. Declaration public static bool operator ==(AffinityTopologyVersion left, AffinityTopologyVersion right) Parameters Type Name Description AffinityTopologyVersion left The left. AffinityTopologyVersion right The right. Returns Type Description System.Boolean The result of the operator. Inequality(AffinityTopologyVersion, AffinityTopologyVersion) Implements the operator !=. Declaration public static bool operator !=(AffinityTopologyVersion left, AffinityTopologyVersion right) Parameters Type Name Description AffinityTopologyVersion left The left. AffinityTopologyVersion right The right. Returns Type Description System.Boolean The result of the operator. Implements System.IEquatable<T>"
  },
  "api/Apache.Ignite.Core.Cache.CacheAtomicUpdateTimeoutException.html": {
    "href": "api/Apache.Ignite.Core.Cache.CacheAtomicUpdateTimeoutException.html",
    "title": "Class CacheAtomicUpdateTimeoutException | Apache Ignite.NET",
    "keywords": "Class CacheAtomicUpdateTimeoutException Indicates atomic operation timeout. Inheritance System.Object System.Exception IgniteException CacheException CacheAtomicUpdateTimeoutException 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 CacheAtomicUpdateTimeoutException : CacheException, ISerializable, _Exception Constructors CacheAtomicUpdateTimeoutException() Initializes a new instance of the CacheAtomicUpdateTimeoutException class. Declaration public CacheAtomicUpdateTimeoutException() CacheAtomicUpdateTimeoutException(SerializationInfo, StreamingContext) Initializes a new instance of the CacheAtomicUpdateTimeoutException class. Declaration protected CacheAtomicUpdateTimeoutException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. CacheAtomicUpdateTimeoutException(String) Initializes a new instance of the CacheAtomicUpdateTimeoutException class. Declaration public CacheAtomicUpdateTimeoutException(string message) Parameters Type Name Description System.String message The message that describes the error. CacheAtomicUpdateTimeoutException(String, Exception) Initializes a new instance of the CacheAtomicUpdateTimeoutException class. Declaration public CacheAtomicUpdateTimeoutException(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.CacheConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Cache.Configuration.CacheConfiguration.html",
    "title": "Class CacheConfiguration | Apache Ignite.NET",
    "keywords": "Class CacheConfiguration Defines grid cache configuration. Inheritance System.Object CacheConfiguration Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Configuration Assembly : Apache.Ignite.Core.dll Syntax public class CacheConfiguration : IBinaryRawWriteAware<BinaryWriter> Constructors CacheConfiguration() Initializes a new instance of the CacheConfiguration class. Declaration public CacheConfiguration() CacheConfiguration(CacheConfiguration) Initializes a new instance of the CacheConfiguration class, performing a deep copy of specified cache configuration. Declaration public CacheConfiguration(CacheConfiguration other) Parameters Type Name Description CacheConfiguration other The other configuration to perfrom deep copy from. CacheConfiguration(String) Initializes a new instance of the CacheConfiguration class. Declaration public CacheConfiguration(string name) Parameters Type Name Description System.String name Cache name. CacheConfiguration(String, QueryEntity[]) Initializes a new instance of the CacheConfiguration class. Declaration public CacheConfiguration(string name, params QueryEntity[] queryEntities) Parameters Type Name Description System.String name Cache name. QueryEntity [] queryEntities Query entities. CacheConfiguration(String, Type[]) Initializes a new instance of the CacheConfiguration class and populates QueryEntities according to provided query types. Declaration 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 DefaultInvalidate Default value for 'invalidate' flag that indicates if this is invalidation-based cache. Declaration public const bool DefaultInvalidate = false Field Value Type Description System.Boolean DefaultKeepBinaryInStore Default value for KeepBinaryInStore property. Declaration public const bool DefaultKeepBinaryInStore = false Field Value Type Description System.Boolean DefaultKeepVinaryInStore Default value for keep portable in store behavior . Declaration [Obsolete(\"Use DefaultKeepBinaryInStore instead.\")] public const bool DefaultKeepVinaryInStore = true Field Value Type Description System.Boolean DefaultLoadPreviousValue Default value for load previous value flag. Declaration public const bool DefaultLoadPreviousValue = false Field Value Type Description System.Boolean DefaultLockTimeout Default lock timeout. Declaration public static readonly TimeSpan DefaultLockTimeout Field Value Type Description System.TimeSpan DefaultLongQueryWarningTimeout Default timeout after which long query warning will be printed. Declaration public static readonly TimeSpan DefaultLongQueryWarningTimeout Field Value Type Description System.TimeSpan DefaultMaxConcurrentAsyncOperations Default value for 'maxConcurrentAsyncOps'. Declaration public const int DefaultMaxConcurrentAsyncOperations = 500 Field Value Type Description System.Int32 DefaultMaxQueryIteratorsCount Default value for MaxQueryIteratorsCount . Declaration public const int DefaultMaxQueryIteratorsCount = 1024 Field Value Type Description System.Int32 DefaultPartitionLossPolicy Default value for PartitionLossPolicy . Declaration public const PartitionLossPolicy DefaultPartitionLossPolicy = PartitionLossPolicy.Ignore Field Value Type Description PartitionLossPolicy DefaultQueryDetailMetricsSize Default value for QueryDetailMetricsSize . Declaration public const int DefaultQueryDetailMetricsSize = 0 Field Value Type Description System.Int32 DefaultQueryParallelism Default value for QueryParallelism . Declaration public const int DefaultQueryParallelism = 1 Field Value Type Description System.Int32 DefaultReadFromBackup Default value for 'readFromBackup' flag. Declaration public const bool DefaultReadFromBackup = true Field Value Type Description System.Boolean DefaultReadThrough Default value for read-through behavior. Declaration public const bool DefaultReadThrough = false Field Value Type Description System.Boolean DefaultRebalanceBatchesPrefetchCount Default value for RebalanceBatchesPrefetchCount . Declaration public const long DefaultRebalanceBatchesPrefetchCount = 2L Field Value Type Description System.Int64 DefaultRebalanceBatchSize Default rebalance batch size in bytes. Declaration public const int DefaultRebalanceBatchSize = 524288 Field Value Type Description System.Int32 DefaultRebalanceMode Default rebalance mode for distributed cache. Declaration public const CacheRebalanceMode DefaultRebalanceMode = CacheRebalanceMode.Async Field Value Type Description CacheRebalanceMode DefaultRebalanceOrder Default value for RebalanceOrder . Declaration public const int DefaultRebalanceOrder = 0 Field Value Type Description System.Int32 DefaultRebalanceThreadPoolSize Default size of rebalance thread pool. Declaration public const int DefaultRebalanceThreadPoolSize = 2 Field Value Type Description System.Int32 DefaultRebalanceThrottle Time to wait between rebalance messages to avoid overloading CPU. Declaration public static readonly TimeSpan DefaultRebalanceThrottle Field Value Type Description System.TimeSpan DefaultRebalanceTimeout Default rebalance timeout. Declaration public static readonly TimeSpan DefaultRebalanceTimeout Field Value Type Description System.TimeSpan DefaultSqlIndexMaxInlineSize Default value for SqlIndexMaxInlineSize . Declaration public const int DefaultSqlIndexMaxInlineSize = -1 Field Value Type Description System.Int32 DefaultStoreConcurrentLoadAllThreshold Default value for StoreConcurrentLoadAllThreshold . Declaration public const int DefaultStoreConcurrentLoadAllThreshold = 5 Field Value Type Description System.Int32 DefaultWriteBehindBatchSize Default batch size for write-behind cache store. Declaration public const int DefaultWriteBehindBatchSize = 512 Field Value Type Description System.Int32 DefaultWriteBehindCoalescing Default value for WriteBehindCoalescing . Declaration public const bool DefaultWriteBehindCoalescing = true Field Value Type Description System.Boolean DefaultWriteBehindEnabled Default value for 'writeBehindEnabled' flag. Declaration public const bool DefaultWriteBehindEnabled = false Field Value Type Description System.Boolean DefaultWriteBehindFlushFrequency Default flush frequency for write-behind cache store. Declaration public static readonly TimeSpan DefaultWriteBehindFlushFrequency Field Value Type Description System.TimeSpan DefaultWriteBehindFlushSize Default flush size for write-behind cache store. Declaration public const int DefaultWriteBehindFlushSize = 10240 Field Value Type Description System.Int32 DefaultWriteBehindFlushThreadCount Default count of flush threads for write-behind cache store. Declaration public const int DefaultWriteBehindFlushThreadCount = 1 Field Value Type Description System.Int32 DefaultWriteSynchronizationMode Default value for WriteSynchronizationMode property. Declaration public const CacheWriteSynchronizationMode DefaultWriteSynchronizationMode = CacheWriteSynchronizationMode.PrimarySync Field Value Type Description CacheWriteSynchronizationMode DefaultWriteThrough Default value for write-through behavior. Declaration public const bool DefaultWriteThrough = false Field Value Type Description System.Boolean Properties AffinityFunction Gets or sets the affinity function to provide mapping from keys to nodes. Predefined implementations: RendezvousAffinityFunction . Declaration public IAffinityFunction AffinityFunction { get; set; } Property Value Type Description IAffinityFunction AtomicityMode Gets or sets cache atomicity mode. Declaration public CacheAtomicityMode AtomicityMode { get; set; } Property Value Type Description CacheAtomicityMode Backups Gets or sets number of nodes used to back up single partition for Partitioned cache. Declaration public int Backups { get; set; } Property Value Type Description System.Int32 CacheMode Gets or sets caching mode to use. Declaration public CacheMode CacheMode { get; set; } Property Value Type Description CacheMode CacheStoreFactory Gets or sets the factory for underlying persistent storage for read-through and write-through operations. See ReadThrough and WriteThrough properties to enable read-through and write-through behavior so that cache store is invoked on get and/or put operations. If both ReadThrough and WriteThrough are false , cache store will be invoked only on LoadCache(ICacheEntryFilter<TK, TV>, Object[]) calls. Declaration public IFactory<ICacheStore> CacheStoreFactory { get; set; } Property Value Type Description IFactory < ICacheStore > CopyOnRead Gets or sets flag indicating whether copy of the value stored in cache should be created for cache operation implying return value. Declaration public bool CopyOnRead { get; set; } Property Value Type Description System.Boolean DataRegionName Gets or sets the name of the data region, see DataRegionConfiguration . Declaration public string DataRegionName { get; set; } Property Value Type Description System.String EagerTtl Gets or sets flag indicating whether expired cache entries will be eagerly removed from cache. When set to false, expired entries will be removed on next entry access. Declaration public bool EagerTtl { get; set; } Property Value Type Description System.Boolean EnableStatistics Gets or sets a value indicating whether statistics gathering is enabled on a cache. These statistics can be retrieved via GetMetrics() . Declaration public bool EnableStatistics { get; set; } Property Value Type Description System.Boolean EvictionPolicy Gets or sets the eviction policy. Null value means disabled evictions. Declaration public IEvictionPolicy EvictionPolicy { get; set; } Property Value Type Description IEvictionPolicy ExpiryPolicyFactory Gets or sets the factory for IExpiryPolicy to be used for all cache operations, unless WithExpiryPolicy(IExpiryPolicy) is called. Default is null, which means no expiration. Declaration public IFactory<IExpiryPolicy> ExpiryPolicyFactory { get; set; } Property Value Type Description IFactory < IExpiryPolicy > GroupName Gets or sets the cache group name. Caches with the same group name share single underlying 'physical' cache (partition set), but are logically isolated. Since underlying cache is shared, the following configuration properties should be the same within group: AffinityFunction , CacheMode , PartitionLossPolicy , DataRegionName Grouping caches reduces overall overhead, since internal data structures are shared. Declaration public string GroupName { get; set; } Property Value Type Description System.String Invalidate Invalidation flag. If true, values will be invalidated (nullified) upon commit in near cache. Declaration public bool Invalidate { get; set; } Property Value Type Description System.Boolean KeepBinaryInStore Gets or sets the flag indicating whether ICacheStore is working with binary objects instead of deserialized objects. Declaration public bool KeepBinaryInStore { get; set; } Property Value Type Description System.Boolean KeyConfiguration Gets or sets the key configuration. Declaration public ICollection<CacheKeyConfiguration> KeyConfiguration { get; set; } Property Value Type Description System.Collections.Generic.ICollection < CacheKeyConfiguration > LoadPreviousValue Gets or sets flag indicating whether value should be loaded from store if it is not in the cache for the following cache operations: PutIfAbsent(TK, TV) Replace(TK, TV) Remove(TK) GetAndPut(TK, TV) GetAndRemove(TK) GetAndReplace(TK, TV) GetAndPutIfAbsent(TK, TV) Declaration public bool LoadPreviousValue { get; set; } Property Value Type Description System.Boolean LockTimeout Gets or sets default lock acquisition timeout. Declaration public TimeSpan LockTimeout { get; set; } Property Value Type Description System.TimeSpan LongQueryWarningTimeout Gets or sets the timeout after which long query warning will be printed. This property is obsolete, use LongQueryWarningTimeout instead. Declaration [Obsolete(\"Use IgniteConfiguration.LongQueryWarningTimeout instead.\")] public TimeSpan LongQueryWarningTimeout { get; set; } Property Value Type Description System.TimeSpan MaxConcurrentAsyncOperations Gets or sets maximum number of allowed concurrent asynchronous operations, 0 for unlimited. Declaration public int MaxConcurrentAsyncOperations { get; set; } Property Value Type Description System.Int32 MaxQueryIteratorsCount Gets or sets the maximum number of active query iterators. Declaration public int MaxQueryIteratorsCount { get; set; } Property Value Type Description System.Int32 MemoryPolicyName Gets or sets the name of the MemoryPolicyConfiguration for this cache. See MemoryConfiguration . Declaration [Obsolete(\"Use DataRegionName.\")] public string MemoryPolicyName { get; set; } Property Value Type Description System.String Name Gets or sets the cache name. Declaration public string Name { get; set; } Property Value Type Description System.String NearConfiguration Gets or sets the near cache configuration. Declaration public NearCacheConfiguration NearConfiguration { get; set; } Property Value Type Description NearCacheConfiguration OnheapCacheEnabled Gets or sets a value indicating whether on-heap cache is enabled for the off-heap based page memory. Declaration public bool OnheapCacheEnabled { get; set; } Property Value Type Description System.Boolean PartitionLossPolicy Gets or sets the partition loss policy. This policy defines how Ignite will react to a situation when all nodes for some partition leave the cluster. Declaration public PartitionLossPolicy PartitionLossPolicy { get; set; } Property Value Type Description PartitionLossPolicy PluginConfigurations Gets or sets the plugin configurations. Declaration public ICollection<ICachePluginConfiguration> PluginConfigurations { get; set; } Property Value Type Description System.Collections.Generic.ICollection < ICachePluginConfiguration > QueryDetailMetricsSize Gets or sets the size of the query detail metrics to be stored in memory. 0 means disabled metrics. Declaration public int QueryDetailMetricsSize { get; set; } Property Value Type Description System.Int32 QueryEntities Gets or sets the query entity configuration. Declaration public ICollection<QueryEntity> QueryEntities { get; set; } Property Value Type Description System.Collections.Generic.ICollection < QueryEntity > QueryParallelism Gets or sets the desired query parallelism within a single node. Query executor may or may not use this hint, depending on estimated query cost. Default is DefaultQueryParallelism . Declaration public int QueryParallelism { get; set; } Property Value Type Description System.Int32 ReadFromBackup Gets or sets flag indicating whether data can be read from backup. Declaration public bool ReadFromBackup { get; set; } Property Value Type Description System.Boolean ReadThrough Gets or sets a value indicating whether read-through should be enabled for cache operations. When in read-through mode, cache misses that occur due to cache entries not existing as a result of performing a \"get\" operations will appropriately cause the configured ICacheStore (see CacheStoreFactory ) to be invoked. Declaration public bool ReadThrough { get; set; } Property Value Type Description System.Boolean RebalanceBatchesPrefetchCount Gets or sets the rebalance batches prefetch count. Source node can provide more than one batch at rebalance start to improve performance. Default is DefaultRebalanceBatchesPrefetchCount , minimum is 2. Declaration public long RebalanceBatchesPrefetchCount { get; set; } Property Value Type Description System.Int64 RebalanceBatchSize Gets or sets size (in number bytes) to be loaded within a single rebalance message. Rebalancing algorithm will split total data set on every node into multiple batches prior to sending data. Declaration public int RebalanceBatchSize { get; set; } Property Value Type Description System.Int32 RebalanceDelay Gets or sets delay upon a node joining or leaving topology (or crash) after which rebalancing should be started automatically. Rebalancing should be delayed if you plan to restart nodes after they leave topology, or if you plan to start multiple nodes at once or one after another and don't want to repartition and rebalance until all nodes are started. Declaration public TimeSpan RebalanceDelay { get; set; } Property Value Type Description System.TimeSpan RebalanceMode Gets or sets cache rebalance mode. Declaration public CacheRebalanceMode RebalanceMode { get; set; } Property Value Type Description CacheRebalanceMode RebalanceOrder Gets or sets the cache rebalance order. Caches with bigger RebalanceOrder are rebalanced later than caches with smaller RebalanceOrder. Default is 0, which means unordered rebalance. All caches with RebalanceOrder=0 are rebalanced without any delay concurrently. This parameter is applicable only for caches with RebalanceMode of Sync and Async . Declaration public int RebalanceOrder { get; set; } Property Value Type Description System.Int32 RebalanceThrottle Time to wait between rebalance messages to avoid overloading of CPU or network. When rebalancing large data sets, the CPU or network can get over-consumed with rebalancing messages, which consecutively may slow down the application performance. This parameter helps tune the amount of time to wait between rebalance messages to make sure that rebalancing process does not have any negative performance impact. Note that application will continue to work properly while rebalancing is still in progress. Value of 0 means that throttling is disabled. Declaration public TimeSpan RebalanceThrottle { get; set; } Property Value Type Description System.TimeSpan RebalanceTimeout Gets or sets rebalance timeout. Declaration public TimeSpan RebalanceTimeout { get; set; } Property Value Type Description System.TimeSpan SqlEscapeAll If true all the SQL table and field names will be escaped with double quotes like ({ \"tableName\".\"fieldsName\"}). This enforces case sensitivity for field names and also allows having special characters in table and field names. Declaration public bool SqlEscapeAll { get; set; } Property Value Type Description System.Boolean SqlIndexMaxInlineSize Gets or sets maximum inline size in bytes for sql indexes. See also InlineSize . -1 for automatic. Declaration public int SqlIndexMaxInlineSize { get; set; } Property Value Type Description System.Int32 SqlSchema Gets or sets the SQL schema. Non-quoted identifiers are not case sensitive. Quoted identifiers are case sensitive. Quoted Name is used by default. Declaration public string SqlSchema { get; set; } Property Value Type Description System.String StoreConcurrentLoadAllThreshold Gets or sets the threshold to use when multiple keys are being loaded from an underlying cache store (see CacheStoreFactory ). In the situation when several threads load the same or intersecting set of keys and the total number of keys to load is less or equal to this threshold then there will be no second call to the storage in order to load a key from thread A if the same key is already being loaded by thread B. The threshold should be controlled wisely. On the one hand if it's set to a big value then the interaction with a storage during the load of missing keys will be minimal.On the other hand the big value may result in significant performance degradation because it is needed to check for every key whether it's being loaded or not. Declaration public int StoreConcurrentLoadAllThreshold { get; set; } Property Value Type Description System.Int32 WriteBehindBatchSize Maximum batch size for write-behind cache store operations. Store operations (get or remove) are combined in a batch of this size to be passed to WriteAll(IEnumerable<KeyValuePair<TK, TV>>) or DeleteAll(IEnumerable<TK>) methods. Declaration public int WriteBehindBatchSize { get; set; } Property Value Type Description System.Int32 WriteBehindCoalescing Gets or sets write coalescing flag for write-behind cache store operations. Store operations (get or remove) with the same key are combined or coalesced to single, resulting operation to reduce pressure to underlying cache store. Declaration public bool WriteBehindCoalescing { get; set; } Property Value Type Description System.Boolean WriteBehindEnabled Flag indicating whether Ignite should use write-behind behaviour for the cache store. Declaration public bool WriteBehindEnabled { get; set; } Property Value Type Description System.Boolean WriteBehindFlushFrequency Frequency with which write-behind cache is flushed to the cache store. This value defines the maximum time interval between object insertion/deletion from the cache at the moment when corresponding operation is applied to the cache store. If this value is 0, then flush is performed according to the flush size. Note that you cannot set both WriteBehindFlushSize and WriteBehindFlushFrequency to 0. Declaration public TimeSpan WriteBehindFlushFrequency { get; set; } Property Value Type Description System.TimeSpan WriteBehindFlushSize Maximum size of the write-behind cache. If cache size exceeds this value, all cached items are flushed to the cache store and write cache is cleared. Declaration public int WriteBehindFlushSize { get; set; } Property Value Type Description System.Int32 WriteBehindFlushThreadCount Number of threads that will perform cache flushing. Cache flushing is performed when cache size exceeds value defined by WriteBehindFlushSize , or flush interval defined by WriteBehindFlushFrequency is elapsed. Declaration public int WriteBehindFlushThreadCount { get; set; } Property Value Type Description System.Int32 WriteSynchronizationMode Gets or sets write synchronization mode. This mode controls whether the main caller should wait for update on other nodes to complete or not. Declaration public CacheWriteSynchronizationMode WriteSynchronizationMode { get; set; } Property Value Type Description CacheWriteSynchronizationMode WriteThrough Gets or sets a value indicating whether write-through should be enabled for cache operations. When in \"write-through\" mode, cache updates that occur as a result of performing \"put\" operations will appropriately cause the configured ICacheStore (see CacheStoreFactory ) to be invoked. Declaration public bool WriteThrough { get; set; } Property Value Type Description System.Boolean"
  },
  "api/Apache.Ignite.Core.Cache.Configuration.QueryEntity.html": {
    "href": "api/Apache.Ignite.Core.Cache.Configuration.QueryEntity.html",
    "title": "Class QueryEntity | Apache Ignite.NET",
    "keywords": "Class QueryEntity Query entity is a description of cache entry (composed of key and value) in a way of how it must be indexed and can be queried. Inheritance System.Object QueryEntity Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Configuration Assembly : Apache.Ignite.Core.dll Syntax public sealed class QueryEntity : IQueryEntityInternal, IBinaryRawWriteAware, IBinaryRawWriteAware<IBinaryRawWriter> Constructors QueryEntity() Initializes a new instance of the QueryEntity class. Declaration public QueryEntity() QueryEntity(Type) Initializes a new instance of the QueryEntity class. Declaration public QueryEntity(Type valueType) Parameters Type Name Description System.Type valueType Type of the cache entry value. QueryEntity(Type, Type) Initializes a new instance of the QueryEntity class. Declaration public QueryEntity(Type keyType, Type valueType) Parameters Type Name Description System.Type keyType Type of the key. System.Type valueType Type of the value. Properties Aliases Gets or sets field name aliases: mapping from full name in dot notation to an alias that will be used as SQL column name. Example: {\"parent.name\" -> \"parentName\"}. Declaration public ICollection<QueryAlias> Aliases { get; set; } Property Value Type Description System.Collections.Generic.ICollection < QueryAlias > Fields Gets or sets query fields, a map from field name to Java type name. The order of fields defines the order of columns returned by the 'select *' queries. Declaration public ICollection<QueryField> Fields { get; set; } Property Value Type Description System.Collections.Generic.ICollection < QueryField > Indexes Gets or sets the query indexes. Declaration public ICollection<QueryIndex> Indexes { get; set; } Property Value Type Description System.Collections.Generic.ICollection < QueryIndex > KeyFieldName Gets or sets the name of the field that is used to denote the entire key. By default, entite key can be accessed with a special \"_key\" field name. Declaration public string KeyFieldName { get; set; } Property Value Type Description System.String KeyType Gets or sets the type of the key. This is a shortcut for KeyTypeName . Getter will return null for non-primitive types. Setting this property will overwrite Fields and Indexes according to QuerySqlFieldAttribute , if any. Declaration public Type KeyType { get; set; } Property Value Type Description System.Type KeyTypeName Gets or sets key Java type name. Declaration public string KeyTypeName { get; set; } Property Value Type Description System.String TableName Gets or sets the name of the SQL table. When not set, value type name is used. Declaration public string TableName { get; set; } Property Value Type Description System.String ValueFieldName Gets or sets the name of the field that is used to denote the entire value. By default, entite value can be accessed with a special \"_val\" field name. Declaration public string ValueFieldName { get; set; } Property Value Type Description System.String ValueType Gets or sets the type of the value. This is a shortcut for ValueTypeName . Getter will return null for non-primitive types. Setting this property will overwrite Fields and Indexes according to QuerySqlFieldAttribute , if any. Declaration public Type ValueType { get; set; } Property Value Type Description System.Type ValueTypeName Gets or sets value Java type name. Declaration public string ValueTypeName { get; set; } Property Value Type Description System.String"
  },
  "api/Apache.Ignite.Core.Cache.Event.CacheEntryEventType.html": {
    "href": "api/Apache.Ignite.Core.Cache.Event.CacheEntryEventType.html",
    "title": "Enum CacheEntryEventType | Apache Ignite.NET",
    "keywords": "Enum CacheEntryEventType Cache event type. Namespace : Apache.Ignite.Core.Cache.Event Assembly : Apache.Ignite.Core.dll Syntax public enum CacheEntryEventType Fields Name Description Created An event type indicating that the cache entry was created. Removed An event type indicating that the cache entry was removed. Updated An event type indicating that the cache entry was updated. i.e. a previous mapping existed."
  },
  "api/Apache.Ignite.Core.Cache.Eviction.html": {
    "href": "api/Apache.Ignite.Core.Cache.Eviction.html",
    "title": "Namespace Apache.Ignite.Core.Cache.Eviction | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Cache.Eviction Classes EvictionPolicyBase Base class for predefined eviction policies. FifoEvictionPolicy Eviction policy based on First In First Out (FIFO) algorithm with batch eviction support. The eviction starts in the following cases: The cache size becomes { @code batchSize } elements greater than the maximum size; The size of cache entries in bytes becomes greater than the maximum memory size; The size of cache entry calculates as sum of key size and value size. Note: Batch eviction is enabled only if maximum memory limit isn't set. This implementation is very efficient since it does not create any additional table-like data structures. The FIFO ordering information is maintained by attaching ordering metadata to cache entries. LruEvictionPolicy Eviction policy based on Least Recently Used (LRU) algorithm with batch eviction support. The eviction starts in the following cases: The cache size becomes { @code batchSize } elements greater than the maximum size; The size of cache entries in bytes becomes greater than the maximum memory size; The size of cache entry calculates as sum of key size and value size. Note: Batch eviction is enabled only if maximum memory limit isn't set. This implementation is very efficient since it does not create any additional table-like data structures. The LRU ordering information is maintained by attaching ordering metadata to cache entries. Interfaces IEvictionPolicy Represents a cache eviction policy. Only predefined implementations are supported now: LruEvictionPolicy , FifoEvictionPolicy ."
  },
  "api/Apache.Ignite.Core.Cache.Expiry.ExpiryPolicy.html": {
    "href": "api/Apache.Ignite.Core.Cache.Expiry.ExpiryPolicy.html",
    "title": "Class ExpiryPolicy | Apache Ignite.NET",
    "keywords": "Class ExpiryPolicy Default expiry policy implementation with all durations deinfed explicitly. Inheritance System.Object ExpiryPolicy Implements IExpiryPolicy Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Expiry Assembly : Apache.Ignite.Core.dll Syntax public class ExpiryPolicy : IExpiryPolicy Constructors ExpiryPolicy(Nullable<TimeSpan>, Nullable<TimeSpan>, Nullable<TimeSpan>) Constructor. Declaration public ExpiryPolicy(TimeSpan? create, TimeSpan? update, TimeSpan? access) Parameters Type Name Description System.Nullable < System.TimeSpan > create Expiry for create. System.Nullable < System.TimeSpan > update Expiry for udpate. System.Nullable < System.TimeSpan > access Expiry for access. Methods GetExpiryForAccess() Gets expiry for access operation. If TimeSpan.ZERO is returned, cache entry is considered immediately expired. If null is returned, no change to previously understood expiry is performed. Declaration public TimeSpan? GetExpiryForAccess() Returns Type Description System.Nullable < System.TimeSpan > Expiry for access operation. GetExpiryForCreate() Gets expiry for create operation. If TimeSpan.ZERO is returned, cache entry is considered immediately expired and will not be added to cache. If null is returned, no change to previously understood expiry is performed. Declaration public TimeSpan? GetExpiryForCreate() Returns Type Description System.Nullable < System.TimeSpan > Expiry for create opeartion. GetExpiryForUpdate() Gets expiry for update operation. If TimeSpan.ZERO is returned, cache entry is considered immediately expired. If null is returned, no change to previously understood expiry is performed. Declaration public TimeSpan? GetExpiryForUpdate() Returns Type Description System.Nullable < System.TimeSpan > Expiry for update operation. Implements IExpiryPolicy"
  },
  "api/Apache.Ignite.Core.Cache.Query.Continuous.IContinuousQueryHandle.html": {
    "href": "api/Apache.Ignite.Core.Cache.Query.Continuous.IContinuousQueryHandle.html",
    "title": "Interface IContinuousQueryHandle | Apache Ignite.NET",
    "keywords": "Interface IContinuousQueryHandle Represents a continuous query handle. Inherited Members System.IDisposable.Dispose() Namespace : Apache.Ignite.Core.Cache.Query.Continuous Assembly : Apache.Ignite.Core.dll Syntax public interface IContinuousQueryHandle : IDisposable"
  },
  "api/Apache.Ignite.Core.Cache.Query.Continuous.html": {
    "href": "api/Apache.Ignite.Core.Cache.Query.Continuous.html",
    "title": "Namespace Apache.Ignite.Core.Cache.Query.Continuous | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Cache.Query.Continuous Classes ContinuousQuery Continuous query base class, see ContinuousQuery<TK, TV> . ContinuousQuery<TK, TV> API for configuring continuous cache queries. Continuous queries allow to register a remote and a listener for cache update events. If an update event passes the filter, it will be sent to the node that executed the query and listener will be notified on that node. Continuous query can either be executed on the whole topology or only on local node. In case query is distributed and a new node joins, it will get the filter for the query during discovery process before it actually joins topology, so no updates will be missed. To execute the query use method QueryContinuous(ContinuousQuery<TK, TV>) . ContinuousQueryExtensions Extensions for continuous queries. Interfaces IContinuousQueryHandle Represents a continuous query handle. IContinuousQueryHandle<T> Represents a continuous query handle."
  },
  "api/Apache.Ignite.Core.Client.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. Fields DefaultPort Default port. Declaration public const int DefaultPort = 10800 Field Value Type Description System.Int32 DefaultSocketBufferSize Default socket buffer size. Declaration public const int DefaultSocketBufferSize = 0 Field Value Type Description System.Int32 DefaultSocketTimeout Default socket timeout. Declaration public static readonly TimeSpan DefaultSocketTimeout Field Value Type Description System.TimeSpan DefaultTcpNoDelay Default value of TcpNoDelay property. Declaration public const bool DefaultTcpNoDelay = true Field Value Type Description System.Boolean Properties BinaryConfiguration Gets or sets the binary configuration. Declaration public BinaryConfiguration BinaryConfiguration { get; set; } Property Value Type Description BinaryConfiguration Host Gets or sets the host. Should not be null. Declaration public string Host { get; set; } Property Value Type Description System.String Port Gets or sets the port. Declaration public int Port { 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 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 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 Methods FromXml(String) Deserializes IgniteClientConfiguration from the XML string. Declaration public static IgniteClientConfiguration FromXml(string xml) Parameters Type Name Description System.String xml Xml string. Returns Type Description IgniteClientConfiguration Deserialized instance. FromXml(XmlReader) Deserializes IgniteClientConfiguration from the XML reader. Declaration public static IgniteClientConfiguration FromXml(XmlReader reader) Parameters Type Name Description System.Xml.XmlReader reader The reader. Returns Type Description IgniteClientConfiguration Deserialized instance. ToXml() Serializes this instance to an XML string. Declaration public string ToXml() Returns Type Description System.String ToXml(XmlWriter, String) Serializes this instance to the specified XML writer. Declaration public void ToXml(XmlWriter writer, string rootElementName) Parameters Type Name Description System.Xml.XmlWriter writer The writer. System.String rootElementName Name of the root element."
  },
  "api/Apache.Ignite.Core.Client.IgniteClientConfigurationSection.html": {
    "href": "api/Apache.Ignite.Core.Client.IgniteClientConfigurationSection.html",
    "title": "Class IgniteClientConfigurationSection | Apache Ignite.NET",
    "keywords": "Class IgniteClientConfigurationSection Ignite configuration section for app.config and web.config files. Inheritance System.Object System.Configuration.ConfigurationElement System.Configuration.ConfigurationSection IgniteClientConfigurationSection Inherited Members System.Configuration.ConfigurationSection.GetRuntimeObject() System.Configuration.ConfigurationSection.IsModified() System.Configuration.ConfigurationSection.ResetModified() System.Configuration.ConfigurationSection.ShouldSerializePropertyInTargetVersion(System.Configuration.ConfigurationProperty, System.String, System.Runtime.Versioning.FrameworkName, System.Configuration.ConfigurationElement) System.Configuration.ConfigurationSection.ShouldSerializeElementInTargetVersion(System.Configuration.ConfigurationElement, System.String, System.Runtime.Versioning.FrameworkName) System.Configuration.ConfigurationSection.ShouldSerializeSectionInTargetVersion(System.Runtime.Versioning.FrameworkName) System.Configuration.ConfigurationSection.SectionInformation System.Configuration.ConfigurationElement.Init() System.Configuration.ConfigurationElement.IsReadOnly() System.Configuration.ConfigurationElement.SetReadOnly() System.Configuration.ConfigurationElement.ListErrors(System.Collections.IList) System.Configuration.ConfigurationElement.InitializeDefault() System.Configuration.ConfigurationElement.Reset(System.Configuration.ConfigurationElement) System.Configuration.ConfigurationElement.Equals(System.Object) System.Configuration.ConfigurationElement.GetHashCode() System.Configuration.ConfigurationElement.SetPropertyValue(System.Configuration.ConfigurationProperty, System.Object, System.Boolean) System.Configuration.ConfigurationElement.Unmerge(System.Configuration.ConfigurationElement, System.Configuration.ConfigurationElement, System.Configuration.ConfigurationSaveMode) System.Configuration.ConfigurationElement.SerializeToXmlElement(System.Xml.XmlWriter, System.String) System.Configuration.ConfigurationElement.SerializeElement(System.Xml.XmlWriter, System.Boolean) System.Configuration.ConfigurationElement.DeserializeElement(System.Xml.XmlReader, System.Boolean) System.Configuration.ConfigurationElement.OnRequiredPropertyNotFound(System.String) System.Configuration.ConfigurationElement.PostDeserialize() System.Configuration.ConfigurationElement.PreSerialize(System.Xml.XmlWriter) System.Configuration.ConfigurationElement.OnDeserializeUnrecognizedAttribute(System.String, System.String) System.Configuration.ConfigurationElement.OnDeserializeUnrecognizedElement(System.String, System.Xml.XmlReader) System.Configuration.ConfigurationElement.GetTransformedTypeString(System.String) System.Configuration.ConfigurationElement.GetTransformedAssemblyString(System.String) System.Configuration.ConfigurationElement.LockAttributes System.Configuration.ConfigurationElement.LockAllAttributesExcept System.Configuration.ConfigurationElement.LockElements System.Configuration.ConfigurationElement.LockAllElementsExcept System.Configuration.ConfigurationElement.LockItem System.Configuration.ConfigurationElement.Item[System.Configuration.ConfigurationProperty] System.Configuration.ConfigurationElement.Item[System.String] System.Configuration.ConfigurationElement.Properties System.Configuration.ConfigurationElement.ElementInformation System.Configuration.ConfigurationElement.EvaluationContext System.Configuration.ConfigurationElement.ElementProperty System.Configuration.ConfigurationElement.CurrentConfiguration System.Object.ToString() System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Client Assembly : Apache.Ignite.Core.dll Syntax public class IgniteClientConfigurationSection : ConfigurationSection Properties IgniteClientConfiguration Gets the Ignite client configuration. Declaration public IgniteClientConfiguration IgniteClientConfiguration { get; } Property Value Type Description IgniteClientConfiguration Methods DeserializeSection(XmlReader) Reads XML from the configuration file. Declaration protected override void DeserializeSection(XmlReader reader) Parameters Type Name Description System.Xml.XmlReader reader The reader object, which reads from the configuration file. Overrides System.Configuration.ConfigurationSection.DeserializeSection(System.Xml.XmlReader) SerializeSection(ConfigurationElement, String, ConfigurationSaveMode) Creates an XML string containing an unmerged view of the System.Configuration.ConfigurationSection object as a single section to write to a file. Declaration protected override string SerializeSection(ConfigurationElement parentElement, string name, ConfigurationSaveMode saveMode) Parameters Type Name Description System.Configuration.ConfigurationElement parentElement The System.Configuration.ConfigurationElement instance to use as the parent when performing the un-merge. System.String name The name of the section to create. System.Configuration.ConfigurationSaveMode saveMode The System.Configuration.ConfigurationSaveMode instance to use when writing to a string. Returns Type Description System.String An XML string containing an unmerged view of the System.Configuration.ConfigurationSection object. Overrides System.Configuration.ConfigurationSection.SerializeSection(System.Configuration.ConfigurationElement, System.String, System.Configuration.ConfigurationSaveMode)"
  },
  "api/Apache.Ignite.Core.Common.JavaException.html": {
    "href": "api/Apache.Ignite.Core.Common.JavaException.html",
    "title": "Class JavaException | Apache Ignite.NET",
    "keywords": "Class JavaException Indicates an error on Java side and contains full Java stack trace. Inheritance System.Object System.Exception IgniteException JavaException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Common Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class JavaException : IgniteException, ISerializable, _Exception Constructors JavaException() Initializes a new instance of the JavaException class. Declaration public JavaException() JavaException(SerializationInfo, StreamingContext) Initializes a new instance of the JavaException class. Declaration protected JavaException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. JavaException(String) Initializes a new instance of the JavaException class. Declaration public JavaException(string message) Parameters Type Name Description System.String message The message that describes the error. JavaException(String, Exception) Initializes a new instance of the JavaException class. Declaration public JavaException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. JavaException(String, String, String) Initializes a new instance of the JavaException class. Declaration public JavaException(string javaClassName, string javaMessage, string stackTrace) Parameters Type Name Description System.String javaClassName Java exception class name. System.String javaMessage Java exception message. System.String stackTrace Java stack trace. JavaException(String, String, String, Exception) Initializes a new instance of the JavaException class. Declaration public JavaException(string javaClassName, string javaMessage, string stackTrace, Exception cause) Parameters Type Name Description System.String javaClassName Java exception class name. System.String javaMessage Java exception message. System.String stackTrace Java stack trace. System.Exception cause The cause. Properties JavaClassName Gets the Java exception class name. Declaration public string JavaClassName { get; } Property Value Type Description System.String JavaMessage Gets the Java exception message. Declaration public string JavaMessage { get; } Property Value Type Description System.String Methods GetObjectData(SerializationInfo, StreamingContext) When overridden in a derived class, sets the System.Runtime.Serialization.SerializationInfo with information about the exception. Declaration public override void GetObjectData(SerializationInfo info, StreamingContext context) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info The System.Runtime.Serialization.SerializationInfo that holds the serialized object data about the exception being thrown. System.Runtime.Serialization.StreamingContext context The System.Runtime.Serialization.StreamingContext that contains contextual information about the source or destination. Overrides System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Common.html": {
    "href": "api/Apache.Ignite.Core.Common.html",
    "title": "Namespace Apache.Ignite.Core.Common | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Common Classes ClientDisconnectedException Indicates that client-mode local node has been disconnected from the cluster. IgniteException General Ignite exception. Indicates any error condition within Ignite. IgniteFutureCancelledException Indicates future cancellation within Ignite. JavaException Indicates an error on Java side and contains full Java stack trace. Structs IgniteGuid Ignite guid with additional local ID. Interfaces IFactory<T> Factory that produces instances of a specific type. Implementation can be passed over the wire and thus should be marked with System.SerializableAttribute . Delegates ExceptionFactory Exception factory delegate."
  },
  "api/Apache.Ignite.Core.Compute.IComputeJob-1.html": {
    "href": "api/Apache.Ignite.Core.Compute.IComputeJob-1.html",
    "title": "Interface IComputeJob<TRes> | Apache Ignite.NET",
    "keywords": "Interface IComputeJob<TRes> Defines executable unit for IComputeTask<TArg, TJobRes, TRes> . Ignite task gets split into jobs when Map(IList<IClusterNode>, TArg) method is called. This method returns all jobs for the task mapped to their corresponding Ignite nodes for execution. Grid will then serialize this jobs and send them to requested nodes for execution. Once job execution is complete, the return value will be sent back to parent task and will be passed into OnResult(IComputeJobResult<TJobRes>, IList<IComputeJobResult<TJobRes>>) method via IComputeJobResult<TRes> instance. Ignite job implementation can be injected with IIgnite using InstanceResourceAttribute attribute. Namespace : Apache.Ignite.Core.Compute Assembly : Apache.Ignite.Core.dll Syntax public interface IComputeJob<out TRes> Type Parameters Name Description TRes Methods Cancel() This method is called when system detects that completion of this job can no longer alter the overall outcome (for example, when parent task has already reduced the results). Note that job cancellation is only a hint, and it is really up to the actual job instance to gracefully finish execution and exit. Declaration void Cancel() Execute() Executes this job. Declaration TRes Execute() Returns Type Description TRes Job execution result (possibly null ). This result will be returned in IComputeJobResult<TRes> object passed into OnResult(IComputeJobResult<TJobRes>, IList<IComputeJobResult<TJobRes>>) on caller node."
  },
  "api/Apache.Ignite.Core.Compute.IComputeJobResult-1.html": {
    "href": "api/Apache.Ignite.Core.Compute.IComputeJobResult-1.html",
    "title": "Interface IComputeJobResult<TRes> | Apache Ignite.NET",
    "keywords": "Interface IComputeJobResult<TRes> Job execution result which gets passed to OnResult(IComputeJobResult<TJobRes>, IList<IComputeJobResult<TJobRes>>) method. Namespace : Apache.Ignite.Core.Compute Assembly : Apache.Ignite.Core.dll Syntax public interface IComputeJobResult<out TRes> Type Parameters Name Description TRes Properties Cancelled Whether the job was cancelled. Declaration bool Cancelled { get; } Property Value Type Description System.Boolean Data Gets data returned by remote job if it didn't fail. This data is the object returned from Execute() method. Note that if task is annotated with ComputeTaskNoResultCacheAttribute attribute, then job results will not be cached and will be available only in OnResult(IComputeJobResult<TJobRes>, IList<IComputeJobResult<TJobRes>>) method for every individual job, but not in Reduce(IList<IComputeJobResult<TJobRes>>) method. Declaration TRes Data { get; } Property Value Type Description TRes Data returned by job. Exception Gets exception produced by execution of remote job, or null if no exception was produced. Declaration Exception Exception { get; } Property Value Type Description System.Exception Exception or null in case of success. Job Gets local instance of remote job produced this result. Declaration IComputeJob<TRes> Job { get; } Property Value Type Description IComputeJob <TRes> NodeId ID of the node where actual job execution occurred. Declaration Guid NodeId { get; } Property Value Type Description System.Guid"
  },
  "api/Apache.Ignite.Core.Datastream.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.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.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 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 DefaultNetworkSendRetryCount Default network retry count. Declaration public const int DefaultNetworkSendRetryCount = 3 Field Value Type Description System.Int32 DefaultNetworkSendRetryDelay Default network retry delay. Declaration public static readonly TimeSpan DefaultNetworkSendRetryDelay Field Value Type Description System.TimeSpan DefaultNetworkTimeout Default network timeout. Declaration public static readonly TimeSpan DefaultNetworkTimeout Field Value Type Description System.TimeSpan DefaultRedirectJavaConsoleOutput Default value for RedirectJavaConsoleOutput property. Declaration public const bool DefaultRedirectJavaConsoleOutput = true Field Value Type Description System.Boolean DefaultThreadPoolSize Default thread pool size. Declaration public static readonly int DefaultThreadPoolSize Field Value Type Description System.Int32 Properties Assemblies List of additional .Net assemblies to load on Ignite start. Each item can be either fully qualified assembly name, path to assembly to DLL or path to a directory when assemblies reside. Declaration public ICollection<string> Assemblies { get; set; } Property Value Type Description System.Collections.Generic.ICollection < System.String > AsyncCallbackThreadPoolSize Gets or sets the size of the asynchronous callback thread pool. Declaration public int AsyncCallbackThreadPoolSize { get; set; } Property Value Type Description System.Int32 AtomicConfiguration Gets or sets the atomic data structures configuration. Declaration public AtomicConfiguration AtomicConfiguration { get; set; } Property Value Type Description AtomicConfiguration 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 EventStorageSpi Gets or sets the event storage interface. Only predefined implementations are supported: NoopEventStorageSpi , MemoryEventStorageSpi . Declaration public IEventStorageSpi EventStorageSpi { get; set; } Property Value Type Description IEventStorageSpi FailureDetectionTimeout Gets or sets the failure detection timeout used by TcpDiscoverySpi and TcpCommunicationSpi . Declaration public TimeSpan FailureDetectionTimeout { get; set; } Property Value Type Description System.TimeSpan GridName Gets or sets optional local instance name. This name only works locally and has no effect on topology. This property is used to when there are multiple Ignite nodes in one process to distinguish them. Declaration [Obsolete(\"Use IgniteInstanceName instead.\")] public string GridName { get; set; } Property Value Type Description System.String IgniteHome Path to Ignite home. If not set environment variable IGNITE_HOME will be used. Declaration public string IgniteHome { get; set; } Property Value Type Description System.String IgniteInstanceName Gets or sets optional local instance name. This name only works locally and has no effect on topology. This property is used to when there are multiple Ignite nodes in one process to distinguish them. Declaration public string IgniteInstanceName { get; set; } Property Value Type Description System.String IncludedEventTypes Gets or sets a set of event types ( EventType ) to be recorded by Ignite. Declaration public ICollection<int> IncludedEventTypes { get; set; } Property Value Type Description System.Collections.Generic.ICollection < System.Int32 > IsActiveOnStart Gets or sets a value indicating whether grid should be active on start. See also IsActive() and SetActive(Boolean) . This property is ignored when DataStorageConfiguration is present: cluster is always inactive on start when Ignite Persistence is enabled. Declaration public bool IsActiveOnStart { get; set; } Property Value Type Description System.Boolean IsDaemon Gets or sets a value indicating whether this node should be a daemon node. Daemon nodes are the usual grid nodes that participate in topology but not visible on the main APIs, i.e. they are not part of any cluster groups. Daemon nodes are used primarily for management and monitoring functionality that is built on Ignite and needs to participate in the topology, but also needs to be excluded from the \"normal\" topology, so that it won't participate in the task execution or in-memory data grid storage. Declaration public bool IsDaemon { get; set; } Property Value Type Description System.Boolean IsLateAffinityAssignment Gets or sets a value indicating whether late affinity assignment mode should be used. On each topology change, for each started cache, partition-to-node mapping is calculated using AffinityFunction for cache. When late affinity assignment mode is disabled then new affinity mapping is applied immediately. With late affinity assignment mode, if primary node was changed for some partition, but data for this partition is not rebalanced yet on this node, then current primary is not changed and new primary is temporary assigned as backup. This nodes becomes primary only when rebalancing for all assigned primary partitions is finished. This mode can show better performance for cache operations, since when cache primary node executes some operation and data is not rebalanced yet, then it sends additional message to force rebalancing from other nodes. Note, that ICacheAffinity interface provides assignment information taking late assignment into account, so while rebalancing for new primary nodes is not finished it can return assignment which differs from assignment calculated by AffinityFunction. This property should have the same value for all nodes in cluster. If not provided, default value is DefaultIsLateAffinityAssignment . Declaration [Obsolete(\"No longer supported, always true.\")] public bool IsLateAffinityAssignment { get; set; } Property Value Type Description System.Boolean JvmClasspath Classpath used by JVM on Ignite start. Declaration public string JvmClasspath { get; set; } Property Value Type Description System.String JvmDllPath Path to jvm.dll (libjvm.so on Linux, libjvm.dylib on Mac) file. If not set, it's location will be determined using JAVA_HOME environment variable. If path is neither set nor determined automatically, an exception will be thrown. Declaration public string JvmDllPath { get; set; } Property Value Type Description System.String JvmInitialMemoryMb Initial amount of memory in megabytes given to JVM. Maps to -Xms Java option. -1 maps to JVM defaults. Defaults to DefaultJvmInitMem . Declaration public int JvmInitialMemoryMb { get; set; } Property Value Type Description System.Int32 JvmMaxMemoryMb Maximum amount of memory in megabytes given to JVM. Maps to -Xmx Java option. -1 maps to JVM defaults. Defaults to DefaultJvmMaxMem . Declaration public int JvmMaxMemoryMb { get; set; } Property Value Type Description System.Int32 JvmOptions Collection of options passed to JVM on Ignite start. Declaration public ICollection<string> JvmOptions { get; set; } Property Value Type Description System.Collections.Generic.ICollection < System.String > LifecycleHandlers Lifecycle handlers. Declaration public ICollection<ILifecycleHandler> LifecycleHandlers { get; set; } Property Value Type Description System.Collections.Generic.ICollection < ILifecycleHandler > LocalEventListeners Gets or sets pre-configured local event listeners. This is similar to calling LocalListen<T>(IEventListener<T>, Int32[]) , but important difference is that some events occur during startup and can be only received this way. Declaration public ICollection<LocalEventListener> LocalEventListeners { get; set; } Property Value Type Description System.Collections.Generic.ICollection < LocalEventListener > Localhost Gets or sets system-wide local address or host for all Ignite components to bind to. If provided it will override all default local bind settings within Ignite. If null then Ignite tries to use local wildcard address.That means that all services will be available on all network interfaces of the host machine. It is strongly recommended to set this parameter for all production environments. Declaration public string Localhost { get; set; } Property Value Type Description System.String Logger Gets or sets the logger. If no logger is set, logging is delegated to Java, which uses the logger defined in Spring XML (if present) or logs to console otherwise. Declaration public ILogger Logger { get; set; } Property Value Type Description ILogger LongQueryWarningTimeout Gets or sets the timeout after which long query warning will be printed. Declaration public TimeSpan LongQueryWarningTimeout { get; set; } Property Value Type Description System.TimeSpan ManagementThreadPoolSize Gets or sets the size of the management thread pool, which processes internal Ignite jobs. Declaration public int ManagementThreadPoolSize { get; set; } Property Value Type Description System.Int32 MemoryConfiguration Gets or sets the page memory configuration. MemoryConfiguration for more details. Obsolete, use DataStorageConfiguration . Declaration [Obsolete(\"Use DataStorageConfiguration.\")] public MemoryConfiguration MemoryConfiguration { get; set; } Property Value Type Description MemoryConfiguration MetricsExpireTime Gets or sets the time after which a certain metric value is considered expired. Declaration public TimeSpan MetricsExpireTime { get; set; } Property Value Type Description System.TimeSpan MetricsHistorySize Gets or sets the number of metrics kept in history to compute totals and averages. Declaration public int MetricsHistorySize { get; set; } Property Value Type Description System.Int32 MetricsLogFrequency Gets or sets the frequency of metrics log print out. System.TimeSpan.Zero to disable metrics print out. Declaration public TimeSpan MetricsLogFrequency { get; set; } Property Value Type Description System.TimeSpan MetricsUpdateFrequency Gets or sets the job metrics update frequency. System.TimeSpan.Zero to update metrics on job start/finish. Negative value to never update metrics. Declaration public TimeSpan MetricsUpdateFrequency { get; set; } Property Value Type Description System.TimeSpan 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 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 TransactionConfiguration Gets or sets the transaction configuration. Declaration public TransactionConfiguration TransactionConfiguration { get; set; } Property Value Type Description TransactionConfiguration UserAttributes Gets or sets the user attributes for this node. These attributes can be retrieved later via Attributes . Environment variables are added to node attributes automatically. NOTE: attribute names starting with \"org.apache.ignite\" are reserved for internal use. Declaration public IDictionary<string, object> UserAttributes { get; set; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.Object > UtilityCacheThreadPoolSize Gets or sets the size of the utility cache thread pool. Declaration public int UtilityCacheThreadPoolSize { get; set; } Property Value Type Description System.Int32 WorkDirectory Gets or sets the work directory. If not provided, a folder under IgniteHome will be used. Declaration public string WorkDirectory { get; set; } Property Value Type Description System.String Methods FromXml(String) Deserializes IgniteConfiguration from the XML string. Declaration public static IgniteConfiguration FromXml(string xml) Parameters Type Name Description System.String xml Xml string. Returns Type Description IgniteConfiguration Deserialized instance. FromXml(XmlReader) Deserializes IgniteConfiguration from the XML reader. Declaration public static IgniteConfiguration FromXml(XmlReader reader) Parameters Type Name Description System.Xml.XmlReader reader The reader. Returns Type Description IgniteConfiguration Deserialized instance. ToXml() Serializes this instance to an XML string. Declaration public string ToXml() Returns Type Description System.String ToXml(XmlWriter, String) Serializes this instance to the specified XML writer. Declaration public void ToXml(XmlWriter writer, string rootElementName) Parameters Type Name Description System.Xml.XmlWriter writer The writer. System.String rootElementName Name of the root element."
  },
  "api/Apache.Ignite.Core.IgniteConfigurationSection.html": {
    "href": "api/Apache.Ignite.Core.IgniteConfigurationSection.html",
    "title": "Class IgniteConfigurationSection | Apache Ignite.NET",
    "keywords": "Class IgniteConfigurationSection Ignite configuration section for app.config and web.config files. Inheritance System.Object System.Configuration.ConfigurationElement System.Configuration.ConfigurationSection IgniteConfigurationSection Inherited Members System.Configuration.ConfigurationSection.GetRuntimeObject() System.Configuration.ConfigurationSection.IsModified() System.Configuration.ConfigurationSection.ResetModified() System.Configuration.ConfigurationSection.ShouldSerializePropertyInTargetVersion(System.Configuration.ConfigurationProperty, System.String, System.Runtime.Versioning.FrameworkName, System.Configuration.ConfigurationElement) System.Configuration.ConfigurationSection.ShouldSerializeElementInTargetVersion(System.Configuration.ConfigurationElement, System.String, System.Runtime.Versioning.FrameworkName) System.Configuration.ConfigurationSection.ShouldSerializeSectionInTargetVersion(System.Runtime.Versioning.FrameworkName) System.Configuration.ConfigurationSection.SectionInformation System.Configuration.ConfigurationElement.Init() System.Configuration.ConfigurationElement.IsReadOnly() System.Configuration.ConfigurationElement.SetReadOnly() System.Configuration.ConfigurationElement.ListErrors(System.Collections.IList) System.Configuration.ConfigurationElement.InitializeDefault() System.Configuration.ConfigurationElement.Reset(System.Configuration.ConfigurationElement) System.Configuration.ConfigurationElement.Equals(System.Object) System.Configuration.ConfigurationElement.GetHashCode() System.Configuration.ConfigurationElement.SetPropertyValue(System.Configuration.ConfigurationProperty, System.Object, System.Boolean) System.Configuration.ConfigurationElement.Unmerge(System.Configuration.ConfigurationElement, System.Configuration.ConfigurationElement, System.Configuration.ConfigurationSaveMode) System.Configuration.ConfigurationElement.SerializeToXmlElement(System.Xml.XmlWriter, System.String) System.Configuration.ConfigurationElement.SerializeElement(System.Xml.XmlWriter, System.Boolean) System.Configuration.ConfigurationElement.DeserializeElement(System.Xml.XmlReader, System.Boolean) System.Configuration.ConfigurationElement.OnRequiredPropertyNotFound(System.String) System.Configuration.ConfigurationElement.PostDeserialize() System.Configuration.ConfigurationElement.PreSerialize(System.Xml.XmlWriter) System.Configuration.ConfigurationElement.OnDeserializeUnrecognizedAttribute(System.String, System.String) System.Configuration.ConfigurationElement.OnDeserializeUnrecognizedElement(System.String, System.Xml.XmlReader) System.Configuration.ConfigurationElement.GetTransformedTypeString(System.String) System.Configuration.ConfigurationElement.GetTransformedAssemblyString(System.String) System.Configuration.ConfigurationElement.LockAttributes System.Configuration.ConfigurationElement.LockAllAttributesExcept System.Configuration.ConfigurationElement.LockElements System.Configuration.ConfigurationElement.LockAllElementsExcept System.Configuration.ConfigurationElement.LockItem System.Configuration.ConfigurationElement.Item[System.Configuration.ConfigurationProperty] System.Configuration.ConfigurationElement.Item[System.String] System.Configuration.ConfigurationElement.Properties System.Configuration.ConfigurationElement.ElementInformation System.Configuration.ConfigurationElement.EvaluationContext System.Configuration.ConfigurationElement.ElementProperty System.Configuration.ConfigurationElement.CurrentConfiguration System.Object.ToString() System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core Assembly : Apache.Ignite.Core.dll Syntax public class IgniteConfigurationSection : ConfigurationSection Properties IgniteConfiguration Gets or sets the ignite configuration. Declaration public IgniteConfiguration IgniteConfiguration { get; } Property Value Type Description IgniteConfiguration The ignite configuration. Methods DeserializeSection(XmlReader) Reads XML from the configuration file. Declaration protected override void DeserializeSection(XmlReader reader) Parameters Type Name Description System.Xml.XmlReader reader The reader object, which reads from the configuration file. Overrides System.Configuration.ConfigurationSection.DeserializeSection(System.Xml.XmlReader) SerializeSection(ConfigurationElement, String, ConfigurationSaveMode) Creates an XML string containing an unmerged view of the System.Configuration.ConfigurationSection object as a single section to write to a file. Declaration protected override string SerializeSection(ConfigurationElement parentElement, string name, ConfigurationSaveMode saveMode) Parameters Type Name Description System.Configuration.ConfigurationElement parentElement The System.Configuration.ConfigurationElement instance to use as the parent when performing the un-merge. System.String name The name of the section to create. System.Configuration.ConfigurationSaveMode saveMode The System.Configuration.ConfigurationSaveMode instance to use when writing to a string. Returns Type Description System.String An XML string containing an unmerged view of the System.Configuration.ConfigurationSection object. Overrides System.Configuration.ConfigurationSection.SerializeSection(System.Configuration.ConfigurationElement, System.String, System.Configuration.ConfigurationSaveMode)"
  },
  "api/Apache.Ignite.Core.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.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.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.Binary.BinaryBasicNameMapper.html": {
    "href": "api/Apache.Ignite.Core.Binary.BinaryBasicNameMapper.html",
    "title": "Class BinaryBasicNameMapper | Apache Ignite.NET",
    "keywords": "Class BinaryBasicNameMapper Base binary name mapper implementation. Inheritance System.Object BinaryBasicNameMapper Implements IBinaryNameMapper Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Binary Assembly : Apache.Ignite.Core.dll Syntax public class BinaryBasicNameMapper : IBinaryNameMapper Properties IsSimpleName Gets or sets a value indicating whether this instance maps to simple type names. Declaration public bool IsSimpleName { get; set; } Property Value Type Description System.Boolean Methods GetFieldName(String) Gets the field name. Declaration public string GetFieldName(string name) Parameters Type Name Description System.String name Returns Type Description System.String GetTypeName(String) Gets the type name. Declaration public string GetTypeName(string name) Parameters Type Name Description System.String name Returns Type Description System.String Implements IBinaryNameMapper"
  },
  "api/Apache.Ignite.Core.Binary.BinaryTypeNames.html": {
    "href": "api/Apache.Ignite.Core.Binary.BinaryTypeNames.html",
    "title": "Class BinaryTypeNames | Apache Ignite.NET",
    "keywords": "Class BinaryTypeNames Binary type name constants. Inheritance System.Object BinaryTypeNames Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Binary Assembly : Apache.Ignite.Core.dll Syntax public static class BinaryTypeNames Fields TypeNameArrayBool Type name: boolean array. Declaration public const string TypeNameArrayBool = \"boolean[]\" Field Value Type Description System.String TypeNameArrayByte Type name: byte array. Declaration public const string TypeNameArrayByte = \"byte[]\" Field Value Type Description System.String TypeNameArrayChar Type name: char array. Declaration public const string TypeNameArrayChar = \"char[]\" Field Value Type Description System.String TypeNameArrayDate Type name: timestamp array. Declaration public const string TypeNameArrayDate = \"Date[]\" Field Value Type Description System.String TypeNameArrayDecimal Type name: decimal array. Declaration public const string TypeNameArrayDecimal = \"decimal[]\" Field Value Type Description System.String TypeNameArrayDouble Type name: double array. Declaration public const string TypeNameArrayDouble = \"double[]\" Field Value Type Description System.String TypeNameArrayEnum Type name: Enum array. Declaration public const string TypeNameArrayEnum = \"Enum[]\" Field Value Type Description System.String TypeNameArrayFloat Type name: float array. Declaration public const string TypeNameArrayFloat = \"float[]\" Field Value Type Description System.String TypeNameArrayGuid Type name: UUID array. Declaration public const string TypeNameArrayGuid = \"UUID[]\" Field Value Type Description System.String TypeNameArrayInt Type name: int array. Declaration public const string TypeNameArrayInt = \"int[]\" Field Value Type Description System.String TypeNameArrayLong Type name: long array. Declaration public const string TypeNameArrayLong = \"long[]\" Field Value Type Description System.String TypeNameArrayObject Type name: Object array. Declaration public const string TypeNameArrayObject = \"Object[]\" Field Value Type Description System.String TypeNameArrayShort Type name: short array. Declaration public const string TypeNameArrayShort = \"short[]\" Field Value Type Description System.String TypeNameArrayString Type name: String array. Declaration public const string TypeNameArrayString = \"String[]\" Field Value Type Description System.String TypeNameArrayTimestamp Type name: timestamp array. Declaration public const string TypeNameArrayTimestamp = \"Timestamp[]\" Field Value Type Description System.String TypeNameBool Type name: boolean. Declaration public const string TypeNameBool = \"boolean\" Field Value Type Description System.String TypeNameByte Type name: byte. Declaration public const string TypeNameByte = \"byte\" Field Value Type Description System.String TypeNameChar Type name: char. Declaration public const string TypeNameChar = \"char\" Field Value Type Description System.String TypeNameCollection Type name: Collection. Declaration public const string TypeNameCollection = \"Collection\" Field Value Type Description System.String TypeNameDate Type name: date. Declaration public const string TypeNameDate = \"Date\" Field Value Type Description System.String TypeNameDecimal Type name: decimal. Declaration public const string TypeNameDecimal = \"decimal\" Field Value Type Description System.String TypeNameDouble Type name: double. Declaration public const string TypeNameDouble = \"double\" Field Value Type Description System.String TypeNameEnum Type name: Enum. Declaration public const string TypeNameEnum = \"Enum\" Field Value Type Description System.String TypeNameFloat Type name: float. Declaration public const string TypeNameFloat = \"float\" Field Value Type Description System.String TypeNameGuid Type name: UUID. Declaration public const string TypeNameGuid = \"UUID\" Field Value Type Description System.String TypeNameInt Type name: int. Declaration public const string TypeNameInt = \"int\" Field Value Type Description System.String TypeNameLong Type name: long. Declaration public const string TypeNameLong = \"long\" Field Value Type Description System.String TypeNameMap Type name: Map. Declaration public const string TypeNameMap = \"Map\" Field Value Type Description System.String TypeNameObject Type name: Object. Declaration public const string TypeNameObject = \"Object\" Field Value Type Description System.String TypeNameShort Type name: short. Declaration public const string TypeNameShort = \"short\" Field Value Type Description System.String TypeNameString Type name: String. Declaration public const string TypeNameString = \"String\" Field Value Type Description System.String TypeNameTimestamp Type name: timestamp. Declaration public const string TypeNameTimestamp = \"Timestamp\" Field Value Type Description System.String"
  },
  "api/Apache.Ignite.Core.Binary.IBinaryType.html": {
    "href": "api/Apache.Ignite.Core.Binary.IBinaryType.html",
    "title": "Interface IBinaryType | Apache Ignite.NET",
    "keywords": "Interface IBinaryType Binary type metadata. Namespace : Apache.Ignite.Core.Binary Assembly : Apache.Ignite.Core.dll Syntax public interface IBinaryType Properties AffinityKeyFieldName Gets optional affinity key field name. Declaration string AffinityKeyFieldName { get; } Property Value Type Description System.String Affinity key field name or null in case it is not provided. Fields Gets field names for that type. Declaration ICollection<string> Fields { get; } Property Value Type Description System.Collections.Generic.ICollection < System.String > Field names. IsEnum Gets a value indicating whether this type represents an enum. Declaration bool IsEnum { get; } Property Value Type Description System.Boolean true if this instance represents an enum; otherwise, false . TypeId Gets the type identifier. Declaration int TypeId { get; } Property Value Type Description System.Int32 TypeName Gets type name. Declaration string TypeName { get; } Property Value Type Description System.String Type name. Methods GetEnumValues() Gets the enum values. Only valid when IsEnum is true. Declaration IEnumerable<IBinaryObject> GetEnumValues() Returns Type Description System.Collections.Generic.IEnumerable < IBinaryObject > GetFieldTypeName(String) Gets field type for the given field name. Declaration string GetFieldTypeName(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.String Field type."
  },
  "api/Apache.Ignite.Core.Cache.Affinity.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.CacheResult-1.html": {
    "href": "api/Apache.Ignite.Core.Cache.CacheResult-1.html",
    "title": "Struct CacheResult<T> | Apache Ignite.NET",
    "keywords": "Struct CacheResult<T> Represents a cache operation result with a success flag. Implements System.IEquatable < CacheResult <T>> Inherited Members System.ValueType.ToString() System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() Namespace : Apache.Ignite.Core.Cache Assembly : Apache.Ignite.Core.dll Syntax public struct CacheResult<T> : IEquatable<CacheResult<T>> Type Parameters Name Description T Operation result value type. Constructors CacheResult(T) Initializes a new instance of the CacheResult<T> struct with a specified value and sets success flag to true. Declaration public CacheResult(T value) Parameters Type Name Description T value The value. Properties Success Gets a value indicating whether the operation completed successfully. Declaration public bool Success { get; } Property Value Type Description System.Boolean Value Gets the cache value. Declaration public T Value { get; } Property Value Type Description T Methods Equals(CacheResult<T>) Determines whether the specified System.Object , is equal to this instance. Declaration public bool Equals(CacheResult<T> other) Parameters Type Name Description CacheResult <T> other The System.Object to compare with this instance. Returns Type Description System.Boolean true if the specified System.Object is equal to this instance; otherwise, false . Equals(Object) Determines whether the specified System.Object , is equal to this instance. Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj The System.Object to compare with this instance. Returns Type Description System.Boolean true if the specified System.Object is equal to this instance; otherwise, false . Overrides System.ValueType.Equals(System.Object) GetHashCode() Returns a hash code for this instance. Declaration public override int GetHashCode() Returns Type Description System.Int32 A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Overrides System.ValueType.GetHashCode() Operators Equality(CacheResult<T>, CacheResult<T>) Implements the operator ==. Declaration public static bool operator ==(CacheResult<T> left, CacheResult<T> right) Parameters Type Name Description CacheResult <T> left The left. CacheResult <T> right The right. Returns Type Description System.Boolean The result of the operator. Inequality(CacheResult<T>, CacheResult<T>) Implements the operator !=. Declaration public static bool operator !=(CacheResult<T> left, CacheResult<T> right) Parameters Type Name Description CacheResult <T> left The left. CacheResult <T> right The right. Returns Type Description System.Boolean The result of the operator. Implements System.IEquatable<T>"
  },
  "api/Apache.Ignite.Core.Cache.Configuration.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.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.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.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.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.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.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.Compute.ComputeJobFailoverException.html": {
    "href": "api/Apache.Ignite.Core.Compute.ComputeJobFailoverException.html",
    "title": "Class ComputeJobFailoverException | Apache Ignite.NET",
    "keywords": "Class ComputeJobFailoverException This runtime exception can be thrown from Execute() method to force job failover to another node within task topology. IComputeFunc<TArg, TRes> or IComputeFunc<TRes> passed into any of the ICompute methods can also throw this exception to force failover. Inheritance System.Object System.Exception IgniteException ComputeJobFailoverException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Compute Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class ComputeJobFailoverException : IgniteException, ISerializable, _Exception Constructors ComputeJobFailoverException() Initializes a new instance of the ComputeJobFailoverException class. Declaration public ComputeJobFailoverException() ComputeJobFailoverException(SerializationInfo, StreamingContext) Initializes a new instance of the ComputeJobFailoverException class. Declaration protected ComputeJobFailoverException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. ComputeJobFailoverException(String) Initializes a new instance of the ComputeJobFailoverException class. Declaration public ComputeJobFailoverException(string message) Parameters Type Name Description System.String message The message that describes the error. ComputeJobFailoverException(String, Exception) Initializes a new instance of the ComputeJobFailoverException class. Declaration public ComputeJobFailoverException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Compute.ComputeJobResultPolicy.html": {
    "href": "api/Apache.Ignite.Core.Compute.ComputeJobResultPolicy.html",
    "title": "Enum ComputeJobResultPolicy | Apache Ignite.NET",
    "keywords": "Enum ComputeJobResultPolicy This enumeration provides different types of actions following the last received job result. See OnResult(IComputeJobResult<TJobRes>, IList<IComputeJobResult<TJobRes>>) for more details. Namespace : Apache.Ignite.Core.Compute Assembly : Apache.Ignite.Core.dll Syntax public enum ComputeJobResultPolicy Fields Name Description Failover Fail-over job to execute on another node. Reduce Ignore all not yet received results and start reducing results. Wait Wait for results if any are still expected. If all results have been received - it will start reducing results."
  },
  "api/Apache.Ignite.Core.Configuration.DataPageEvictionMode.html": {
    "href": "api/Apache.Ignite.Core.Configuration.DataPageEvictionMode.html",
    "title": "Enum DataPageEvictionMode | Apache Ignite.NET",
    "keywords": "Enum DataPageEvictionMode Memory page eviction mode. Only data pages, that store key-value entries, are eligible for eviction. The other types of pages, like index or system pages, are not evictable. Namespace : Apache.Ignite.Core.Configuration Assembly : Apache.Ignite.Core.dll Syntax public enum DataPageEvictionMode Fields Name Description Disabled Eviction is disabled. Random2Lru Activates Random-2-LRU algorithm which is a scan resistant version of Random-LRU. This algorithm differs from Random-LRU only in a way that two latest access timestamps are stored for every data page. At the eviction time, a minimum between two latest timestamps is taken for further comparison with minimums of other pages that might be evicted. LRU-2 outperforms LRU by resolving \"one-hit wonder\" problem - if a data page is accessed rarely, but accidentally accessed once, its protected from eviction for a long time. RandomLru Random-LRU algorithm. Once a memory region defined by a memory policy is configured, an off-heap array is allocated to track last usage timestamp for every individual data page. The size of the array equals to MaxSize / PageSize . When a data page is accessed, its timestamp gets updated in the tracking array. The page index in the tracking array equals to pageAddress / MaxSize . When some pages need to be evicted, the algorithm randomly chooses 5 indexes from the tracking array and evicts a page with the latest timestamp. If some of the indexes point to non-data pages (index or system pages) then the algorithm picks other pages."
  },
  "api/Apache.Ignite.Core.Configuration.DataRegionConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Configuration.DataRegionConfiguration.html",
    "title": "Class DataRegionConfiguration | Apache Ignite.NET",
    "keywords": "Class DataRegionConfiguration Defines custom data region configuration for Apache Ignite page memory (see DataStorageConfiguration ). For each configured data region Apache Ignite instantiates respective memory regions with different parameters like maximum size, eviction policy, swapping options, etc. An Apache Ignite cache can be mapped to a particular region using DataRegionName method. Inheritance System.Object DataRegionConfiguration Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Configuration Assembly : Apache.Ignite.Core.dll Syntax public class DataRegionConfiguration Constructors DataRegionConfiguration() Initializes a new instance of the DataRegionConfiguration class. Declaration public DataRegionConfiguration() Fields DefaultEmptyPagesPoolSize The default empty pages pool size. Declaration public const int DefaultEmptyPagesPoolSize = 100 Field Value Type Description System.Int32 DefaultEvictionThreshold The default eviction threshold. Declaration public const double DefaultEvictionThreshold = 0.9 Field Value Type Description System.Double DefaultInitialSize The default initial size. Declaration public const long DefaultInitialSize = 268435456L Field Value Type Description System.Int64 DefaultMaxSize The default maximum size, equals to 20% of total RAM. Declaration public static readonly long DefaultMaxSize Field Value Type Description System.Int64 DefaultMetricsRateTimeInterval The default rate time interval. Declaration public static readonly TimeSpan DefaultMetricsRateTimeInterval Field Value Type Description System.TimeSpan DefaultMetricsSubIntervalCount The default sub intervals. Declaration public const int DefaultMetricsSubIntervalCount = 5 Field Value Type Description System.Int32 DefaultPersistenceEnabled Default value for PersistenceEnabled . Declaration public const bool DefaultPersistenceEnabled = false Field Value Type Description System.Boolean Properties CheckpointPageBufferSize Gets or sets the size of the checkpointing page buffer. Default is 0 : Ignite will choose buffer size automatically. Declaration public long CheckpointPageBufferSize { get; set; } Property Value Type Description System.Int64 EmptyPagesPoolSize Gets or sets the minimal number of empty pages to be present in reuse lists for this data region. This parameter ensures that Ignite will be able to successfully evict old data entries when the size of (key, value) pair is slightly larger than page size / 2. Increase this parameter if cache can contain very big entries (total size of pages in this pool should be enough to contain largest cache entry). Declaration public int EmptyPagesPoolSize { get; set; } Property Value Type Description System.Int32 EvictionThreshold Gets or sets the threshold for memory pages eviction initiation. For instance, if the threshold is 0.9 it means that the page memory will start the eviction only after 90% of the memory region is occupied. Declaration public double EvictionThreshold { get; set; } Property Value Type Description System.Double InitialSize Gets or sets initial memory region size. When the used memory size exceeds this value, new chunks of memory will be allocated. Declaration public long InitialSize { get; set; } Property Value Type Description System.Int64 MaxSize Sets maximum memory region size. The total size should not be less than 10 MB due to internal data structures overhead. Declaration public long MaxSize { get; set; } Property Value Type Description System.Int64 MetricsEnabled Gets or sets a value indicating whether memory metrics should be enabled. Metrics can be retrieved with GetDataRegionMetrics() method. Declaration public bool MetricsEnabled { get; set; } Property Value Type Description System.Boolean MetricsRateTimeInterval Gets or sets the rate time interval for AllocationRate and EvictionRate monitoring purposes. For instance, after setting the interval to 60 seconds, subsequent calls to AllocationRate will return average allocation rate (pages per second) for the last minute. Declaration public TimeSpan MetricsRateTimeInterval { get; set; } Property Value Type Description System.TimeSpan MetricsSubIntervalCount Gets or sets the number of sub intervals to split MetricsRateTimeInterval into to calculate AllocationRate and EvictionRate . Bigger value results in more accurate metrics. Declaration public int MetricsSubIntervalCount { get; set; } Property Value Type Description System.Int32 Name Gets or sets the data region name. Declaration public string Name { get; set; } Property Value Type Description System.String PageEvictionMode Gets or sets the page eviction mode. If Disabled is used (default) then an out of memory exception will be thrown if the memory region usage goes beyond MaxSize . Declaration public DataPageEvictionMode PageEvictionMode { get; set; } Property Value Type Description DataPageEvictionMode PersistenceEnabled Gets or sets a value indicating whether disk persistence is enabled for this region. Default is DefaultPersistenceEnabled . Declaration public bool PersistenceEnabled { get; set; } Property Value Type Description System.Boolean SwapPath Gets or sets the the path to the directory for memory-mapped files. Null for no swap. Declaration public string SwapPath { get; set; } Property Value Type Description System.String"
  },
  "api/Apache.Ignite.Core.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.CheckpointEvent.html": {
    "href": "api/Apache.Ignite.Core.Events.CheckpointEvent.html",
    "title": "Class CheckpointEvent | Apache Ignite.NET",
    "keywords": "Class CheckpointEvent Grid checkpoint event. Inheritance System.Object EventBase CheckpointEvent Implements IEvent System.IEquatable < EventBase > Inherited Members EventBase.Id EventBase.LocalOrder EventBase.Node EventBase.Message EventBase.Type EventBase.Name EventBase.Timestamp EventBase.Equals(EventBase) EventBase.Equals(Object) EventBase.GetHashCode() EventBase.ToString() EventBase.ReadNode(IBinaryRawReader) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Events Assembly : Apache.Ignite.Core.dll Syntax public sealed class CheckpointEvent : EventBase, IEvent, IEquatable<EventBase> Properties Key Gets checkpoint key associated with this event. Declaration public string Key { get; } Property Value Type Description System.String Methods ToShortString() Gets shortened version of ToString result. Declaration public override string ToShortString() Returns Type Description System.String Overrides EventBase.ToShortString() Implements IEvent System.IEquatable<T>"
  },
  "api/Apache.Ignite.Core.Events.DiscoveryEvent.html": {
    "href": "api/Apache.Ignite.Core.Events.DiscoveryEvent.html",
    "title": "Class DiscoveryEvent | Apache Ignite.NET",
    "keywords": "Class DiscoveryEvent Grid discovery event. Inheritance System.Object EventBase DiscoveryEvent Implements IEvent System.IEquatable < EventBase > Inherited Members EventBase.Id EventBase.LocalOrder EventBase.Node EventBase.Message EventBase.Type EventBase.Name EventBase.Timestamp EventBase.Equals(EventBase) EventBase.Equals(Object) EventBase.GetHashCode() EventBase.ToString() EventBase.ReadNode(IBinaryRawReader) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Events Assembly : Apache.Ignite.Core.dll Syntax public sealed class DiscoveryEvent : EventBase, IEvent, IEquatable<EventBase> Properties EventNode Gets node that caused this event to be generated. It is potentially different from the node on which this event was recorded. For example, node A locally recorded the event that a remote node B joined the topology. In this case this method will return ID of B. Declaration public IClusterNode EventNode { get; } Property Value Type Description IClusterNode TopologyNodes Gets topology nodes from topology snapshot. If SPI implementation does not support versioning, the best effort snapshot will be captured. Declaration public ICollection<IClusterNode> TopologyNodes { get; } Property Value Type Description System.Collections.Generic.ICollection < IClusterNode > TopologyVersion Gets topology version if this event is raised on topology change and configured discovery SPI implementation supports topology versioning. Declaration public long TopologyVersion { get; } Property Value Type Description System.Int64 Methods ToShortString() Gets shortened version of ToString result. Declaration public override string ToShortString() Returns Type Description System.String Overrides EventBase.ToShortString() Implements IEvent System.IEquatable<T>"
  },
  "api/Apache.Ignite.Core.IDataRegionMetrics.html": {
    "href": "api/Apache.Ignite.Core.IDataRegionMetrics.html",
    "title": "Interface IDataRegionMetrics | Apache Ignite.NET",
    "keywords": "Interface IDataRegionMetrics Memory usage metrics. Namespace : Apache.Ignite.Core Assembly : Apache.Ignite.Core.dll Syntax public interface IDataRegionMetrics Properties AllocationRate Gets the allocation rate, in pages per second. Declaration float AllocationRate { get; } Property Value Type Description System.Single CheckpointBufferPages Gets checkpointing buffer size in pages. Declaration long CheckpointBufferPages { get; } Property Value Type Description System.Int64 CheckpointBufferSize Gets checkpointing buffer size in bytes. Declaration long CheckpointBufferSize { get; } Property Value Type Description System.Int64 DirtyPages Gets the number of dirty RAM pages. Declaration long DirtyPages { get; } Property Value Type Description System.Int64 EvictionRate Gets the eviction rate, in pages per second. Declaration float EvictionRate { get; } Property Value Type Description System.Single LargeEntriesPagesPercentage Gets the percentage of pages fully occupied by entries that are larger than page. Declaration float LargeEntriesPagesPercentage { get; } Property Value Type Description System.Single Name Gets the memory policy name. Declaration string Name { get; } Property Value Type Description System.String PageFillFactor Gets the page fill factor: free space to overall size ratio across all pages. Declaration float PageFillFactor { get; } Property Value Type Description System.Single PageReplaceAge Gets the average age (in milliseconds) for pages being replaced from persistent storage. Declaration float PageReplaceAge { get; } Property Value Type Description System.Single PageReplaceRate Gets the rate (pages per second) at which pages get replaced with other pages from persistent storage. Declaration float PageReplaceRate { get; } Property Value Type Description System.Single PageSize Gets memory page size in bytes. Declaration int PageSize { get; } Property Value Type Description System.Int32 PhysicalMemoryPages Gets the count of pages loaded to RAM. Declaration long PhysicalMemoryPages { get; } Property Value Type Description System.Int64 PhysicalMemorySize Gets the size of pages loaded to RAM in bytes. Declaration long PhysicalMemorySize { get; } Property Value Type Description System.Int64 TotalAllocatedPages Gets the count of allocated pages. Declaration long TotalAllocatedPages { get; } Property Value Type Description System.Int64 TotalAllocatedSize Gets the size of allocated pages in bytes. Declaration long TotalAllocatedSize { get; } Property Value Type Description System.Int64"
  },
  "api/Apache.Ignite.Core.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.Log.ILogger.html": {
    "href": "api/Apache.Ignite.Core.Log.ILogger.html",
    "title": "Interface ILogger | Apache Ignite.NET",
    "keywords": "Interface ILogger Defines Ignite logging interface. This interface only provides essential log methods. All convenience overloads are in LoggerExtensions . Namespace : Apache.Ignite.Core.Log Assembly : Apache.Ignite.Core.dll Syntax public interface ILogger Methods IsEnabled(LogLevel) Determines whether the specified log level is enabled. Declaration bool IsEnabled(LogLevel level) Parameters Type Name Description LogLevel level The level. Returns Type Description System.Boolean Value indicating whether the specified log level is enabled Log(LogLevel, String, Object[], IFormatProvider, String, String, Exception) Logs the specified message. Declaration void Log(LogLevel level, string message, object[] args, IFormatProvider formatProvider, string category, string nativeErrorInfo, Exception ex) Parameters Type Name Description LogLevel level The level. System.String message The message. System.Object [] args The arguments to format message . Can be null (formatting will not occur). System.IFormatProvider formatProvider The format provider. Can be null if args is null. System.String category The logging category name. System.String nativeErrorInfo The native error information. System.Exception ex The exception. Can be null. Extension Methods LoggerExtensions.Trace(ILogger, String) LoggerExtensions.Trace(ILogger, String, Object[]) LoggerExtensions.Trace(ILogger, Exception, String) LoggerExtensions.Trace(ILogger, Exception, String, Object[]) LoggerExtensions.Debug(ILogger, String) LoggerExtensions.Debug(ILogger, String, Object[]) LoggerExtensions.Debug(ILogger, Exception, String) LoggerExtensions.Debug(ILogger, Exception, String, Object[]) LoggerExtensions.Info(ILogger, String) LoggerExtensions.Info(ILogger, String, Object[]) LoggerExtensions.Info(ILogger, Exception, String) LoggerExtensions.Info(ILogger, Exception, String, Object[]) LoggerExtensions.Warn(ILogger, String) LoggerExtensions.Warn(ILogger, String, Object[]) LoggerExtensions.Warn(ILogger, Exception, String) LoggerExtensions.Warn(ILogger, Exception, String, Object[]) LoggerExtensions.Error(ILogger, String) LoggerExtensions.Error(ILogger, String, Object[]) LoggerExtensions.Error(ILogger, Exception, String) LoggerExtensions.Error(ILogger, Exception, String, Object[]) LoggerExtensions.Log(ILogger, LogLevel, String) LoggerExtensions.Log(ILogger, LogLevel, String, Object[]) LoggerExtensions.Log(ILogger, LogLevel, Exception, String) LoggerExtensions.Log(ILogger, LogLevel, Exception, String, Object[]) LoggerExtensions.GetLogger(ILogger, String)"
  },
  "api/Apache.Ignite.Core.Log.LoggerExtensions.html": {
    "href": "api/Apache.Ignite.Core.Log.LoggerExtensions.html",
    "title": "Class LoggerExtensions | Apache Ignite.NET",
    "keywords": "Class LoggerExtensions Extension methods for ILogger Inheritance System.Object LoggerExtensions Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Log Assembly : Apache.Ignite.Core.dll Syntax public static class LoggerExtensions Methods Debug(ILogger, Exception, String) Logs the message with Debug level. Declaration public static void Debug(this ILogger logger, Exception ex, string message) Parameters Type Name Description ILogger logger The logger. System.Exception ex The exception. System.String message The message. Debug(ILogger, Exception, String, Object[]) Logs the message with Debug level. Declaration public static void Debug(this ILogger logger, Exception ex, string message, params object[] args) Parameters Type Name Description ILogger logger The logger. System.Exception ex The exception. System.String message The message. System.Object [] args The arguments. Debug(ILogger, String) Logs the message with Debug level. Declaration public static void Debug(this ILogger logger, string message) Parameters Type Name Description ILogger logger The logger. System.String message The message. Debug(ILogger, String, Object[]) Logs the message with Debug level. Declaration public static void Debug(this ILogger logger, string message, params object[] args) Parameters Type Name Description ILogger logger The logger. System.String message The message. System.Object [] args The arguments. Error(ILogger, Exception, String) Logs the message with Error level. Declaration public static void Error(this ILogger logger, Exception ex, string message) Parameters Type Name Description ILogger logger The logger. System.Exception ex The exception. System.String message The message. Error(ILogger, Exception, String, Object[]) Logs the message with Error level. Declaration public static void Error(this ILogger logger, Exception ex, string message, params object[] args) Parameters Type Name Description ILogger logger The logger. System.Exception ex The exception. System.String message The message. System.Object [] args The arguments. Error(ILogger, String) Logs the message with Error level. Declaration public static void Error(this ILogger logger, string message) Parameters Type Name Description ILogger logger The logger. System.String message The message. Error(ILogger, String, Object[]) Logs the message with Error level. Declaration public static void Error(this ILogger logger, string message, params object[] args) Parameters Type Name Description ILogger logger The logger. System.String message The message. System.Object [] args The arguments. GetLogger(ILogger, String) Gets the CategoryLogger with a specified category that wraps provided logger. Declaration public static ILogger GetLogger(this ILogger logger, string category) Parameters Type Name Description ILogger logger The logger. System.String category The category. Returns Type Description ILogger Logger that always uses specified category. Info(ILogger, Exception, String) Logs the message with Info level. Declaration public static void Info(this ILogger logger, Exception ex, string message) Parameters Type Name Description ILogger logger The logger. System.Exception ex The exception. System.String message The message. Info(ILogger, Exception, String, Object[]) Logs the message with Info level. Declaration public static void Info(this ILogger logger, Exception ex, string message, params object[] args) Parameters Type Name Description ILogger logger The logger. System.Exception ex The exception. System.String message The message. System.Object [] args The arguments. Info(ILogger, String) Logs the message with Info level. Declaration public static void Info(this ILogger logger, string message) Parameters Type Name Description ILogger logger The logger. System.String message The message. Info(ILogger, String, Object[]) Logs the message with Info level. Declaration public static void Info(this ILogger logger, string message, params object[] args) Parameters Type Name Description ILogger logger The logger. System.String message The message. System.Object [] args The arguments. Log(ILogger, LogLevel, Exception, String) Logs the message. Declaration public static void Log(this ILogger logger, LogLevel level, Exception ex, string message) Parameters Type Name Description ILogger logger The logger. LogLevel level The level. System.Exception ex The exception. System.String message The message. Log(ILogger, LogLevel, Exception, String, Object[]) Logs the message. Declaration public static void Log(this ILogger logger, LogLevel level, Exception ex, string message, params object[] args) Parameters Type Name Description ILogger logger The logger. LogLevel level The level. System.Exception ex The exception. System.String message The message. System.Object [] args The arguments. Log(ILogger, LogLevel, String) Logs the message. Declaration public static void Log(this ILogger logger, LogLevel level, string message) Parameters Type Name Description ILogger logger The logger. LogLevel level The level. System.String message The message. Log(ILogger, LogLevel, String, Object[]) Logs the message. Declaration public static void Log(this ILogger logger, LogLevel level, string message, params object[] args) Parameters Type Name Description ILogger logger The logger. LogLevel level The level. System.String message The message. System.Object [] args The arguments. Trace(ILogger, Exception, String) Logs the message with Trace level. Declaration public static void Trace(this ILogger logger, Exception ex, string message) Parameters Type Name Description ILogger logger The logger. System.Exception ex The exception. System.String message The message. Trace(ILogger, Exception, String, Object[]) Logs the message with Trace level. Declaration public static void Trace(this ILogger logger, Exception ex, string message, params object[] args) Parameters Type Name Description ILogger logger The logger. System.Exception ex The exception. System.String message The message. System.Object [] args The arguments. Trace(ILogger, String) Logs the message with Trace level. Declaration public static void Trace(this ILogger logger, string message) Parameters Type Name Description ILogger logger The logger. System.String message The message. Trace(ILogger, String, Object[]) Logs the message with Trace level. Declaration public static void Trace(this ILogger logger, string message, params object[] args) Parameters Type Name Description ILogger logger The logger. System.String message The message. System.Object [] args The arguments. Warn(ILogger, Exception, String) Logs the message with Warn level. Declaration public static void Warn(this ILogger logger, Exception ex, string message) Parameters Type Name Description ILogger logger The logger. System.Exception ex The exception. System.String message The message. Warn(ILogger, Exception, String, Object[]) Logs the message with Warn level. Declaration public static void Warn(this ILogger logger, Exception ex, string message, params object[] args) Parameters Type Name Description ILogger logger The logger. System.Exception ex The exception. System.String message The message. System.Object [] args The arguments. Warn(ILogger, String) Logs the message with Warn level. Declaration public static void Warn(this ILogger logger, string message) Parameters Type Name Description ILogger logger The logger. System.String message The message. Warn(ILogger, String, Object[]) Logs the message with Warn level. Declaration public static void Warn(this ILogger logger, string message, params object[] args) Parameters Type Name Description ILogger logger The logger. System.String message The message. System.Object [] args The arguments."
  },
  "api/Apache.Ignite.Core.Log.LogLevel.html": {
    "href": "api/Apache.Ignite.Core.Log.LogLevel.html",
    "title": "Enum LogLevel | Apache Ignite.NET",
    "keywords": "Enum LogLevel Defines log levels. Namespace : Apache.Ignite.Core.Log Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public enum LogLevel Fields Name Description Debug Debug log level. Error Error log level. Info Info log level. Trace Trace log level. Warn Warning log level."
  },
  "api/Apache.Ignite.Core.Log.html": {
    "href": "api/Apache.Ignite.Core.Log.html",
    "title": "Namespace Apache.Ignite.Core.Log | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Log Classes CategoryLogger Wrapping logger with a predefined category. When Log(LogLevel, String, Object[], IFormatProvider, String, String, Exception) method is called, and category parameter is null, predefined category will be used. LoggerExtensions Extension methods for ILogger Interfaces ILogger Defines Ignite logging interface. This interface only provides essential log methods. All convenience overloads are in LoggerExtensions . Enums LogLevel Defines log levels."
  },
  "api/Apache.Ignite.Core.Transactions.html": {
    "href": "api/Apache.Ignite.Core.Transactions.html",
    "title": "Namespace Apache.Ignite.Core.Transactions | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Transactions Classes TransactionConfiguration Transactions configuration. TransactionDeadlockException Indicates a deadlock within Ignite transaction. This exception can be thrown from any cache method that modifies or reads data within a transaction with timeout (see TxStart(TransactionConcurrency, TransactionIsolation, TimeSpan, Int32) overload). TransactionHeuristicException Exception thrown whenever Ignite transaction enters an unknown state. This exception is usually thrown whenever commit partially succeeds. Cache will still resolve this situation automatically to ensure data integrity, by invalidating all values participating in this transaction on remote nodes. TransactionOptimisticException Exception thrown whenever Ignite transactions fail optimistically. TransactionRollbackException Exception thrown whenever Ignite transactions has been automatically rolled back. TransactionTimeoutException Exception thrown whenever Ignite transactions time out. Interfaces ITransaction Grid cache transaction. Cache transactions support the following isolation levels: ReadCommitted isolation level means that always a committed value will be provided for read operations. With this isolation level values are always read from cache global memory or persistent store every time a value is accessed. In other words, if the same key is accessed more than once within the same transaction, it may have different value every time since global cache memory may be updated concurrently by other threads. RepeatableRead isolation level means that if a value was read once within transaction, then all consecutive reads will provide the same in-transaction value. With this isolation level accessed values are stored within in-transaction memory, so consecutive access to the same key within the same transaction will always return the value that was previously read or updated within this transaction. If concurrency is Pessimistic , then a lock on the key will be acquired prior to accessing the value. Serializable isolation level means that all transactions occur in a completely isolated fashion, as if all transactions in the system had executed serially, one after the other. Read access with this level happens the same way as with RepeatableRead level. However, in Optimistic mode, if some transactions cannot be serially isolated from each other, then one winner will be picked and the other transactions in conflict will result in TransactionOptimisticException being thrown on Java side. Cache transactions support the following concurrency models: Optimistic - in this mode all cache operations are not distributed to other nodes until Commit() . In this mode one PREPARE message will be sent to participating cache nodes to start acquiring per-transaction locks, and once all nodes reply OK (i.e. Phase 1 completes successfully), a one-way COMMIT message is sent without waiting for reply. If it is necessary to know whenever remote nodes have committed as well, synchronous commit or synchronous rollback should be enabled via CacheConfiguration.setWriteSynchronizationMode . Note that in this mode, optimistic failures are only possible in conjunction with Serializable isolation level. In all other cases, optimistic transactions will never fail optimistically and will always be identically ordered on all participating Ignite nodes. Pessimistic - in this mode a lock is acquired on all cache operations with exception of read operations in ReadCommitted mode. All optional filters passed into cache operations will be evaluated after successful lock acquisition. Whenever Commit() is called, a single one-way COMMIT message is sent to participating cache nodes without waiting for reply. Note that there is no reason for distributed PREPARE step, as all locks have been already acquired. Just like with optimistic mode, it is possible to configure synchronous commit or rollback and wait till transaction commits on all participating remote nodes. In addition to standard CacheAtomicityMode.TRANSACTIONAL behavior, Ignite also supports a lighter CacheAtomicityMode.ATOMIC mode as well. In this mode distributed transactions and distributed locking are not supported. Disabling transactions and locking allows to achieve much higher performance and throughput ratios. It is recommended that CacheAtomicityMode.TRANSACTIONAL mode is used whenever full ACID -compliant transactions are not needed. You can use cache transactions as follows: ICacheTx tx = cache.TxStart(); try { int v1 = cache<string, int>.Get(\"k1\"); // Check if v1 satisfies some condition before doing a put. if (v1 > 0) cache.Put<string, int>(\"k1\", 2); cache.Removex(\"k2); // Commit the transaction. tx.Commit(); } finally { tx.Dispose(); } ITransactionMetrics Transaction metrics, shared across all caches. ITransactions Transactions facade. All members are thread-safe and may be used concurrently from multiple threads. Enums TransactionConcurrency Transaction concurrency control. See ITransaction for more information on transaction concurrency controls. TransactionIsolation Defines different cache transaction isolation levels. See ITransaction documentation for more information about cache transaction isolation levels. TransactionState Cache transaction state."
  },
  "api/Apache.Ignite.Core.html": {
    "href": "api/Apache.Ignite.Core.html",
    "title": "Namespace Apache.Ignite.Core | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core Classes IgniteConfiguration Grid configuration. IgniteConfigurationSection Ignite configuration section for app.config and web.config files. Ignition This class defines a factory for the main Ignite API. Use Start() method to start Ignite with default configuration. All members are thread-safe and may be used concurrently from multiple threads. Interfaces IDataRegionMetrics Memory usage metrics. IDataStorageMetrics Persistent store metrics. IIgnite Main entry point for all Ignite APIs. You can obtain an instance of IIgnite through GetIgnite() , or for named grids you can use GetIgnite(String) . Note that you can have multiple instances of IIgnite running in the same process by giving each instance a different name. All members are thread-safe and may be used concurrently from multiple threads."
  },
  "api/Apache.Ignite.EntityFramework.DbCachingMode.html": {
    "href": "api/Apache.Ignite.EntityFramework.DbCachingMode.html",
    "title": "Enum DbCachingMode | Apache Ignite.NET",
    "keywords": "Enum DbCachingMode Represents a second-level caching strategy. Namespace : Apache.Ignite.EntityFramework Assembly : Apache.Ignite.EntityFramework.dll Syntax public enum DbCachingMode Fields Name Description ReadOnly Read-only mode, never invalidates. Database updates are ignored in this mode. Once query results have been cached, they are kept in cache until expired (forever when no expiration is specified). This mode is suitable for data that is not expected to change (like a list of countries and other dictionary data). ReadWrite Read-write mode. Cached data is invalidated when underlying entity set changes. This is \"normal\" cache mode which always provides correct query results. Keep in mind that this mode works correctly only when all database changes are performed via System.Data.Entity.DbContext with Ignite caching configured. Other database updates are not tracked."
  },
  "api/Apache.Ignite.EntityFramework.DbCachingPolicy.html": {
    "href": "api/Apache.Ignite.EntityFramework.DbCachingPolicy.html",
    "title": "Class DbCachingPolicy | Apache Ignite.NET",
    "keywords": "Class DbCachingPolicy Default caching policy implementation: everything is cached with ReadWrite , no expiration. Inheritance System.Object DbCachingPolicy Implements IDbCachingPolicy Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.EntityFramework Assembly : Apache.Ignite.EntityFramework.dll Syntax public class DbCachingPolicy : IDbCachingPolicy Methods CanBeCached(DbQueryInfo) Determines whether the specified query can be cached. Declaration public virtual bool CanBeCached(DbQueryInfo queryInfo) Parameters Type Name Description DbQueryInfo queryInfo The query information. Returns Type Description System.Boolean true if the specified query can be cached; otherwise, false . CanBeCached(DbQueryInfo, Int32) Determines whether specified number of rows should be cached. Declaration public virtual bool CanBeCached(DbQueryInfo queryInfo, int rowCount) Parameters Type Name Description DbQueryInfo queryInfo The query information. System.Int32 rowCount The count of fetched rows. Returns Type Description System.Boolean GetCachingMode(DbQueryInfo) Gets the caching strategy for a give query. Declaration public virtual DbCachingMode GetCachingMode(DbQueryInfo queryInfo) Parameters Type Name Description DbQueryInfo queryInfo The query information. Returns Type Description DbCachingMode Caching strategy for the query. GetExpirationTimeout(DbQueryInfo) Gets the absolute expiration timeout for a given query. Declaration public virtual TimeSpan GetExpirationTimeout(DbQueryInfo queryInfo) Parameters Type Name Description DbQueryInfo queryInfo The query information. Returns Type Description System.TimeSpan Expiration timeout. System.TimeSpan.MaxValue for no expiration. Implements IDbCachingPolicy"
  },
  "index.html": {
    "href": "index.html",
    "title": "Apache Ignite.NET In-Memory Data Fabric | Apache Ignite.NET",
    "keywords": "Apache Ignite.NET In-Memory Data Fabric Apache Ignite In-Memory Data Fabric is designed to deliver uncompromised performance for a wide set of in-memory computing use cases from high performance computing , to the industry most advanced data grid , highly available service grid , and streaming . API Documentation Gettting Started"
  },
  "api/index.html": {
    "href": "api/index.html",
    "title": "Apache Ignite.NET API Documentation | Apache Ignite.NET",
    "keywords": "Apache Ignite.NET API Documentation Click namespaces on the left to browse the API, or use the search box on top of the page. Ignition class is the API entry point, see various Start overloads."
  },
  "api/Apache.Ignite.Core.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.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.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.IEventListener-1.html": {
    "href": "api/Apache.Ignite.Core.Events.IEventListener-1.html",
    "title": "Interface IEventListener<T> | Apache Ignite.NET",
    "keywords": "Interface IEventListener<T> Represents an event listener. Namespace : Apache.Ignite.Core.Events Assembly : Apache.Ignite.Core.dll Syntax public interface IEventListener<in T> where T : IEvent Type Parameters Name Description T Event type. Methods Invoke(T) Invoked when event occurs. Declaration bool Invoke(T evt) Parameters Type Name Description T evt Event. Returns Type Description System.Boolean Value indicating whether this listener should be kept subscribed. Returning false unsubscribes this listener from future notifications."
  },
  "api/Apache.Ignite.Core.Events.IEvents.html": {
    "href": "api/Apache.Ignite.Core.Events.IEvents.html",
    "title": "Interface IEvents | Apache Ignite.NET",
    "keywords": "Interface IEvents Provides functionality for event notifications on nodes defined by ClusterGroup . All members are thread-safe and may be used concurrently from multiple threads. Namespace : Apache.Ignite.Core.Events Assembly : Apache.Ignite.Core.dll Syntax public interface IEvents Properties ClusterGroup Gets the cluster group to which this instance belongs. Declaration IClusterGroup ClusterGroup { get; } Property Value Type Description IClusterGroup Methods DisableLocal(IEnumerable<Int32>) Disables provided events. Allows to stop recording events that were enabled before. Note that specified events will be disabled regardless of whether local node is in this cluster group or not. Declaration void DisableLocal(IEnumerable<int> types) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Int32 > types Events to disable. DisableLocal(Int32[]) Disables provided events. Allows to stop recording events that were enabled before. Note that specified events will be disabled regardless of whether local node is in this cluster group or not. Declaration void DisableLocal(params int[] types) Parameters Type Name Description System.Int32 [] types Events to disable. EnableLocal(IEnumerable<Int32>) Enables provided events. Allows to start recording events that were disabled before. Note that provided events will be enabled regardless of whether local node is in this cluster group or not. Declaration void EnableLocal(IEnumerable<int> types) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Int32 > types Events to enable. EnableLocal(Int32[]) Enables provided events. Allows to start recording events that were disabled before. Note that provided events will be enabled regardless of whether local node is in this cluster group or not. Declaration void EnableLocal(params int[] types) Parameters Type Name Description System.Int32 [] types Events to enable. GetEnabledEvents() Gets types of enabled events. Declaration ICollection<int> GetEnabledEvents() Returns Type Description System.Collections.Generic.ICollection < System.Int32 > Types of enabled events. IsEnabled(Int32) Determines whether the specified event is enabled. Declaration bool IsEnabled(int type) Parameters Type Name Description System.Int32 type Event type. Returns Type Description System.Boolean Value indicating whether the specified event is enabled. LocalListen<T>(IEventListener<T>, IEnumerable<Int32>) Adds an event listener for local events. Note that listener will be added regardless of whether local node is in this cluster group or not. Declaration void LocalListen<T>(IEventListener<T> listener, IEnumerable<int> types)where T : IEvent Parameters Type Name Description IEventListener <T> listener Predicate that is called on each received event. If predicate returns false, it will be unregistered and will stop receiving events. System.Collections.Generic.IEnumerable < System.Int32 > types Event types for which this listener will be notified, should not be empty. Type Parameters Name Description T Type of events. LocalListen<T>(IEventListener<T>, Int32[]) Adds an event listener for local events. Note that listener will be added regardless of whether local node is in this cluster group or not. Declaration void LocalListen<T>(IEventListener<T> listener, params int[] types)where T : IEvent Parameters Type Name Description IEventListener <T> listener Predicate that is called on each received event. If predicate returns false, it will be unregistered and will stop receiving events. System.Int32 [] types Event types for which this listener will be notified, should not be empty. Type Parameters Name Description T Type of events. LocalQuery(IEnumerable<Int32>) Queries local node for events using of specified types. Declaration ICollection<IEvent> LocalQuery(IEnumerable<int> types) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Int32 > types Event types to be queried. Optional. Returns Type Description System.Collections.Generic.ICollection < IEvent > Collection of Ignite events found on local node. LocalQuery(Int32[]) Queries local node for events using of specified types. Declaration ICollection<IEvent> LocalQuery(params int[] types) Parameters Type Name Description System.Int32 [] types Event types to be queried. Optional. Returns Type Description System.Collections.Generic.ICollection < IEvent > Collection of Ignite events found on local node. RecordLocal(IEvent) Records customer user generated event. All registered local listeners will be notified. NOTE: all types in range from 1 to 1000 are reserved for internal Ignite events and should not be used by user-defined events. Attempt to record internal event with this method will cause System.ArgumentException to be thrown. Declaration void RecordLocal(IEvent evt) Parameters Type Name Description IEvent evt Locally generated event. Exceptions Type Condition System.ArgumentException If event type is within Ignite reserved range (1 to 1000) RemoteQuery<T>(IEventFilter<T>, Nullable<TimeSpan>, IEnumerable<Int32>) Queries nodes in this cluster group for events using passed in predicate filter for event selection. Declaration ICollection<T> RemoteQuery<T>(IEventFilter<T> filter, TimeSpan? timeout = default (TimeSpan? ), IEnumerable<int> types = null)where T : IEvent Parameters Type Name Description IEventFilter <T> filter Predicate filter used to query events on remote nodes. System.Nullable < System.TimeSpan > timeout Maximum time to wait for result, null or 0 to wait forever. System.Collections.Generic.IEnumerable < System.Int32 > types Event types to be queried. Returns Type Description System.Collections.Generic.ICollection <T> Collection of Ignite events returned from specified nodes. Type Parameters Name Description T Type of events. RemoteQuery<T>(IEventFilter<T>, Nullable<TimeSpan>, Int32[]) Queries nodes in this cluster group for events using passed in predicate filter for event selection. Declaration ICollection<T> RemoteQuery<T>(IEventFilter<T> filter, TimeSpan? timeout = default (TimeSpan? ), params int[] types)where T : IEvent Parameters Type Name Description IEventFilter <T> filter Predicate filter used to query events on remote nodes. System.Nullable < System.TimeSpan > timeout Maximum time to wait for result, null or 0 to wait forever. System.Int32 [] types Event types to be queried. Returns Type Description System.Collections.Generic.ICollection <T> Collection of Ignite events returned from specified nodes. Type Parameters Name Description T Type of events. RemoteQueryAsync<T>(IEventFilter<T>, Nullable<TimeSpan>, IEnumerable<Int32>) Queries nodes in this cluster group for events using passed in predicate filter for event selection. Declaration Task<ICollection<T>> RemoteQueryAsync<T>(IEventFilter<T> filter, TimeSpan? timeout = default (TimeSpan? ), IEnumerable<int> types = null)where T : IEvent Parameters Type Name Description IEventFilter <T> filter Predicate filter used to query events on remote nodes. System.Nullable < System.TimeSpan > timeout Maximum time to wait for result, null or 0 to wait forever. System.Collections.Generic.IEnumerable < System.Int32 > types Event types to be queried. Returns Type Description System.Threading.Tasks.Task < System.Collections.Generic.ICollection <T>> Collection of Ignite events returned from specified nodes. Type Parameters Name Description T Type of events. RemoteQueryAsync<T>(IEventFilter<T>, Nullable<TimeSpan>, Int32[]) Queries nodes in this cluster group for events using passed in predicate filter for event selection. Declaration Task<ICollection<T>> RemoteQueryAsync<T>(IEventFilter<T> filter, TimeSpan? timeout = default (TimeSpan? ), params int[] types)where T : IEvent Parameters Type Name Description IEventFilter <T> filter Predicate filter used to query events on remote nodes. System.Nullable < System.TimeSpan > timeout Maximum time to wait for result, null or 0 to wait forever. System.Int32 [] types Event types to be queried. Returns Type Description System.Threading.Tasks.Task < System.Collections.Generic.ICollection <T>> Collection of Ignite events returned from specified nodes. Type Parameters Name Description T Type of events. StopLocalListen<T>(IEventListener<T>, IEnumerable<Int32>) Removes local event listener. Declaration bool StopLocalListen<T>(IEventListener<T> listener, IEnumerable<int> types)where T : IEvent Parameters Type Name Description IEventListener <T> listener Local event listener to remove. System.Collections.Generic.IEnumerable < System.Int32 > types Types of events for which to remove listener. If not specified, then listener will be removed for all types it was registered for. Returns Type Description System.Boolean True if listener was removed, false otherwise. Type Parameters Name Description T Type of events. StopLocalListen<T>(IEventListener<T>, Int32[]) Removes local event listener. Declaration bool StopLocalListen<T>(IEventListener<T> listener, params int[] types)where T : IEvent Parameters Type Name Description IEventListener <T> listener Local event listener to remove. System.Int32 [] types Types of events for which to remove listener. If not specified, then listener will be removed for all types it was registered for. Returns Type Description System.Boolean True if listener was removed, false otherwise. Type Parameters Name Description T Type of events. WaitForLocal(IEnumerable<Int32>) Waits for the specified events. Declaration IEvent WaitForLocal(IEnumerable<int> types) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Int32 > types Types of the events to wait for. If not provided, all events will be passed to the filter. Returns Type Description IEvent Ignite event. WaitForLocal(Int32[]) Waits for the specified events. Declaration IEvent WaitForLocal(params int[] types) Parameters Type Name Description System.Int32 [] types Types of the events to wait for. If not provided, all events will be passed to the filter. Returns Type Description IEvent Ignite event. WaitForLocal<T>(IEventFilter<T>, IEnumerable<Int32>) Waits for the specified events. Declaration T WaitForLocal<T>(IEventFilter<T> filter, IEnumerable<int> types)where T : IEvent Parameters Type Name Description IEventFilter <T> filter Optional filtering predicate. Event wait will end as soon as it returns false. System.Collections.Generic.IEnumerable < System.Int32 > types Types of the events to wait for. If not provided, all events will be passed to the filter. Returns Type Description T Ignite event. Type Parameters Name Description T Type of events. WaitForLocal<T>(IEventFilter<T>, Int32[]) Waits for the specified events. Declaration T WaitForLocal<T>(IEventFilter<T> filter, params int[] types)where T : IEvent Parameters Type Name Description IEventFilter <T> filter Optional filtering predicate. Event wait will end as soon as it returns false. System.Int32 [] types Types of the events to wait for. If not provided, all events will be passed to the filter. Returns Type Description T Ignite event. Type Parameters Name Description T Type of events. WaitForLocalAsync(IEnumerable<Int32>) Waits for the specified events. Declaration Task<IEvent> WaitForLocalAsync(IEnumerable<int> types) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Int32 > types Types of the events to wait for. If not provided, all events will be passed to the filter. Returns Type Description System.Threading.Tasks.Task < IEvent > Ignite event. WaitForLocalAsync(Int32[]) Waits for the specified events. Declaration Task<IEvent> WaitForLocalAsync(params int[] types) Parameters Type Name Description System.Int32 [] types Types of the events to wait for. If not provided, all events will be passed to the filter. Returns Type Description System.Threading.Tasks.Task < IEvent > Ignite event. WaitForLocalAsync<T>(IEventFilter<T>, IEnumerable<Int32>) Waits for the specified events. Declaration Task<T> WaitForLocalAsync<T>(IEventFilter<T> filter, IEnumerable<int> types)where T : IEvent Parameters Type Name Description IEventFilter <T> filter Optional filtering predicate. Event wait will end as soon as it returns false. System.Collections.Generic.IEnumerable < System.Int32 > types Types of the events to wait for. If not provided, all events will be passed to the filter. Returns Type Description System.Threading.Tasks.Task <T> Ignite event. Type Parameters Name Description T Type of events. WaitForLocalAsync<T>(IEventFilter<T>, Int32[]) Waits for the specified events. Declaration Task<T> WaitForLocalAsync<T>(IEventFilter<T> filter, params int[] types)where T : IEvent Parameters Type Name Description IEventFilter <T> filter Optional filtering predicate. Event wait will end as soon as it returns false. System.Int32 [] types Types of the events to wait for. If not provided, all events will be passed to the filter. Returns Type Description System.Threading.Tasks.Task <T> Ignite event. Type Parameters Name Description T Type of events."
  },
  "api/Apache.Ignite.Core.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.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.Core.Services.ServiceDeploymentException.html": {
    "href": "api/Apache.Ignite.Core.Services.ServiceDeploymentException.html",
    "title": "Class ServiceDeploymentException | Apache Ignite.NET",
    "keywords": "Class ServiceDeploymentException Indicates an error during Grid Services deployment. Inheritance System.Object System.Exception IgniteException ServiceDeploymentException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Services Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class ServiceDeploymentException : IgniteException, ISerializable, _Exception Constructors ServiceDeploymentException() Initializes a new instance of the ServiceDeploymentException class. Declaration public ServiceDeploymentException() ServiceDeploymentException(SerializationInfo, StreamingContext) Initializes a new instance of the IgniteException class. Declaration protected ServiceDeploymentException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. ServiceDeploymentException(String) Initializes a new instance of the ServiceDeploymentException class. Declaration public ServiceDeploymentException(string message) Parameters Type Name Description System.String message The message that describes the error. ServiceDeploymentException(String, IBinaryObject, ICollection<ServiceConfiguration>) Initializes a new instance of the ServiceDeploymentException class. Declaration public ServiceDeploymentException(string message, IBinaryObject binaryCause, ICollection<ServiceConfiguration> failedCfgs) Parameters Type Name Description System.String message The message. IBinaryObject binaryCause The binary cause. System.Collections.Generic.ICollection < ServiceConfiguration > failedCfgs List of failed configurations ServiceDeploymentException(String, Exception) Initializes a new instance of the ServiceDeploymentException class. Declaration public ServiceDeploymentException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. ServiceDeploymentException(String, Exception, ICollection<ServiceConfiguration>) Initializes a new instance of the ServiceDeploymentException class with failed configurations. Declaration public ServiceDeploymentException(string message, Exception cause, ICollection<ServiceConfiguration> failedCfgs) Parameters Type Name Description System.String message The message. System.Exception cause The cause. System.Collections.Generic.ICollection < ServiceConfiguration > failedCfgs List of failed configurations Properties BinaryCause Gets the binary cause. Declaration public IBinaryObject BinaryCause { get; } Property Value Type Description IBinaryObject FailedConfigurations Configurations of services that failed to deploy, could be null Declaration public ICollection<ServiceConfiguration> FailedConfigurations { get; } Property Value Type Description System.Collections.Generic.ICollection < ServiceConfiguration > Methods GetObjectData(SerializationInfo, StreamingContext) When overridden in a derived class, sets the System.Runtime.Serialization.SerializationInfo with information about the exception. Declaration public override void GetObjectData(SerializationInfo info, StreamingContext context) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info The System.Runtime.Serialization.SerializationInfo that holds the serialized object data about the exception being thrown. System.Runtime.Serialization.StreamingContext context The System.Runtime.Serialization.StreamingContext that contains contextual information about the source or destination. Overrides System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Services.ServiceInvocationException.html": {
    "href": "api/Apache.Ignite.Core.Services.ServiceInvocationException.html",
    "title": "Class ServiceInvocationException | Apache Ignite.NET",
    "keywords": "Class ServiceInvocationException Indicates an error during Grid Services invocation. Inheritance System.Object System.Exception IgniteException ServiceInvocationException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Services Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class ServiceInvocationException : IgniteException, ISerializable, _Exception Constructors ServiceInvocationException() Initializes a new instance of the ServiceInvocationException class. Declaration public ServiceInvocationException() ServiceInvocationException(SerializationInfo, StreamingContext) Initializes a new instance of the IgniteException class. Declaration protected ServiceInvocationException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. ServiceInvocationException(String) Initializes a new instance of the ServiceInvocationException class. Declaration public ServiceInvocationException(string message) Parameters Type Name Description System.String message The message that describes the error. ServiceInvocationException(String, IBinaryObject) Initializes a new instance of the ServiceInvocationException class. Declaration public ServiceInvocationException(string message, IBinaryObject binaryCause) Parameters Type Name Description System.String message The message. IBinaryObject binaryCause The binary cause. ServiceInvocationException(String, Exception) Initializes a new instance of the ServiceInvocationException class. Declaration public ServiceInvocationException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. Properties BinaryCause Gets the binary cause. Declaration public IBinaryObject BinaryCause { get; } Property Value Type Description IBinaryObject Methods GetObjectData(SerializationInfo, StreamingContext) When overridden in a derived class, sets the System.Runtime.Serialization.SerializationInfo with information about the exception. Declaration public override void GetObjectData(SerializationInfo info, StreamingContext context) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info The System.Runtime.Serialization.SerializationInfo that holds the serialized object data about the exception being thrown. System.Runtime.Serialization.StreamingContext context The System.Runtime.Serialization.StreamingContext that contains contextual information about the source or destination. Overrides System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Services.html": {
    "href": "api/Apache.Ignite.Core.Services.html",
    "title": "Namespace Apache.Ignite.Core.Services | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Services Classes ServiceConfiguration Service configuration. ServiceDeploymentException Indicates an error during Grid Services deployment. ServiceInvocationException Indicates an error during Grid Services invocation. Interfaces IService Represents Ignite-managed service. IServiceContext Represents service execution context. IServiceDescriptor Service deployment descriptor. IServices Defines functionality to deploy distributed services in the Ignite."
  },
  "api/Apache.Ignite.AspNet.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.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.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.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.Affinity.html": {
    "href": "api/Apache.Ignite.Core.Cache.Affinity.html",
    "title": "Namespace Apache.Ignite.Core.Cache.Affinity | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Cache.Affinity Classes AffinityFunctionBase Base class for predefined affinity functions. AffinityFunctionContext Affinity function context. AffinityKeyMappedAttribute Specifies cache key field to be used to determine a node on which given cache key will be stored. Only one field or property can be marked with this attribute. This attribute is an alternative to AffinityKeyFieldName setting. This attribute has lower priority than AffinityKeyFieldName setting. One of the major use cases for this attribute is the routing of grid computations to the nodes where the data for this computation is cached, the concept otherwise known as Colocation Of Computations And Data. For example, if a Person object is always accessed together with a Company object for which this person is an employee, then for better performance and scalability it makes sense to colocate Person objects together with their Company object when storing them in cache. To achieve that, cache key used to cache Person objects should have a field or property marked with AffinityKeyMappedAttribute attribute, which will provide the value of the company key for which that person works. Structs AffinityKey Optional wrapper for cache keys to provide support for custom affinity mapping. The value returned by Affinity will be used for key-to-node affinity. AffinityTopologyVersion Affinity topology version. Interfaces IAffinityFunction Represents a function that maps cache keys to cluster nodes. Predefined implementations: RendezvousAffinityFunction ."
  },
  "api/Apache.Ignite.Core.Cache.Configuration.CacheAtomicityMode.html": {
    "href": "api/Apache.Ignite.Core.Cache.Configuration.CacheAtomicityMode.html",
    "title": "Enum CacheAtomicityMode | Apache Ignite.NET",
    "keywords": "Enum CacheAtomicityMode Cache atomicity mode. Namespace : Apache.Ignite.Core.Cache.Configuration Assembly : Apache.Ignite.Core.dll Syntax public enum CacheAtomicityMode Fields Name Description Atomic Specifies atomic-only cache behaviour. In this mode distributed transactions and distributed locking are not supported. Disabling transactions and locking allows to achieve much higher performance and throughput ratios. In addition to transactions and locking, one of the main differences to Atomic mode is that bulk writes, such as PutAll(IEnumerable<KeyValuePair<TK, TV>>) and RemoveAll(IEnumerable<TK>) methods, become simple batch operations which can partially fail. In case of partial failure, CachePartialUpdateException will be thrown which will contain a list of keys for which the update failed. It is recommended that bulk writes are used whenever multiple keys need to be inserted or updated in cache, as they reduce number of network trips and provide better performance. Note that even without locking and transactions, Atomic mode still provides full consistency guarantees across all cache nodes. Also note that all data modifications in Atomic mode are guaranteed to be atomic and consistent with writes to the underlying persistent store, if one is configured. Transactional Specifies fully ACID-compliant transactional cache behavior."
  },
  "api/Apache.Ignite.Core.Cache.Configuration.MemoryPolicyConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Cache.Configuration.MemoryPolicyConfiguration.html",
    "title": "Class MemoryPolicyConfiguration | Apache Ignite.NET",
    "keywords": "Class MemoryPolicyConfiguration Defines page memory policy configuration. See MemoryPolicies . Obsolete, use DataRegionConfiguration . Inheritance System.Object MemoryPolicyConfiguration Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Configuration Assembly : Apache.Ignite.Core.dll Syntax [Obsolete(\"Use DataRegionConfiguration.\")] public class MemoryPolicyConfiguration Constructors MemoryPolicyConfiguration() Initializes a new instance of the MemoryPolicyConfiguration class. Declaration public MemoryPolicyConfiguration() Fields DefaultEmptyPagesPoolSize The default empty pages pool size. Declaration public const int DefaultEmptyPagesPoolSize = 100 Field Value Type Description System.Int32 DefaultEvictionThreshold The default eviction threshold. Declaration public const double DefaultEvictionThreshold = 0.9 Field Value Type Description System.Double DefaultInitialSize The default initial size. Declaration public const long DefaultInitialSize = 268435456L Field Value Type Description System.Int64 DefaultMaxSize The default maximum size, equals to 20% of total RAM. Declaration public static readonly long DefaultMaxSize Field Value Type Description System.Int64 DefaultRateTimeInterval The default rate time interval. Declaration public static readonly TimeSpan DefaultRateTimeInterval Field Value Type Description System.TimeSpan DefaultSubIntervals The default sub intervals. Declaration public const int DefaultSubIntervals = 5 Field Value Type Description System.Int32 Properties EmptyPagesPoolSize Gets or sets the minimal number of empty pages to be present in reuse lists for this memory policy. This parameter ensures that Ignite will be able to successfully evict old data entries when the size of (key, value) pair is slightly larger than page size / 2. Increase this parameter if cache can contain very big entries (total size of pages in this pool should be enough to contain largest cache entry). Declaration public int EmptyPagesPoolSize { get; set; } Property Value Type Description System.Int32 EvictionThreshold Gets or sets the threshold for memory pages eviction initiation. For instance, if the threshold is 0.9 it means that the page memory will start the eviction only after 90% of the memory region (defined by this policy) is occupied. Declaration public double EvictionThreshold { get; set; } Property Value Type Description System.Double InitialSize Gets or sets initial memory region size defined by this memory policy. When the used memory size exceeds this value, new chunks of memory will be allocated. Declaration public long InitialSize { get; set; } Property Value Type Description System.Int64 MaxSize Sets maximum memory region size defined by this memory policy. The total size should not be less than 10 MB due to internal data structures overhead. Declaration public long MaxSize { get; set; } Property Value Type Description System.Int64 MetricsEnabled Gets or sets a value indicating whether memory metrics should be enabled. Metrics can be retrieved with GetMemoryMetrics() method. Declaration public bool MetricsEnabled { get; set; } Property Value Type Description System.Boolean Name Gets or sets the memory policy name. Defaults to DefaultDefaultMemoryPolicyName . Declaration public string Name { get; set; } Property Value Type Description System.String PageEvictionMode Gets or sets the page eviction mode. If Disabled is used (default) then an out of memory exception will be thrown if the memory region usage, defined by this memory policy, goes beyond MaxSize . Declaration public DataPageEvictionMode PageEvictionMode { get; set; } Property Value Type Description DataPageEvictionMode RateTimeInterval Gets or sets the rate time interval for AllocationRate and EvictionRate monitoring purposes. For instance, after setting the interval to 60 seconds, subsequent calls to AllocationRate will return average allocation rate (pages per second) for the last minute. Declaration public TimeSpan RateTimeInterval { get; set; } Property Value Type Description System.TimeSpan SubIntervals Gets or sets the number of sub intervals to split RateTimeInterval into to calculate AllocationRate and EvictionRate . Bigger value results in more accurate metrics. Declaration public int SubIntervals { get; set; } Property Value Type Description System.Int32 SwapFilePath Gets or sets the the path to the memory-mapped file the memory region defined by this memory policy will be mapped to. Having the path set, allows relying on swapping capabilities of an underlying operating system for the memory region. Null for no swap. Declaration public string SwapFilePath { get; set; } Property Value Type Description System.String"
  },
  "api/Apache.Ignite.Core.Cache.Configuration.QueryIndexField.html": {
    "href": "api/Apache.Ignite.Core.Cache.Configuration.QueryIndexField.html",
    "title": "Class QueryIndexField | Apache Ignite.NET",
    "keywords": "Class QueryIndexField Represents an indexed field. Inheritance System.Object QueryIndexField Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Configuration Assembly : Apache.Ignite.Core.dll Syntax public class QueryIndexField Constructors QueryIndexField() Initializes a new instance of the QueryIndexField class. Declaration public QueryIndexField() QueryIndexField(String) Initializes a new instance of the QueryIndexField class. Declaration public QueryIndexField(string name) Parameters Type Name Description System.String name The name. QueryIndexField(String, Boolean) Initializes a new instance of the QueryIndexField class. Declaration public QueryIndexField(string name, bool isDescending) Parameters Type Name Description System.String name The name. System.Boolean isDescending Sort direction. Properties IsDescending Gets a value indicating whether this index is descending. Default is false. Declaration public bool IsDescending { get; set; } Property Value Type Description System.Boolean Name Gets the name. Declaration public string Name { get; set; } Property Value Type Description System.String"
  },
  "api/Apache.Ignite.Core.Cache.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.Eviction.FifoEvictionPolicy.html": {
    "href": "api/Apache.Ignite.Core.Cache.Eviction.FifoEvictionPolicy.html",
    "title": "Class FifoEvictionPolicy | Apache Ignite.NET",
    "keywords": "Class FifoEvictionPolicy Eviction policy based on First In First Out (FIFO) algorithm with batch eviction support. The eviction starts in the following cases: The cache size becomes { @code batchSize } elements greater than the maximum size; The size of cache entries in bytes becomes greater than the maximum memory size; The size of cache entry calculates as sum of key size and value size. Note: Batch eviction is enabled only if maximum memory limit isn't set. This implementation is very efficient since it does not create any additional table-like data structures. The FIFO ordering information is maintained by attaching ordering metadata to cache entries. Inheritance System.Object EvictionPolicyBase FifoEvictionPolicy Implements IEvictionPolicy Inherited Members EvictionPolicyBase.DefaultBatchSize EvictionPolicyBase.DefaultMaxSize EvictionPolicyBase.DefaultMaxMemorySize EvictionPolicyBase.BatchSize EvictionPolicyBase.MaxSize EvictionPolicyBase.MaxMemorySize System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Eviction Assembly : Apache.Ignite.Core.dll Syntax public class FifoEvictionPolicy : EvictionPolicyBase, IEvictionPolicy Implements IEvictionPolicy"
  },
  "api/Apache.Ignite.Core.Cache.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.Continuous.ContinuousQuery-2.html": {
    "href": "api/Apache.Ignite.Core.Cache.Query.Continuous.ContinuousQuery-2.html",
    "title": "Class ContinuousQuery<TK, TV> | Apache Ignite.NET",
    "keywords": "Class ContinuousQuery<TK, TV> API for configuring continuous cache queries. Continuous queries allow to register a remote and a listener for cache update events. If an update event passes the filter, it will be sent to the node that executed the query and listener will be notified on that node. Continuous query can either be executed on the whole topology or only on local node. In case query is distributed and a new node joins, it will get the filter for the query during discovery process before it actually joins topology, so no updates will be missed. To execute the query use method QueryContinuous(ContinuousQuery<TK, TV>) . Inheritance System.Object ContinuousQuery ContinuousQuery<TK, TV> Inherited Members ContinuousQuery.DefaultBufferSize ContinuousQuery.DefaultTimeInterval ContinuousQuery.DefaultAutoUnsubscribe System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Query.Continuous Assembly : Apache.Ignite.Core.dll Syntax public class ContinuousQuery<TK, TV> : ContinuousQuery Type Parameters Name Description TK TV Constructors ContinuousQuery(ICacheEntryEventListener<TK, TV>) Constructor. Declaration public ContinuousQuery(ICacheEntryEventListener<TK, TV> lsnr) Parameters Type Name Description ICacheEntryEventListener <TK, TV> lsnr Listener. ContinuousQuery(ICacheEntryEventListener<TK, TV>, ICacheEntryEventFilter<TK, TV>) Constructor. Declaration public ContinuousQuery(ICacheEntryEventListener<TK, TV> lsnr, ICacheEntryEventFilter<TK, TV> filter) Parameters Type Name Description ICacheEntryEventListener <TK, TV> lsnr Listener. ICacheEntryEventFilter <TK, TV> filter Filter. ContinuousQuery(ICacheEntryEventListener<TK, TV>, ICacheEntryEventFilter<TK, TV>, Boolean) Constructor. Declaration public ContinuousQuery(ICacheEntryEventListener<TK, TV> lsnr, ICacheEntryEventFilter<TK, TV> filter, bool loc) Parameters Type Name Description ICacheEntryEventListener <TK, TV> lsnr Listener. ICacheEntryEventFilter <TK, TV> filter Filter. System.Boolean loc Whether query should be executed locally. ContinuousQuery(ICacheEntryEventListener<TK, TV>, Boolean) Constructor. Declaration public ContinuousQuery(ICacheEntryEventListener<TK, TV> lsnr, bool loc) Parameters Type Name Description ICacheEntryEventListener <TK, TV> lsnr Listener. System.Boolean loc Whether query should be executed locally. Properties AutoUnsubscribe Automatic unsubscribe flag. This flag indicates that query filters on remote nodes should be automatically unregistered if master node (node that initiated the query) leaves topology. If this flag is false , filters will be unregistered only when the query is cancelled from master node, and won't ever be unregistered if master node leaves grid. Defaults to true . Declaration public bool AutoUnsubscribe { get; set; } Property Value Type Description System.Boolean BufferSize Buffer size. When a cache update happens, entry is first put into a buffer. Entries from buffer will be sent to the master node only if the buffer is full or time provided via TimeInterval is exceeded. Defaults to DefaultBufferSize Declaration public int BufferSize { get; set; } Property Value Type Description System.Int32 Filter Optional cache entry filter. Invoked on a node where cache event occurred. If filter returns false , then cache entry event will not be sent to a node where continuous query has been started. Must be either binary or serializable in case query is not local. Declaration public ICacheEntryEventFilter<TK, TV> Filter { get; set; } Property Value Type Description ICacheEntryEventFilter <TK, TV> Listener Cache entry event listener. Invoked on the node where continuous query execution has been started. Declaration public ICacheEntryEventListener<TK, TV> Listener { get; set; } Property Value Type Description ICacheEntryEventListener <TK, TV> Local Local flag. When set query will be executed only on local node, so only local entries will be returned as query result. Defaults to false . Declaration public bool Local { get; set; } Property Value Type Description System.Boolean TimeInterval Time interval. When a cache update happens, entry is first put into a buffer. Entries from buffer will be sent to the master node only if the buffer is full (its size can be provided via BufferSize property) or time provided via this method is exceeded. Defaults to 0 which means that time check is disabled and entries will be sent only when buffer is full. Declaration public TimeSpan TimeInterval { get; set; } Property Value Type Description System.TimeSpan"
  },
  "api/Apache.Ignite.Core.Cache.Store.CacheParallelLoadStoreAdapter-3.html": {
    "href": "api/Apache.Ignite.Core.Cache.Store.CacheParallelLoadStoreAdapter-3.html",
    "title": "Class CacheParallelLoadStoreAdapter<TK, TV, TData> | Apache Ignite.NET",
    "keywords": "Class CacheParallelLoadStoreAdapter<TK, TV, TData> Cache storage adapter with parallel loading in LoadAll method. Inheritance System.Object CacheParallelLoadStoreAdapter<TK, TV, TData> Implements ICacheStore <TK, TV> ICacheStore Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Store Assembly : Apache.Ignite.Core.dll Syntax public abstract class CacheParallelLoadStoreAdapter<TK, TV, TData> : ICacheStore<TK, TV>, ICacheStore Type Parameters Name Description TK Key type. TV Value type. TData Custom data entry type. Remarks LoadCache calls GetInputData() and iterates over it in parallel. GetInputData().GetEnumerator() result will be disposed if it implements IDisposable. Any additional post-LoadCache steps can be performed by overriding LoadCache method. Constructors CacheParallelLoadStoreAdapter() Constructor. Declaration protected CacheParallelLoadStoreAdapter() Properties MaxDegreeOfParallelism Gets or sets the maximum degree of parallelism to use in LoadCache. Must be either positive or -1 for unlimited amount of threads. Defaults to System.Environment.ProcessorCount . Declaration public int MaxDegreeOfParallelism { get; set; } Property Value Type Description System.Int32 Methods Delete(TK) Delete the cache entry from the external resource. Expiry of a cache entry is not a delete hence will not cause this method to be invoked. This method is invoked even if no mapping for the key exists. Declaration public virtual void Delete(TK key) Parameters Type Name Description TK key The key that is used for the delete operation. DeleteAll(IEnumerable<TK>) Remove data and keys from the external resource for the given collection of keys, if present. The order that individual deletes occur is undefined. If this operation fails (by throwing an exception) after a partial success, the writer must remove any successfully written entries from the entries collection so that the caching implementation knows what succeeded and can mutate the cache. Expiry of a cache entry is not a delete hence will not cause this method to be invoked. This method may include keys even if there is no mapping for that key, in which case the data represented by that key should be removed from the underlying resource. Declaration public virtual void DeleteAll(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys a mutable collection of keys for entries to delete. Upon invocation, it contains the keys to delete for write-through. Upon return the collection must only contain the keys that were not successfully deleted. GetInputData() Gets the input data sequence to be used in LoadCache. Declaration protected abstract IEnumerable<TData> GetInputData() Returns Type Description System.Collections.Generic.IEnumerable <TData> Load(TK) Loads an object. Application developers should implement this method to customize the loading of a value for a cache entry. This method is called by a cache when a requested entry is not in the cache. If the object can't be loaded null should be returned. Declaration public virtual TV Load(TK key) Parameters Type Name Description TK key The key identifying the object being loaded. Returns Type Description TV The value for the entry that is to be stored in the cache or null if the object can't be loaded LoadAll(IEnumerable<TK>) Loads multiple objects. Application developers should implement this method to customize the loading of cache entries. This method is called when the requested object is not in the cache. If an object can't be loaded, it is not returned in the resulting map. Declaration public virtual IEnumerable<KeyValuePair<TK, TV>> LoadAll(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys identifying the values to be loaded. Returns Type Description System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair <TK, TV>> A map of key, values to be stored in the cache. LoadCache(Action<TK, TV>, Object[]) Loads all values from underlying persistent storage. Note that keys are not passed, so it is up to implementation to figure out what to load. This method is called whenever LocalLoadCache(ICacheEntryFilter<TK, TV>, Object[]) method is invoked which is usually to preload the cache from persistent storage. This method is optional, and cache implementation does not depend on this method to do anything. For every loaded value method provided action should be called. The action will then make sure that the loaded value is stored in cache. Declaration public virtual void LoadCache(Action<TK, TV> act, params object[] args) Parameters Type Name Description System.Action <TK, TV> act Action for loaded values. System.Object [] args Optional arguemnts passed to LocalLoadCache(ICacheEntryFilter<TK, TV>, Object[]) method. Exceptions Type Condition CacheStoreException Parse(TData, Object[]) This method should transform raw data records from GetInputData into valid key-value pairs to be stored into cache. Declaration protected abstract KeyValuePair<TK, TV>? Parse(TData inputRecord, params object[] args) Parameters Type Name Description TData inputRecord System.Object [] args Returns Type Description System.Nullable < System.Collections.Generic.KeyValuePair <TK, TV>> SessionEnd(Boolean) Tells store to commit or rollback a transaction depending on the value of the commit parameter. Declaration public virtual void SessionEnd(bool commit) Parameters Type Name Description System.Boolean commit True if transaction should commit, false for rollback. Write(TK, TV) Write the specified value under the specified key to the external resource. This method is intended to support both key/value creation and value update. Declaration public virtual void Write(TK key, TV val) Parameters Type Name Description TK key Key to write. TV val Value to write. WriteAll(IEnumerable<KeyValuePair<TK, TV>>) Write the specified entries to the external resource. This method is intended to support both insert and update. The order that individual writes occur is undefined. If this operation fails (by throwing an exception) after a partial success, the writer must remove any successfully written entries from the entries collection so that the caching implementation knows what succeeded and can mutate the cache. Declaration public virtual void WriteAll(IEnumerable<KeyValuePair<TK, TV>> entries) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair <TK, TV>> entries a mutable collection to write. Upon invocation, it contains the entries to write for write-through. Upon return the collection must only contain entries that were not successfully written. (see partial success above). Implements ICacheStore<TK, TV> ICacheStore"
  },
  "api/Apache.Ignite.Core.Cache.Store.CacheStoreAdapter-2.html": {
    "href": "api/Apache.Ignite.Core.Cache.Store.CacheStoreAdapter-2.html",
    "title": "Class CacheStoreAdapter<TK, TV> | Apache Ignite.NET",
    "keywords": "Class CacheStoreAdapter<TK, TV> Cache storage convenience adapter. It provides default implementation for bulk operations, such as LoadAll , PutAll and RemoveAll by sequentially calling corresponding Load , Put and Remove operations. Use this adapter whenever such behaviour is acceptable. However in many cases it maybe more preferable to take advantage of database batch update functionality, and therefore default adapter implementation may not be the best option. Note that LoadCache method has empty implementation because it is essentially up to the user to invoke it with specific arguments. Inheritance System.Object CacheStoreAdapter<TK, TV> Implements ICacheStore <TK, TV> ICacheStore Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Store Assembly : Apache.Ignite.Core.dll Syntax public abstract class CacheStoreAdapter<TK, TV> : ICacheStore<TK, TV>, ICacheStore Type Parameters Name Description TK Key type. TV Value type. Methods Delete(TK) Delete the cache entry from the external resource. Expiry of a cache entry is not a delete hence will not cause this method to be invoked. This method is invoked even if no mapping for the key exists. Declaration public abstract void Delete(TK key) Parameters Type Name Description TK key The key that is used for the delete operation. DeleteAll(IEnumerable<TK>) Remove data and keys from the external resource for the given collection of keys, if present. The order that individual deletes occur is undefined. If this operation fails (by throwing an exception) after a partial success, the writer must remove any successfully written entries from the entries collection so that the caching implementation knows what succeeded and can mutate the cache. Expiry of a cache entry is not a delete hence will not cause this method to be invoked. This method may include keys even if there is no mapping for that key, in which case the data represented by that key should be removed from the underlying resource. Declaration public virtual void DeleteAll(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys a mutable collection of keys for entries to delete. Upon invocation, it contains the keys to delete for write-through. Upon return the collection must only contain the keys that were not successfully deleted. Load(TK) Loads an object. Application developers should implement this method to customize the loading of a value for a cache entry. This method is called by a cache when a requested entry is not in the cache. If the object can't be loaded null should be returned. Declaration public abstract TV Load(TK key) Parameters Type Name Description TK key The key identifying the object being loaded. Returns Type Description TV The value for the entry that is to be stored in the cache or null if the object can't be loaded LoadAll(IEnumerable<TK>) Loads multiple objects. Application developers should implement this method to customize the loading of cache entries. This method is called when the requested object is not in the cache. If an object can't be loaded, it is not returned in the resulting map. Declaration public virtual IEnumerable<KeyValuePair<TK, TV>> LoadAll(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys identifying the values to be loaded. Returns Type Description System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair <TK, TV>> A map of key, values to be stored in the cache. LoadCache(Action<TK, TV>, Object[]) Loads all values from underlying persistent storage. Note that keys are not passed, so it is up to implementation to figure out what to load. This method is called whenever LocalLoadCache(ICacheEntryFilter<TK, TV>, Object[]) method is invoked which is usually to preload the cache from persistent storage. This method is optional, and cache implementation does not depend on this method to do anything. For every loaded value method provided action should be called. The action will then make sure that the loaded value is stored in cache. Declaration public virtual void LoadCache(Action<TK, TV> act, params object[] args) Parameters Type Name Description System.Action <TK, TV> act Action for loaded values. System.Object [] args Optional arguemnts passed to LocalLoadCache(ICacheEntryFilter<TK, TV>, Object[]) method. SessionEnd(Boolean) Tells store to commit or rollback a transaction depending on the value of the commit parameter. Declaration public virtual void SessionEnd(bool commit) Parameters Type Name Description System.Boolean commit True if transaction should commit, false for rollback. Write(TK, TV) Write the specified value under the specified key to the external resource. This method is intended to support both key/value creation and value update. Declaration public abstract void Write(TK key, TV val) Parameters Type Name Description TK key Key to write. TV val Value to write. WriteAll(IEnumerable<KeyValuePair<TK, TV>>) Writes all. Declaration public virtual void WriteAll(IEnumerable<KeyValuePair<TK, TV>> entries) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair <TK, TV>> entries The map. Implements ICacheStore<TK, TV> ICacheStore"
  },
  "api/Apache.Ignite.Core.Client.Cache.CacheClientConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Client.Cache.CacheClientConfiguration.html",
    "title": "Class CacheClientConfiguration | Apache Ignite.NET",
    "keywords": "Class CacheClientConfiguration Ignite client cache configuration. Same thing as CacheConfiguration , but with a subset of properties that can be accessed from Ignite thin client (see IIgniteClient ). Note that caches created from server nodes can be accessed from thin client, and vice versa. The only difference is that thin client can not read or write certain CacheConfiguration properties, so a separate class exists to make it clear which properties can be used. Inheritance System.Object CacheClientConfiguration Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Client.Cache Assembly : Apache.Ignite.Core.dll Syntax public class CacheClientConfiguration Constructors CacheClientConfiguration() Initializes a new instance of the CacheConfiguration class. Declaration public CacheClientConfiguration() CacheClientConfiguration(CacheConfiguration, Boolean) Initializes a new instance of the CacheClientConfiguration class, copying properties from provided server cache configuration. See also ToCacheConfiguration() . Declaration public CacheClientConfiguration(CacheConfiguration cacheConfiguration, bool ignoreUnsupportedProperties) Parameters Type Name Description CacheConfiguration cacheConfiguration Server cache configuration. System.Boolean ignoreUnsupportedProperties If set to true , ignores unsupported properties instead of throwing an exception. CacheClientConfiguration(CacheClientConfiguration) Initializes a new instance of the CacheConfiguration class, performing a deep copy of specified cache configuration. Declaration public CacheClientConfiguration(CacheClientConfiguration other) Parameters Type Name Description CacheClientConfiguration other The other configuration to perfrom deep copy from. CacheClientConfiguration(String) Initializes a new instance of the CacheConfiguration class. Declaration public CacheClientConfiguration(string name) Parameters Type Name Description System.String name Cache name. CacheClientConfiguration(String, QueryEntity[]) Initializes a new instance of the CacheConfiguration class. Declaration public CacheClientConfiguration(string name, params QueryEntity[] queryEntities) Parameters Type Name Description System.String name Cache name. QueryEntity [] queryEntities Query entities. CacheClientConfiguration(String, Type[]) Initializes a new instance of the CacheConfiguration class and populates QueryEntities according to provided query types. Declaration public CacheClientConfiguration(string name, params Type[] queryTypes) Parameters Type Name Description System.String name Cache name. System.Type [] queryTypes Collection of types to be registered as query entities. These types should use QuerySqlFieldAttribute to configure query fields and properties. Properties AtomicityMode Gets or sets cache atomicity mode. Declaration public CacheAtomicityMode AtomicityMode { get; set; } Property Value Type Description CacheAtomicityMode Backups Gets or sets number of nodes used to back up single partition for Partitioned cache. Declaration public int Backups { get; set; } Property Value Type Description System.Int32 CacheMode Gets or sets caching mode to use. Declaration public CacheMode CacheMode { get; set; } Property Value Type Description CacheMode CopyOnRead Gets or sets flag indicating whether copy of the value stored in cache should be created for cache operation implying return value. Declaration public bool CopyOnRead { get; set; } Property Value Type Description System.Boolean DataRegionName Gets or sets the name of the data region, see DataRegionConfiguration . Declaration public string DataRegionName { get; set; } Property Value Type Description System.String EagerTtl Gets or sets flag indicating whether expired cache entries will be eagerly removed from cache. When set to false, expired entries will be removed on next entry access. Declaration public bool EagerTtl { get; set; } Property Value Type Description System.Boolean EnableStatistics Gets or sets a value indicating whether statistics gathering is enabled on a cache. These statistics can be retrieved via GetMetrics() . Declaration public bool EnableStatistics { get; set; } Property Value Type Description System.Boolean GroupName Gets or sets the cache group name. Caches with the same group name share single underlying 'physical' cache (partition set), but are logically isolated. Since underlying cache is shared, the following configuration properties should be the same within group: CacheMode , PartitionLossPolicy , DataRegionName . Grouping caches reduces overall overhead, since internal data structures are shared. Declaration public string GroupName { get; set; } Property Value Type Description System.String KeyConfiguration Gets or sets the key configuration. Declaration public ICollection<CacheKeyConfiguration> KeyConfiguration { get; set; } Property Value Type Description System.Collections.Generic.ICollection < CacheKeyConfiguration > LockTimeout Gets or sets default lock acquisition timeout. Declaration public TimeSpan LockTimeout { get; set; } Property Value Type Description System.TimeSpan MaxConcurrentAsyncOperations Gets or sets maximum number of allowed concurrent asynchronous operations, 0 for unlimited. Declaration public int MaxConcurrentAsyncOperations { get; set; } Property Value Type Description System.Int32 MaxQueryIteratorsCount Gets or sets the maximum number of active query iterators. Declaration public int MaxQueryIteratorsCount { get; set; } Property Value Type Description System.Int32 Name Gets or sets the cache name. Declaration public string Name { get; set; } Property Value Type Description System.String OnheapCacheEnabled Gets or sets a value indicating whether on-heap cache is enabled for the off-heap based page memory. Declaration public bool OnheapCacheEnabled { get; set; } Property Value Type Description System.Boolean PartitionLossPolicy Gets or sets the partition loss policy. This policy defines how Ignite will react to a situation when all nodes for some partition leave the cluster. Declaration public PartitionLossPolicy PartitionLossPolicy { get; set; } Property Value Type Description PartitionLossPolicy QueryDetailMetricsSize Gets or sets the size of the query detail metrics to be stored in memory. 0 means disabled metrics. Declaration public int QueryDetailMetricsSize { get; set; } Property Value Type Description System.Int32 QueryEntities Gets or sets the query entity configuration. Declaration public ICollection<QueryEntity> QueryEntities { get; set; } Property Value Type Description System.Collections.Generic.ICollection < QueryEntity > QueryParallelism Gets or sets the desired query parallelism within a single node. Query executor may or may not use this hint, depending on estimated query cost. Default is DefaultQueryParallelism . Declaration public int QueryParallelism { get; set; } Property Value Type Description System.Int32 ReadFromBackup Gets or sets flag indicating whether data can be read from backup. Declaration public bool ReadFromBackup { get; set; } Property Value Type Description System.Boolean RebalanceBatchesPrefetchCount Gets or sets the rebalance batches prefetch count. Source node can provide more than one batch at rebalance start to improve performance. Default is DefaultRebalanceBatchesPrefetchCount , minimum is 2. Declaration public long RebalanceBatchesPrefetchCount { get; set; } Property Value Type Description System.Int64 RebalanceBatchSize Gets or sets size (in number bytes) to be loaded within a single rebalance message. Rebalancing algorithm will split total data set on every node into multiple batches prior to sending data. Declaration public int RebalanceBatchSize { get; set; } Property Value Type Description System.Int32 RebalanceDelay Gets or sets delay upon a node joining or leaving topology (or crash) after which rebalancing should be started automatically. Rebalancing should be delayed if you plan to restart nodes after they leave topology, or if you plan to start multiple nodes at once or one after another and don't want to repartition and rebalance until all nodes are started. Declaration public TimeSpan RebalanceDelay { get; set; } Property Value Type Description System.TimeSpan RebalanceMode Gets or sets cache rebalance mode. Declaration public CacheRebalanceMode RebalanceMode { get; set; } Property Value Type Description CacheRebalanceMode RebalanceOrder Gets or sets the cache rebalance order. Caches with bigger RebalanceOrder are rebalanced later than caches with smaller RebalanceOrder. Default is 0, which means unordered rebalance. All caches with RebalanceOrder=0 are rebalanced without any delay concurrently. This parameter is applicable only for caches with RebalanceMode of Sync and Async . Declaration public int RebalanceOrder { get; set; } Property Value Type Description System.Int32 RebalanceThrottle Time to wait between rebalance messages to avoid overloading of CPU or network. When rebalancing large data sets, the CPU or network can get over-consumed with rebalancing messages, which consecutively may slow down the application performance. This parameter helps tune the amount of time to wait between rebalance messages to make sure that rebalancing process does not have any negative performance impact. Note that application will continue to work properly while rebalancing is still in progress. Value of 0 means that throttling is disabled. Declaration public TimeSpan RebalanceThrottle { get; set; } Property Value Type Description System.TimeSpan RebalanceTimeout Gets or sets rebalance timeout. Declaration public TimeSpan RebalanceTimeout { get; set; } Property Value Type Description System.TimeSpan SqlEscapeAll If true all the SQL table and field names will be escaped with double quotes like ({ \"tableName\".\"fieldsName\"}). This enforces case sensitivity for field names and also allows having special characters in table and field names. Declaration public bool SqlEscapeAll { get; set; } Property Value Type Description System.Boolean SqlIndexMaxInlineSize Gets or sets maximum inline size in bytes for sql indexes. See also InlineSize . -1 for automatic. Declaration public int SqlIndexMaxInlineSize { get; set; } Property Value Type Description System.Int32 SqlSchema Gets or sets the SQL schema. Non-quoted identifiers are not case sensitive. Quoted identifiers are case sensitive. Quoted Name is used by default. Declaration public string SqlSchema { get; set; } Property Value Type Description System.String WriteSynchronizationMode Gets or sets write synchronization mode. This mode controls whether the main caller should wait for update on other nodes to complete or not. Declaration public CacheWriteSynchronizationMode WriteSynchronizationMode { get; set; } Property Value Type Description CacheWriteSynchronizationMode Methods ToCacheConfiguration() Converts this instance to full CacheConfiguration . Declaration public CacheConfiguration ToCacheConfiguration() Returns Type Description CacheConfiguration"
  },
  "api/Apache.Ignite.Core.Client.Cache.ICacheClient-2.html": {
    "href": "api/Apache.Ignite.Core.Client.Cache.ICacheClient-2.html",
    "title": "Interface ICacheClient<TK, TV> | Apache Ignite.NET",
    "keywords": "Interface ICacheClient<TK, TV> Client cache API. See GetCache<TK, TV>(String) . Namespace : Apache.Ignite.Core.Client.Cache Assembly : Apache.Ignite.Core.dll Syntax public interface ICacheClient<TK, TV> Type Parameters Name Description TK TV Properties Item[TK] Gets or sets a cache value with the specified key. Shortcut to Get(TK) and Put(TK, TV) Declaration TV this[TK key] { get; set; } Parameters Type Name Description TK key Key. Property Value Type Description TV Cache value with the specified key. Exceptions Type Condition System.Collections.Generic.KeyNotFoundException If the key is not present in the cache. Name Name of this cache ( null for default cache). Declaration string Name { get; } Property Value Type Description System.String Methods Clear() Clears the contents of the cache, without notifying listeners or CacheWriters. Declaration void Clear() Clear(TK) Clear entry from the cache, without notifying listeners or CacheWriters. Declaration void Clear(TK key) Parameters Type Name Description TK key Key to clear. ClearAll(IEnumerable<TK>) Clear entries from the cache, without notifying listeners or CacheWriters. Declaration void ClearAll(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys to clear. ClearAllAsync(IEnumerable<TK>) Clear entries from the cache, without notifying listeners or CacheWriters. Declaration Task ClearAllAsync(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys to clear. Returns Type Description System.Threading.Tasks.Task ClearAsync() Clears the contents of the cache, without notifying listeners or CacheWriters. Declaration Task ClearAsync() Returns Type Description System.Threading.Tasks.Task ClearAsync(TK) Clear entry from the cache, without notifying listeners or CacheWriters. Declaration Task ClearAsync(TK key) Parameters Type Name Description TK key Key to clear. Returns Type Description System.Threading.Tasks.Task ContainsKey(TK) Check if cache contains mapping for this key. Declaration bool ContainsKey(TK key) Parameters Type Name Description TK key Key. Returns Type Description System.Boolean True if cache contains mapping for this key. ContainsKeyAsync(TK) Check if cache contains mapping for this key. Declaration Task<bool> ContainsKeyAsync(TK key) Parameters Type Name Description TK key Key. Returns Type Description System.Threading.Tasks.Task < System.Boolean > True if cache contains mapping for this key. ContainsKeys(IEnumerable<TK>) Check if cache contains mapping for these keys. Declaration bool ContainsKeys(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys. Returns Type Description System.Boolean True if cache contains mapping for all these keys. ContainsKeysAsync(IEnumerable<TK>) Check if cache contains mapping for these keys. Declaration Task<bool> ContainsKeysAsync(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys. Returns Type Description System.Threading.Tasks.Task < System.Boolean > True if cache contains mapping for all these keys. Get(TK) Retrieves value mapped to the specified key from cache. Declaration TV Get(TK key) Parameters Type Name Description TK key Key. Returns Type Description TV Value. Exceptions Type Condition System.Collections.Generic.KeyNotFoundException If the key is not present in the cache. GetAll(IEnumerable<TK>) Retrieves values mapped to the specified keys from cache. Declaration ICollection<ICacheEntry<TK, TV>> GetAll(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys. Returns Type Description System.Collections.Generic.ICollection < ICacheEntry <TK, TV>> Map of key-value pairs. GetAllAsync(IEnumerable<TK>) Retrieves values mapped to the specified keys from cache. Declaration Task<ICollection<ICacheEntry<TK, TV>>> GetAllAsync(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys. Returns Type Description System.Threading.Tasks.Task < System.Collections.Generic.ICollection < ICacheEntry <TK, TV>>> Map of key-value pairs. GetAndPut(TK, TV) Associates the specified value with the specified key in this cache, returning an existing value if one existed. Declaration CacheResult<TV> GetAndPut(TK key, TV val) Parameters Type Name Description TK key Key with which the specified value is to be associated. TV val Value to be associated with the specified key. Returns Type Description CacheResult <TV> The value associated with the key at the start of the operation. GetAndPutAsync(TK, TV) Associates the specified value with the specified key in this cache, returning an existing value if one existed. Declaration Task<CacheResult<TV>> GetAndPutAsync(TK key, TV val) Parameters Type Name Description TK key Key with which the specified value is to be associated. TV val Value to be associated with the specified key. Returns Type Description System.Threading.Tasks.Task < CacheResult <TV>> The value associated with the key at the start of the operation. GetAndPutIfAbsent(TK, TV) Stores given key-value pair in cache only if cache had no previous mapping for it. Declaration CacheResult<TV> GetAndPutIfAbsent(TK key, TV val) Parameters Type Name Description TK key Key to store in cache. TV val Value to be associated with the given key. Returns Type Description CacheResult <TV> Previously contained value regardless of whether put happened or not. GetAndPutIfAbsentAsync(TK, TV) Stores given key-value pair in cache only if cache had no previous mapping for it. Declaration Task<CacheResult<TV>> GetAndPutIfAbsentAsync(TK key, TV val) Parameters Type Name Description TK key Key to store in cache. TV val Value to be associated with the given key. Returns Type Description System.Threading.Tasks.Task < CacheResult <TV>> Previously contained value regardless of whether put happened or not. GetAndRemove(TK) Atomically removes the entry for a key only if currently mapped to some value. Declaration CacheResult<TV> GetAndRemove(TK key) Parameters Type Name Description TK key Key with which the specified value is associated. Returns Type Description CacheResult <TV> The value if one existed. GetAndRemoveAsync(TK) Atomically removes the entry for a key only if currently mapped to some value. Declaration Task<CacheResult<TV>> GetAndRemoveAsync(TK key) Parameters Type Name Description TK key Key with which the specified value is associated. Returns Type Description System.Threading.Tasks.Task < CacheResult <TV>> The value if one existed. GetAndReplace(TK, TV) Atomically replaces the value for a given key if and only if there is a value currently mapped by the key. Declaration CacheResult<TV> GetAndReplace(TK key, TV val) Parameters Type Name Description TK key Key with which the specified value is to be associated. TV val Value to be associated with the specified key. Returns Type Description CacheResult <TV> The previous value associated with the specified key. GetAndReplaceAsync(TK, TV) Atomically replaces the value for a given key if and only if there is a value currently mapped by the key. Declaration Task<CacheResult<TV>> GetAndReplaceAsync(TK key, TV val) Parameters Type Name Description TK key Key with which the specified value is to be associated. TV val Value to be associated with the specified key. Returns Type Description System.Threading.Tasks.Task < CacheResult <TV>> The previous value associated with the specified key. GetAsync(TK) Retrieves value mapped to the specified key from cache. Declaration Task<TV> GetAsync(TK key) Parameters Type Name Description TK key Key. Returns Type Description System.Threading.Tasks.Task <TV> Value. Exceptions Type Condition System.Collections.Generic.KeyNotFoundException If the key is not present in the cache. GetConfiguration() Gets the cache configuration. Declaration CacheClientConfiguration GetConfiguration() Returns Type Description CacheClientConfiguration GetSize(CachePeekMode[]) Gets the number of all entries cached across all nodes. NOTE: this operation is distributed and will query all participating nodes for their cache sizes. Declaration long GetSize(params CachePeekMode[] modes) Parameters Type Name Description CachePeekMode [] modes Optional peek modes. If not provided, then total cache size is returned. Returns Type Description System.Int64 Cache size across all nodes. GetSizeAsync(CachePeekMode[]) Gets the number of all entries cached across all nodes. NOTE: this operation is distributed and will query all participating nodes for their cache sizes. Declaration Task<long> GetSizeAsync(params CachePeekMode[] modes) Parameters Type Name Description CachePeekMode [] modes Optional peek modes. If not provided, then total cache size is returned. Returns Type Description System.Threading.Tasks.Task < System.Int64 > Cache size across all nodes. Put(TK, TV) Associates the specified value with the specified key in the cache. If the cache previously contained a mapping for the key, the old value is replaced by the specified value. Declaration void Put(TK key, TV val) Parameters Type Name Description TK key Key with which the specified value is to be associated. TV val Value to be associated with the specified key. PutAll(IEnumerable<KeyValuePair<TK, TV>>) Stores given key-value pairs in cache. Declaration void PutAll(IEnumerable<KeyValuePair<TK, TV>> vals) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair <TK, TV>> vals Key-value pairs to store in cache. PutAllAsync(IEnumerable<KeyValuePair<TK, TV>>) Stores given key-value pairs in cache. Declaration Task PutAllAsync(IEnumerable<KeyValuePair<TK, TV>> vals) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair <TK, TV>> vals Key-value pairs to store in cache. Returns Type Description System.Threading.Tasks.Task PutAsync(TK, TV) Associates the specified value with the specified key in the cache. If the cache previously contained a mapping for the key, the old value is replaced by the specified value. Declaration Task PutAsync(TK key, TV val) Parameters Type Name Description TK key Key with which the specified value is to be associated. TV val Value to be associated with the specified key. Returns Type Description System.Threading.Tasks.Task PutIfAbsent(TK, TV) Atomically associates the specified key with the given value if it is not already associated with a value. Declaration bool PutIfAbsent(TK key, TV val) Parameters Type Name Description TK key Key with which the specified value is to be associated. TV val Value to be associated with the specified key. Returns Type Description System.Boolean True if a value was set. PutIfAbsentAsync(TK, TV) Atomically associates the specified key with the given value if it is not already associated with a value. Declaration Task<bool> PutIfAbsentAsync(TK key, TV val) Parameters Type Name Description TK key Key with which the specified value is to be associated. TV val Value to be associated with the specified key. Returns Type Description System.Threading.Tasks.Task < System.Boolean > True if a value was set. Query(ScanQuery<TK, TV>) Executes a Scan query. Declaration IQueryCursor<ICacheEntry<TK, TV>> Query(ScanQuery<TK, TV> scanQuery) Parameters Type Name Description ScanQuery <TK, TV> scanQuery Scan query. Returns Type Description IQueryCursor < ICacheEntry <TK, TV>> Query cursor. Query(SqlFieldsQuery) Executes an SQL Fields query. Declaration IFieldsQueryCursor Query(SqlFieldsQuery sqlFieldsQuery) Parameters Type Name Description SqlFieldsQuery sqlFieldsQuery SQL query. Returns Type Description IFieldsQueryCursor Query cursor. Query(SqlQuery) Executes an SQL query. Declaration IQueryCursor<ICacheEntry<TK, TV>> Query(SqlQuery sqlQuery) Parameters Type Name Description SqlQuery sqlQuery SQL query. Returns Type Description IQueryCursor < ICacheEntry <TK, TV>> Query cursor. Remove(TK) Removes given key mapping from cache, notifying listeners and cache writers. Declaration bool Remove(TK key) Parameters Type Name Description TK key Key to remove. Returns Type Description System.Boolean True if entry was removed, false otherwise. Remove(TK, TV) Removes given key mapping from cache if one exists and value is equal to the passed in value. Declaration bool Remove(TK key, TV val) Parameters Type Name Description TK key Key whose mapping is to be removed from cache. TV val Value to match against currently cached value. Returns Type Description System.Boolean True if entry was removed, false otherwise. RemoveAll() Removes all mappings from cache, notifying listeners and cache writers. Declaration void RemoveAll() RemoveAll(IEnumerable<TK>) Removes given key mappings from cache, notifying listeners and cache writers. Declaration void RemoveAll(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys to be removed from cache. RemoveAllAsync() Removes all mappings from cache, notifying listeners and cache writers. Declaration Task RemoveAllAsync() Returns Type Description System.Threading.Tasks.Task RemoveAllAsync(IEnumerable<TK>) Removes given key mappings from cache, notifying listeners and cache writers. Declaration Task RemoveAllAsync(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys to be removed from cache. Returns Type Description System.Threading.Tasks.Task RemoveAsync(TK) Removes given key mapping from cache, notifying listeners and cache writers. Declaration Task<bool> RemoveAsync(TK key) Parameters Type Name Description TK key Key to remove. Returns Type Description System.Threading.Tasks.Task < System.Boolean > True if entry was removed, false otherwise. RemoveAsync(TK, TV) Removes given key mapping from cache if one exists and value is equal to the passed in value. Declaration Task<bool> RemoveAsync(TK key, TV val) Parameters Type Name Description TK key Key whose mapping is to be removed from cache. TV val Value to match against currently cached value. Returns Type Description System.Threading.Tasks.Task < System.Boolean > True if entry was removed, false otherwise. Replace(TK, TV) Stores given key-value pair in cache only if there is a previous mapping for it. Declaration bool Replace(TK key, TV val) Parameters Type Name Description TK key Key to store in cache. TV val Value to be associated with the given key. Returns Type Description System.Boolean True if the value was replaced. Replace(TK, TV, TV) Stores given key-value pair in cache only if only if the previous value is equal to the old value passed as argument. Declaration bool Replace(TK key, TV oldVal, TV newVal) Parameters Type Name Description TK key Key to store in cache. TV oldVal Old value to match. TV newVal Value to be associated with the given key. Returns Type Description System.Boolean True if replace happened, false otherwise. ReplaceAsync(TK, TV) Stores given key-value pair in cache only if there is a previous mapping for it. Declaration Task<bool> ReplaceAsync(TK key, TV val) Parameters Type Name Description TK key Key to store in cache. TV val Value to be associated with the given key. Returns Type Description System.Threading.Tasks.Task < System.Boolean > True if the value was replaced. ReplaceAsync(TK, TV, TV) Stores given key-value pair in cache only if only if the previous value is equal to the old value passed as argument. Declaration Task<bool> ReplaceAsync(TK key, TV oldVal, TV newVal) Parameters Type Name Description TK key Key to store in cache. TV oldVal Old value to match. TV newVal Value to be associated with the given key. Returns Type Description System.Threading.Tasks.Task < System.Boolean > True if replace happened, false otherwise. TryGet(TK, out TV) Retrieves value mapped to the specified key from cache. Declaration bool TryGet(TK key, out TV value) Parameters Type Name Description TK key Key. TV value When this method returns, the value associated with the specified key, if the key is found; otherwise, the default value for the type of the value parameter. This parameter is passed uninitialized. Returns Type Description System.Boolean true if the cache contains an element with the specified key; otherwise, false. TryGetAsync(TK) Retrieves value mapped to the specified key from cache. Declaration Task<CacheResult<TV>> TryGetAsync(TK key) Parameters Type Name Description TK key Key. Returns Type Description System.Threading.Tasks.Task < CacheResult <TV>> CacheResult<T> containing a bool success flag and a value. WithKeepBinary<TK1, TV1>() Gets cache with KeepBinary mode enabled, changing key and/or value types if necessary. You can only change key/value types when transitioning from non-binary to binary cache; Changing type of binary cache is not allowed and will throw an System.InvalidOperationException . Declaration ICacheClient<TK1, TV1> WithKeepBinary<TK1, TV1>() Returns Type Description ICacheClient <TK1, TV1> Cache instance with binary mode enabled. Type Parameters Name Description TK1 Key type in binary mode. TV1 Value type in binary mode. Extension Methods CacheClientLinqExtensions.AsCacheQueryable<TKey, TValue>(ICacheClient<TKey, TValue>) CacheClientLinqExtensions.AsCacheQueryable<TKey, TValue>(ICacheClient<TKey, TValue>, Boolean) CacheClientLinqExtensions.AsCacheQueryable<TKey, TValue>(ICacheClient<TKey, TValue>, Boolean, String) CacheClientLinqExtensions.AsCacheQueryable<TKey, TValue>(ICacheClient<TKey, TValue>, QueryOptions)"
  },
  "api/Apache.Ignite.Core.Cluster.IClusterMetrics.html": {
    "href": "api/Apache.Ignite.Core.Cluster.IClusterMetrics.html",
    "title": "Interface IClusterMetrics | Apache Ignite.NET",
    "keywords": "Interface IClusterMetrics Represents runtime information of a cluster. Apart from obvious statistical value, this information is used for implementation of load balancing, failover, and collision SPIs. For example, collision SPI in combination with fail-over SPI could check if other nodes don't have any active or waiting jobs and fail-over some jobs to those nodes. Node metrics for any node can be accessed via GetMetrics() method. Keep in mind that there will be a certain network delay (usually equal to heartbeat delay) for the accuracy of node metrics. However, when accessing metrics on local node the metrics are always accurate and up to date. Namespace : Apache.Ignite.Core.Cluster Assembly : Apache.Ignite.Core.dll Syntax public interface IClusterMetrics Properties AverageActiveJobs Average number of active jobs. Declaration float AverageActiveJobs { get; } Property Value Type Description System.Single AverageCancelledJobs Average number of cancelled jobs. Declaration float AverageCancelledJobs { get; } Property Value Type Description System.Single AverageCpuLoad Average of CPU load values in [0, 1] range over all metrics kept in the history. Declaration double AverageCpuLoad { get; } Property Value Type Description System.Double AverageJobExecuteTime Average job execution time. Declaration double AverageJobExecuteTime { get; } Property Value Type Description System.Double AverageJobWaitTime Average time jobs spend waiting in the queue to be executed. Declaration double AverageJobWaitTime { get; } Property Value Type Description System.Double AverageRejectedJobs Average number of jobs this node rejects during collision resolution operations. Declaration float AverageRejectedJobs { get; } Property Value Type Description System.Single AverageWaitingJobs Average number of waiting jobs. Declaration float AverageWaitingJobs { get; } Property Value Type Description System.Single BusyTimePercentage Percentage of time this node is busy. Declaration float BusyTimePercentage { get; } Property Value Type Description System.Single CurrentActiveJobs Number of currently active jobs concurrently executing on the node. Declaration int CurrentActiveJobs { get; } Property Value Type Description System.Int32 CurrentCancelledJobs Number of cancelled jobs that are still running. Declaration int CurrentCancelledJobs { get; } Property Value Type Description System.Int32 CurrentCpuLoad Returns the CPU usage usage in [0, 1] range. Declaration double CurrentCpuLoad { get; } Property Value Type Description System.Double CurrentDaemonThreadCount Current number of live daemon threads. Declaration int CurrentDaemonThreadCount { get; } Property Value Type Description System.Int32 CurrentGcCpuLoad Average time spent in CG since the last update. Declaration double CurrentGcCpuLoad { get; } Property Value Type Description System.Double CurrentIdleTime Time this node spend idling since executing last job. Declaration long CurrentIdleTime { get; } Property Value Type Description System.Int64 CurrentJobExecuteTime Longest time a current job has been executing for. Declaration long CurrentJobExecuteTime { get; } Property Value Type Description System.Int64 CurrentJobWaitTime Current time an oldest jobs has spent waiting to be executed. Declaration long CurrentJobWaitTime { get; } Property Value Type Description System.Int64 CurrentRejectedJobs Number of jobs rejected after more recent collision resolution operation. Declaration int CurrentRejectedJobs { get; } Property Value Type Description System.Int32 CurrentThreadCount Current number of live threads. Declaration int CurrentThreadCount { get; } Property Value Type Description System.Int32 CurrentWaitingJobs Number of queued jobs currently waiting to be executed. Declaration int CurrentWaitingJobs { get; } Property Value Type Description System.Int32 HeapMemoryCommitted Amount of heap memory in bytes that is committed for the JVM to use. This amount of memory is guaranteed for the JVM to use. The heap consists of one or more memory pools. This value is the sum of committed heap memory values of all heap memory pools. Declaration long HeapMemoryCommitted { get; } Property Value Type Description System.Int64 HeapMemoryInitialized Amount of heap memory in bytes that the JVM initially requests from the operating system for memory management. This method returns -1 if the initial memory size is undefined. This value represents a setting of the heap memory for Java VM and is not a sum of all initial heap values for all memory pools. Declaration long HeapMemoryInitialized { get; } Property Value Type Description System.Int64 HeapMemoryMaximum Mmaximum amount of heap memory in bytes that can be used for memory management. This method returns -1 if the maximum memory size is undefined. This amount of memory is not guaranteed to be available for memory management if it is greater than the amount of committed memory. The JVM may fail to allocate memory even if the amount of used memory does not exceed this maximum size. This value represents a setting of the heap memory for Java VM and is not a sum of all initial heap values for all memory pools. Declaration long HeapMemoryMaximum { get; } Property Value Type Description System.Int64 HeapMemoryTotal Total amount of heap memory in bytes. This method returns -1 if the total memory size is undefined. This amount of memory is not guaranteed to be available for memory management if it is greater than the amount of committed memory. The JVM may fail to allocate memory even if the amount of used memory does not exceed this maximum size. This value represents a setting of the heap memory for Java VM and is not a sum of all initial heap values for all memory pools. Declaration long HeapMemoryTotal { get; } Property Value Type Description System.Int64 HeapMemoryUsed Current heap size that is used for object allocation. The heap consists of one or more memory pools. This value is the sum of used heap memory values of all heap memory pools. The amount of used memory in the returned is the amount of memory occupied by both live objects and garbage objects that have not been collected, if any. Declaration long HeapMemoryUsed { get; } Property Value Type Description System.Int64 IdleTimePercentage Percentage of time this node is idle Declaration float IdleTimePercentage { get; } Property Value Type Description System.Single LastDataVersion Ignite assigns incremental versions to all cache operations. This property provides the latest data version on the node. Declaration long LastDataVersion { get; } Property Value Type Description System.Int64 LastUpdateTime Last update time of this node metrics. Declaration DateTime LastUpdateTime { get; } Property Value Type Description System.DateTime MaximumActiveJobs Maximum number of jobs that ever ran concurrently on this node. Declaration int MaximumActiveJobs { get; } Property Value Type Description System.Int32 MaximumCancelledJobs Maximum number of cancelled jobs ever had running concurrently. Declaration int MaximumCancelledJobs { get; } Property Value Type Description System.Int32 MaximumJobExecuteTime Time it took to execute the longest job on the node. Declaration long MaximumJobExecuteTime { get; } Property Value Type Description System.Int64 MaximumJobWaitTime Maximum time a job ever spent waiting in a queue to be executed. Declaration long MaximumJobWaitTime { get; } Property Value Type Description System.Int64 MaximumRejectedJobs Maximum number of jobs rejected at once. Declaration int MaximumRejectedJobs { get; } Property Value Type Description System.Int32 MaximumThreadCount The peak live thread count. Declaration int MaximumThreadCount { get; } Property Value Type Description System.Int32 MaximumWaitingJobs Maximum number of waiting jobs. Declaration int MaximumWaitingJobs { get; } Property Value Type Description System.Int32 NodeStartTime Start time of the Ignite node in milliseconds. Declaration DateTime NodeStartTime { get; } Property Value Type Description System.DateTime NonHeapMemoryCommitted Amount of non-heap memory in bytes that is committed for the JVM to use. Declaration long NonHeapMemoryCommitted { get; } Property Value Type Description System.Int64 NonHeapMemoryInitialized Amount of non-heap memory in bytes that the JVM initially requests from the operating system for memory management. Declaration long NonHeapMemoryInitialized { get; } Property Value Type Description System.Int64 NonHeapMemoryMaximum Maximum amount of non-heap memory in bytes that can be used for memory management. Declaration long NonHeapMemoryMaximum { get; } Property Value Type Description System.Int64 NonHeapMemoryTotal Total amount of non-heap memory in bytes that can be used for memory management. Declaration long NonHeapMemoryTotal { get; } Property Value Type Description System.Int64 NonHeapMemoryUsed Current non-heap memory size that is used by Java VM. Declaration long NonHeapMemoryUsed { get; } Property Value Type Description System.Int64 OutboundMessagesQueueSize Outbound messages queue size. Declaration int OutboundMessagesQueueSize { get; } Property Value Type Description System.Int32 ReceivedBytesCount Received bytes count. Declaration long ReceivedBytesCount { get; } Property Value Type Description System.Int64 ReceivedMessagesCount Received messages count. Declaration int ReceivedMessagesCount { get; } Property Value Type Description System.Int32 SentBytesCount Sent bytes count. Declaration long SentBytesCount { get; } Property Value Type Description System.Int64 SentMessagesCount Sent messages count Declaration int SentMessagesCount { get; } Property Value Type Description System.Int32 StartTime Start time of the JVM in milliseconds. Declaration DateTime StartTime { get; } Property Value Type Description System.DateTime TotalBusyTime Total time this node spent executing jobs. Declaration long TotalBusyTime { get; } Property Value Type Description System.Int64 TotalCancelledJobs Total number of cancelled jobs since node startup. Declaration int TotalCancelledJobs { get; } Property Value Type Description System.Int32 TotalCpus Returns the number of CPUs available to the Java Virtual Machine. Declaration int TotalCpus { get; } Property Value Type Description System.Int32 TotalExecutedJobs Total number of jobs handled by the node since node startup. Declaration int TotalExecutedJobs { get; } Property Value Type Description System.Int32 TotalExecutedTasks Total number of jobs handled by the node. Declaration int TotalExecutedTasks { get; } Property Value Type Description System.Int32 TotalIdleTime Total time this node spent idling. Declaration long TotalIdleTime { get; } Property Value Type Description System.Int64 TotalNodes Gets total number of nodes. Declaration int TotalNodes { get; } Property Value Type Description System.Int32 TotalRejectedJobs Total number of jobs this node rejects during collision resolution operations since node startup. Declaration int TotalRejectedJobs { get; } Property Value Type Description System.Int32 TotalStartedThreadCount The total number of threads started. Declaration long TotalStartedThreadCount { get; } Property Value Type Description System.Int64 Uptime Uptime of the JVM in milliseconds. Declaration long Uptime { get; } Property Value Type Description System.Int64"
  },
  "api/Apache.Ignite.Core.Cluster.IClusterNode.html": {
    "href": "api/Apache.Ignite.Core.Cluster.IClusterNode.html",
    "title": "Interface IClusterNode | Apache Ignite.NET",
    "keywords": "Interface IClusterNode Interface representing a single cluster node. Use GetAttribute<T>(String) or GetMetrics() to get static and dynamic information about remote nodes. You can get a list of all nodes in grid by calling GetNodes() on IIgnite instance. You can use Ignite node attributes to provide static information about a node. This information is initialized once within grid, during node startup, and remains the same throughout the lifetime of a node. All members are thread-safe and may be used concurrently from multiple threads. Inherited Members IBaselineNode.ConsistentId IBaselineNode.Attributes Namespace : Apache.Ignite.Core.Cluster Assembly : Apache.Ignite.Core.dll Syntax public interface IClusterNode : IBaselineNode Properties Addresses Collection of addresses this node is known by. Declaration ICollection<string> Addresses { get; } Property Value Type Description System.Collections.Generic.ICollection < System.String > Collection of addresses. HostNames Collection of host names this node is known by. Declaration ICollection<string> HostNames { get; } Property Value Type Description System.Collections.Generic.ICollection < System.String > Collection of host names. Id Globally unique node ID. A new ID is generated every time a node restarts. Declaration Guid Id { get; } Property Value Type Description System.Guid IsClient Gets a value indicating whether or not this node is connected to cluster as a client. Do not confuse client in terms of discovery and client in terms of cache. Cache clients cannot carry data, while topology clients connect to the topology in a different way. Declaration bool IsClient { get; } Property Value Type Description System.Boolean true if this node is a client node, false otherwise. . IsDaemon Tests whether or not this node is a daemon. Daemon nodes are the usual Ignite nodes that participate in topology but not visible on the main APIs, i.e. they are not part of any projections. Daemon nodes are used primarily for management and monitoring functionality that is build on Ignite and needs to participate in the topology but should be excluded from \"normal\" topology so that it won't participate in task execution or in-memory database. Application code should never use daemon nodes. Declaration bool IsDaemon { get; } Property Value Type Description System.Boolean IsLocal Tests whether or not this node is a local node. Declaration bool IsLocal { get; } Property Value Type Description System.Boolean Order Node order within grid topology. Discovery SPIs that support node ordering will assign a proper order to each node and will guarantee that discovery event notifications for new nodes will come in proper order. All other SPIs not supporting ordering may choose to return node startup time here. Declaration long Order { get; } Property Value Type Description System.Int64 Methods GetAttribute<T>(String) Gets node's attribute. Attributes are assigned to nodes at startup. Note that attributes cannot be changed at runtime. Declaration T GetAttribute<T>(string name) Parameters Type Name Description System.String name Attribute name. Returns Type Description T Attribute value. Type Parameters Name Description T GetAttributes() Gets all node attributes. Attributes are assigned to nodes at startup. Note that attributes cannot be changed at runtime. Declaration [Obsolete(\"Use Attributes property.\")] IDictionary<string, object> GetAttributes() Returns Type Description System.Collections.Generic.IDictionary < System.String , System.Object > All node attributes. GetMetrics() Gets metrics snapshot for this node. Note that node metrics are constantly updated and provide up to date information about nodes. For example, you can get an idea about CPU load on remote node via CurrentCpuLoad . Node metrics are updated with some delay which is directly related to heartbeat frequency. For example, when used with default GridTcpDiscoverySpi the update will happen every 2 seconds. Declaration IClusterMetrics GetMetrics() Returns Type Description IClusterMetrics Runtime metrics snapshot for this node. TryGetAttribute<T>(String, out T) Try getting node's attribute. Attributes are assigned to nodes at startup. Note that attributes cannot be changed at runtime. Declaration bool TryGetAttribute<T>(string name, out T attr) Parameters Type Name Description System.String name Attribute name. T attr Attribute value. Returns Type Description System.Boolean true in case such attribute exists. Type Parameters Name Description T"
  },
  "api/Apache.Ignite.Core.Communication.Tcp.html": {
    "href": "api/Apache.Ignite.Core.Communication.Tcp.html",
    "title": "Namespace Apache.Ignite.Core.Communication.Tcp | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Communication.Tcp Classes TcpCommunicationSpi TcpCommunicationSpi is default communication SPI which uses TCP/IP protocol and Java NIO to communicate with other nodes. At startup, this SPI tries to start listening to local port specified by LocalPort property. If local port is occupied, then SPI will automatically increment the port number until it can successfully bind for listening. LocalPortRange configuration parameter controls maximum number of ports that SPI will try before it fails. Port range comes very handy when starting multiple grid nodes on the same machine or even in the same VM. In this case all nodes can be brought up without a single change in configuration."
  },
  "api/Apache.Ignite.Core.Communication.html": {
    "href": "api/Apache.Ignite.Core.Communication.html",
    "title": "Namespace Apache.Ignite.Core.Communication | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Communication Interfaces ICommunicationSpi Communication SPI is responsible for data exchange between nodes. Communication SPI is one of the most important SPIs in Ignite. It is used heavily throughout the system and provides means for all data exchanges between nodes, such as internal implementation details and user driven messages. Only predefined implementation is supported now: TcpCommunicationSpi ."
  },
  "api/Apache.Ignite.Core.Compute.ICompute.html": {
    "href": "api/Apache.Ignite.Core.Compute.ICompute.html",
    "title": "Interface ICompute | Apache Ignite.NET",
    "keywords": "Interface ICompute Defines Ignite functionality for executing tasks and closures over nodes in the IClusterGroup . Instance of ICompute is obtained from grid projection using GetCompute() method. Note that if attempt is made to execute a computation over an empty projection (i.e. projection that does not have any alive nodes), ClusterGroupEmptyException will be thrown out of result task. Ignite must select a node for a computation to be executed. The node will be selected based on the underlying GridLoadBalancingSpi , which by default sequentially picks next available node from grid projection. Other load balancing policies, such as random or adaptive , can be configured as well by selecting different load balancing SPI in Ignite configuration. If your logic requires some custom load balancing behavior, consider implementing ComputeTask in Java directly. Ignite guarantees that as long as there is at least one Ignite node standing, every job will be executed. Jobs will automatically failover to another node if a remote node crashed or has rejected execution due to lack of resources. By default, in case of failover, next load balanced node will be picked for job execution. Also jobs will never be re-routed to the nodes they have failed on. This behavior can be changed by configuring any of the existing or a custom FailoverSpi in Ignite configuration. All members are thread-safe and may be used concurrently from multiple threads. Namespace : Apache.Ignite.Core.Compute Assembly : Apache.Ignite.Core.dll Syntax public interface ICompute Properties ClusterGroup Grid projection to which this compute instance belongs. Declaration IClusterGroup ClusterGroup { get; } Property Value Type Description IClusterGroup Methods AffinityCall<TRes>(String, Object, IComputeFunc<TRes>) Executes given job on the node where data for provided affinity key is located (a.k.a. affinity co-location). Declaration TRes AffinityCall<TRes>(string cacheName, object affinityKey, IComputeFunc<TRes> clo) Parameters Type Name Description System.String cacheName Name of the cache to use for affinity co-location. System.Object affinityKey Affinity key. IComputeFunc <TRes> clo Job to execute. Returns Type Description TRes Job result for this execution. Type Parameters Name Description TRes Type of job result. AffinityCallAsync<TRes>(String, Object, IComputeFunc<TRes>) Executes given job on the node where data for provided affinity key is located (a.k.a. affinity co-location). Declaration Task<TRes> AffinityCallAsync<TRes>(string cacheName, object affinityKey, IComputeFunc<TRes> clo) Parameters Type Name Description System.String cacheName Name of the cache to use for affinity co-location. System.Object affinityKey Affinity key. IComputeFunc <TRes> clo Job to execute. Returns Type Description System.Threading.Tasks.Task <TRes> Job result for this execution. Type Parameters Name Description TRes Type of job result. AffinityCallAsync<TRes>(String, Object, IComputeFunc<TRes>, CancellationToken) Executes given job on the node where data for provided affinity key is located (a.k.a. affinity co-location). Declaration Task<TRes> AffinityCallAsync<TRes>(string cacheName, object affinityKey, IComputeFunc<TRes> clo, CancellationToken cancellationToken) Parameters Type Name Description System.String cacheName Name of the cache to use for affinity co-location. System.Object affinityKey Affinity key. IComputeFunc <TRes> clo Job to execute. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task <TRes> Job result for this execution. Type Parameters Name Description TRes Type of job result. AffinityRun(String, Object, IComputeAction) Executes given job on the node where data for provided affinity key is located (a.k.a. affinity co-location). Declaration void AffinityRun(string cacheName, object affinityKey, IComputeAction action) Parameters Type Name Description System.String cacheName Name of the cache to use for affinity co-location. System.Object affinityKey Affinity key. IComputeAction action Job to execute. AffinityRunAsync(String, Object, IComputeAction) Executes given job on the node where data for provided affinity key is located (a.k.a. affinity co-location). Declaration Task AffinityRunAsync(string cacheName, object affinityKey, IComputeAction action) Parameters Type Name Description System.String cacheName Name of the cache to use for affinity co-location. System.Object affinityKey Affinity key. IComputeAction action Job to execute. Returns Type Description System.Threading.Tasks.Task AffinityRunAsync(String, Object, IComputeAction, CancellationToken) Executes given job on the node where data for provided affinity key is located (a.k.a. affinity co-location). Declaration Task AffinityRunAsync(string cacheName, object affinityKey, IComputeAction action, CancellationToken cancellationToken) Parameters Type Name Description System.String cacheName Name of the cache to use for affinity co-location. System.Object affinityKey Affinity key. IComputeAction action Job to execute. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task Task. Apply<TArg, TRes>(IComputeFunc<TArg, TRes>, TArg) Executes provided closure job on a node in this grid projection. Declaration TRes Apply<TArg, TRes>(IComputeFunc<TArg, TRes> clo, TArg arg) Parameters Type Name Description IComputeFunc <TArg, TRes> clo Job to run. TArg arg Job argument. Returns Type Description TRes Job result for this execution. Type Parameters Name Description TArg Type of argument. TRes Type of job result. Apply<TArg, TRes>(IComputeFunc<TArg, TRes>, IEnumerable<TArg>) Executes provided closure job on nodes within this grid projection. A new job is executed for every argument in the passed in collection. The number of actual job executions will be equal to size of the job arguments collection. Declaration ICollection<TRes> Apply<TArg, TRes>(IComputeFunc<TArg, TRes> clo, IEnumerable<TArg> args) Parameters Type Name Description IComputeFunc <TArg, TRes> clo Job to run. System.Collections.Generic.IEnumerable <TArg> args Job arguments. Returns Type Description System.Collections.Generic.ICollection <TRes> Collection of job results. Type Parameters Name Description TArg Type of argument. TRes Type of job result. Apply<TArg, TFuncRes, TRes>(IComputeFunc<TArg, TFuncRes>, IEnumerable<TArg>, IComputeReducer<TFuncRes, TRes>) Executes provided closure job on nodes within this grid projection. A new job is executed for every argument in the passed in collection. The number of actual job executions will be equal to size of the job arguments collection. The returned job results will be reduced into an individual result by provided reducer. Declaration TRes Apply<TArg, TFuncRes, TRes>(IComputeFunc<TArg, TFuncRes> clo, IEnumerable<TArg> args, IComputeReducer<TFuncRes, TRes> rdc) Parameters Type Name Description IComputeFunc <TArg, TFuncRes> clo Job to run. System.Collections.Generic.IEnumerable <TArg> args Job arguments. IComputeReducer <TFuncRes, TRes> rdc Reducer to reduce all job results into one individual return value. Returns Type Description TRes Reduced job result for this execution. Type Parameters Name Description TArg Type of argument. TFuncRes Type of function result. TRes Type of result after reduce. ApplyAsync<TArg, TRes>(IComputeFunc<TArg, TRes>, TArg) Executes provided closure job on a node in this grid projection. Declaration Task<TRes> ApplyAsync<TArg, TRes>(IComputeFunc<TArg, TRes> clo, TArg arg) Parameters Type Name Description IComputeFunc <TArg, TRes> clo Job to run. TArg arg Job argument. Returns Type Description System.Threading.Tasks.Task <TRes> Job result for this execution. Type Parameters Name Description TArg Type of argument. TRes Type of job result. ApplyAsync<TArg, TRes>(IComputeFunc<TArg, TRes>, TArg, CancellationToken) Executes provided closure job on a node in this grid projection. Declaration Task<TRes> ApplyAsync<TArg, TRes>(IComputeFunc<TArg, TRes> clo, TArg arg, CancellationToken cancellationToken) Parameters Type Name Description IComputeFunc <TArg, TRes> clo Job to run. TArg arg Job argument. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task <TRes> Job result for this execution. Type Parameters Name Description TArg Type of argument. TRes Type of job result. ApplyAsync<TArg, TRes>(IComputeFunc<TArg, TRes>, IEnumerable<TArg>) Executes provided closure job on nodes within this grid projection. A new job is executed for every argument in the passed in collection. The number of actual job executions will be equal to size of the job arguments collection. Declaration Task<ICollection<TRes>> ApplyAsync<TArg, TRes>(IComputeFunc<TArg, TRes> clo, IEnumerable<TArg> args) Parameters Type Name Description IComputeFunc <TArg, TRes> clo Job to run. System.Collections.Generic.IEnumerable <TArg> args Job arguments. Returns Type Description System.Threading.Tasks.Task < System.Collections.Generic.ICollection <TRes>> Collection of job results. Type Parameters Name Description TArg Type of argument. TRes Type of job result. ApplyAsync<TArg, TRes>(IComputeFunc<TArg, TRes>, IEnumerable<TArg>, CancellationToken) Executes provided closure job on nodes within this grid projection. A new job is executed for every argument in the passed in collection. The number of actual job executions will be equal to size of the job arguments collection. Declaration Task<ICollection<TRes>> ApplyAsync<TArg, TRes>(IComputeFunc<TArg, TRes> clo, IEnumerable<TArg> args, CancellationToken cancellationToken) Parameters Type Name Description IComputeFunc <TArg, TRes> clo Job to run. System.Collections.Generic.IEnumerable <TArg> args Job arguments. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task < System.Collections.Generic.ICollection <TRes>> Collection of job results. Type Parameters Name Description TArg Type of argument. TRes Type of job result. ApplyAsync<TArg, TFuncRes, TRes>(IComputeFunc<TArg, TFuncRes>, IEnumerable<TArg>, IComputeReducer<TFuncRes, TRes>) Executes provided closure job on nodes within this grid projection. A new job is executed for every argument in the passed in collection. The number of actual job executions will be equal to size of the job arguments collection. The returned job results will be reduced into an individual result by provided reducer. Declaration Task<TRes> ApplyAsync<TArg, TFuncRes, TRes>(IComputeFunc<TArg, TFuncRes> clo, IEnumerable<TArg> args, IComputeReducer<TFuncRes, TRes> rdc) Parameters Type Name Description IComputeFunc <TArg, TFuncRes> clo Job to run. System.Collections.Generic.IEnumerable <TArg> args Job arguments. IComputeReducer <TFuncRes, TRes> rdc Reducer to reduce all job results into one individual return value. Returns Type Description System.Threading.Tasks.Task <TRes> Reduced job result for this execution. Type Parameters Name Description TArg Type of argument. TFuncRes Type of function result. TRes Type of result after reduce. ApplyAsync<TArg, TFuncRes, TRes>(IComputeFunc<TArg, TFuncRes>, IEnumerable<TArg>, IComputeReducer<TFuncRes, TRes>, CancellationToken) Executes provided closure job on nodes within this grid projection. A new job is executed for every argument in the passed in collection. The number of actual job executions will be equal to size of the job arguments collection. The returned job results will be reduced into an individual result by provided reducer. Declaration Task<TRes> ApplyAsync<TArg, TFuncRes, TRes>(IComputeFunc<TArg, TFuncRes> clo, IEnumerable<TArg> args, IComputeReducer<TFuncRes, TRes> rdc, CancellationToken cancellationToken) Parameters Type Name Description IComputeFunc <TArg, TFuncRes> clo Job to run. System.Collections.Generic.IEnumerable <TArg> args Job arguments. IComputeReducer <TFuncRes, TRes> rdc Reducer to reduce all job results into one individual return value. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task <TRes> Reduced job result for this execution. Type Parameters Name Description TArg Type of argument. TFuncRes Type of function result. TRes Type of result after reduce. Broadcast(IComputeAction) Broadcasts given job to all nodes in grid projection. Declaration void Broadcast(IComputeAction action) Parameters Type Name Description IComputeAction action Job to broadcast to all projection nodes. Broadcast<TRes>(IComputeFunc<TRes>) Broadcasts given job to all nodes in grid projection. Every participating node will return a job result. Declaration ICollection<TRes> Broadcast<TRes>(IComputeFunc<TRes> clo) Parameters Type Name Description IComputeFunc <TRes> clo Job to broadcast to all projection nodes. Returns Type Description System.Collections.Generic.ICollection <TRes> Collection of results for this execution. Type Parameters Name Description TRes Broadcast<TArg, TRes>(IComputeFunc<TArg, TRes>, TArg) Broadcasts given closure job with passed in argument to all nodes in grid projection. Every participating node will return a job result. Declaration ICollection<TRes> Broadcast<TArg, TRes>(IComputeFunc<TArg, TRes> clo, TArg arg) Parameters Type Name Description IComputeFunc <TArg, TRes> clo Job to broadcast to all projection nodes. TArg arg Job closure argument. Returns Type Description System.Collections.Generic.ICollection <TRes> Collection of results for this execution. Type Parameters Name Description TArg Type of argument. TRes Type of job result. BroadcastAsync(IComputeAction) Broadcasts given job to all nodes in grid projection. Declaration Task BroadcastAsync(IComputeAction action) Parameters Type Name Description IComputeAction action Job to broadcast to all projection nodes. Returns Type Description System.Threading.Tasks.Task BroadcastAsync(IComputeAction, CancellationToken) Broadcasts given job to all nodes in grid projection. Declaration Task BroadcastAsync(IComputeAction action, CancellationToken cancellationToken) Parameters Type Name Description IComputeAction action Job to broadcast to all projection nodes. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task Task. BroadcastAsync<TRes>(IComputeFunc<TRes>) Broadcasts given job to all nodes in grid projection. Every participating node will return a job result. Declaration Task<ICollection<TRes>> BroadcastAsync<TRes>(IComputeFunc<TRes> clo) Parameters Type Name Description IComputeFunc <TRes> clo Job to broadcast to all projection nodes. Returns Type Description System.Threading.Tasks.Task < System.Collections.Generic.ICollection <TRes>> Collection of results for this execution. Type Parameters Name Description TRes BroadcastAsync<TRes>(IComputeFunc<TRes>, CancellationToken) Broadcasts given job to all nodes in grid projection. Every participating node will return a job result. Declaration Task<ICollection<TRes>> BroadcastAsync<TRes>(IComputeFunc<TRes> clo, CancellationToken cancellationToken) Parameters Type Name Description IComputeFunc <TRes> clo Job to broadcast to all projection nodes. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task < System.Collections.Generic.ICollection <TRes>> Collection of results for this execution. Type Parameters Name Description TRes The type of the resource. BroadcastAsync<TArg, TRes>(IComputeFunc<TArg, TRes>, TArg) Broadcasts given closure job with passed in argument to all nodes in grid projection. Every participating node will return a job result. Declaration Task<ICollection<TRes>> BroadcastAsync<TArg, TRes>(IComputeFunc<TArg, TRes> clo, TArg arg) Parameters Type Name Description IComputeFunc <TArg, TRes> clo Job to broadcast to all projection nodes. TArg arg Job closure argument. Returns Type Description System.Threading.Tasks.Task < System.Collections.Generic.ICollection <TRes>> Collection of results for this execution. Type Parameters Name Description TArg Type of argument. TRes Type of job result. BroadcastAsync<TArg, TRes>(IComputeFunc<TArg, TRes>, TArg, CancellationToken) Broadcasts given closure job with passed in argument to all nodes in grid projection. Every participating node will return a job result. Declaration Task<ICollection<TRes>> BroadcastAsync<TArg, TRes>(IComputeFunc<TArg, TRes> clo, TArg arg, CancellationToken cancellationToken) Parameters Type Name Description IComputeFunc <TArg, TRes> clo Job to broadcast to all projection nodes. TArg arg Job closure argument. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task < System.Collections.Generic.ICollection <TRes>> Collection of results for this execution. Type Parameters Name Description TArg Type of argument. TRes Type of job result. Call<TRes>(IComputeFunc<TRes>) Executes provided job on a node in this grid projection. The result of the job execution is returned from the result closure. Declaration TRes Call<TRes>(IComputeFunc<TRes> clo) Parameters Type Name Description IComputeFunc <TRes> clo Job to execute. Returns Type Description TRes Job result for this execution. Type Parameters Name Description TRes Type of job result. Call<TRes>(IEnumerable<IComputeFunc<TRes>>) Executes collection of jobs on nodes within this grid projection. Declaration ICollection<TRes> Call<TRes>(IEnumerable<IComputeFunc<TRes>> clos) Parameters Type Name Description System.Collections.Generic.IEnumerable < IComputeFunc <TRes>> clos Collection of jobs to execute. Returns Type Description System.Collections.Generic.ICollection <TRes> Collection of job results for this execution. Type Parameters Name Description TRes Type of job result. Call<TFuncRes, TRes>(IEnumerable<IComputeFunc<TFuncRes>>, IComputeReducer<TFuncRes, TRes>) Executes collection of jobs on nodes within this grid projection. Declaration TRes Call<TFuncRes, TRes>(IEnumerable<IComputeFunc<TFuncRes>> clos, IComputeReducer<TFuncRes, TRes> reducer) Parameters Type Name Description System.Collections.Generic.IEnumerable < IComputeFunc <TFuncRes>> clos Collection of jobs to execute. IComputeReducer <TFuncRes, TRes> reducer Reducer to reduce all job results into one individual return value. Returns Type Description TRes Reduced job result for this execution. Type Parameters Name Description TFuncRes Type of function result. TRes Type of result after reduce. CallAsync<TRes>(IComputeFunc<TRes>) Executes provided job on a node in this grid projection. The result of the job execution is returned from the result closure. Declaration Task<TRes> CallAsync<TRes>(IComputeFunc<TRes> clo) Parameters Type Name Description IComputeFunc <TRes> clo Job to execute. Returns Type Description System.Threading.Tasks.Task <TRes> Job result for this execution. Type Parameters Name Description TRes Type of job result. CallAsync<TRes>(IComputeFunc<TRes>, CancellationToken) Executes provided job on a node in this grid projection. The result of the job execution is returned from the result closure. Declaration Task<TRes> CallAsync<TRes>(IComputeFunc<TRes> clo, CancellationToken cancellationToken) Parameters Type Name Description IComputeFunc <TRes> clo Job to execute. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task <TRes> Job result for this execution. Type Parameters Name Description TRes Type of job result. CallAsync<TRes>(IEnumerable<IComputeFunc<TRes>>) Executes collection of jobs on nodes within this grid projection. Declaration Task<ICollection<TRes>> CallAsync<TRes>(IEnumerable<IComputeFunc<TRes>> clos) Parameters Type Name Description System.Collections.Generic.IEnumerable < IComputeFunc <TRes>> clos Collection of jobs to execute. Returns Type Description System.Threading.Tasks.Task < System.Collections.Generic.ICollection <TRes>> Collection of job results for this execution. Type Parameters Name Description TRes Type of job result. CallAsync<TRes>(IEnumerable<IComputeFunc<TRes>>, CancellationToken) Executes collection of jobs on nodes within this grid projection. Declaration Task<ICollection<TRes>> CallAsync<TRes>(IEnumerable<IComputeFunc<TRes>> clos, CancellationToken cancellationToken) Parameters Type Name Description System.Collections.Generic.IEnumerable < IComputeFunc <TRes>> clos Collection of jobs to execute. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task < System.Collections.Generic.ICollection <TRes>> Collection of job results for this execution. Type Parameters Name Description TRes Type of job result. CallAsync<TFuncRes, TRes>(IEnumerable<IComputeFunc<TFuncRes>>, IComputeReducer<TFuncRes, TRes>) Executes collection of jobs on nodes within this grid projection. Declaration Task<TRes> CallAsync<TFuncRes, TRes>(IEnumerable<IComputeFunc<TFuncRes>> clos, IComputeReducer<TFuncRes, TRes> reducer) Parameters Type Name Description System.Collections.Generic.IEnumerable < IComputeFunc <TFuncRes>> clos Collection of jobs to execute. IComputeReducer <TFuncRes, TRes> reducer Reducer to reduce all job results into one individual return value. Returns Type Description System.Threading.Tasks.Task <TRes> Reduced job result for this execution. Type Parameters Name Description TFuncRes Type of function result. TRes Type of result after reduce. CallAsync<TFuncRes, TRes>(IEnumerable<IComputeFunc<TFuncRes>>, IComputeReducer<TFuncRes, TRes>, CancellationToken) Executes collection of jobs on nodes within this grid projection. Declaration Task<TRes> CallAsync<TFuncRes, TRes>(IEnumerable<IComputeFunc<TFuncRes>> clos, IComputeReducer<TFuncRes, TRes> reducer, CancellationToken cancellationToken) Parameters Type Name Description System.Collections.Generic.IEnumerable < IComputeFunc <TFuncRes>> clos Collection of jobs to execute. IComputeReducer <TFuncRes, TRes> reducer Reducer to reduce all job results into one individual return value. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task <TRes> Reduced job result for this execution. Type Parameters Name Description TFuncRes Type of function result. TRes Type of result after reduce. Execute<TJobRes, TRes>(IComputeTask<TJobRes, TRes>) Executes given task on the grid projection. For step-by-step explanation of task execution process refer to IComputeTask<TArg, TJobRes, TRes> documentation. Declaration TRes Execute<TJobRes, TRes>(IComputeTask<TJobRes, TRes> task) Parameters Type Name Description IComputeTask <TJobRes, TRes> task Task to execute. Returns Type Description TRes Task result. Type Parameters Name Description TJobRes Type of job result. TRes Type of reduce result. Execute<TJobRes, TRes>(Type) Executes given task on the grid projection. For step-by-step explanation of task execution process refer to IComputeTask<TArg, TJobRes, TRes> documentation. Declaration TRes Execute<TJobRes, TRes>(Type taskType) Parameters Type Name Description System.Type taskType Task type. Returns Type Description TRes Task result. Type Parameters Name Description TJobRes Type of job result. TRes Type of reduce result. Execute<TArg, TJobRes, TRes>(IComputeTask<TArg, TJobRes, TRes>, TArg) Executes given task on the grid projection. For step-by-step explanation of task execution process refer to IComputeTask<TArg, TJobRes, TRes> documentation. Declaration TRes Execute<TArg, TJobRes, TRes>(IComputeTask<TArg, TJobRes, TRes> task, TArg taskArg) Parameters Type Name Description IComputeTask <TArg, TJobRes, TRes> task Task to execute. TArg taskArg Optional task argument. Returns Type Description TRes Task result. Type Parameters Name Description TArg Argument type. TJobRes Type of job result. TRes Type of final task result. Execute<TArg, TJobRes, TRes>(Type, TArg) Executes given task on the grid projection. For step-by-step explanation of task execution process refer to IComputeTask<TArg, TJobRes, TRes> documentation. Declaration TRes Execute<TArg, TJobRes, TRes>(Type taskType, TArg taskArg) Parameters Type Name Description System.Type taskType Task type. TArg taskArg Optional task argument. Returns Type Description TRes Task result. Type Parameters Name Description TArg Argument type. TJobRes Type of job result. TRes Type of reduce result. ExecuteAsync<TJobRes, TRes>(IComputeTask<TJobRes, TRes>) Executes given task on the grid projection. For step-by-step explanation of task execution process refer to IComputeTask<TArg, TJobRes, TRes> documentation. Declaration Task<TRes> ExecuteAsync<TJobRes, TRes>(IComputeTask<TJobRes, TRes> task) Parameters Type Name Description IComputeTask <TJobRes, TRes> task Task to execute. Returns Type Description System.Threading.Tasks.Task <TRes> Task result. Type Parameters Name Description TJobRes Type of job result. TRes Type of reduce result. ExecuteAsync<TJobRes, TRes>(IComputeTask<TJobRes, TRes>, CancellationToken) Executes given task on the grid projection. For step-by-step explanation of task execution process refer to IComputeTask<TArg, TJobRes, TRes> documentation. Declaration Task<TRes> ExecuteAsync<TJobRes, TRes>(IComputeTask<TJobRes, TRes> task, CancellationToken cancellationToken) Parameters Type Name Description IComputeTask <TJobRes, TRes> task Task to execute. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task <TRes> Task result. Type Parameters Name Description TJobRes Type of job result. TRes Type of reduce result. ExecuteAsync<TJobRes, TRes>(Type) Executes given task on the grid projection. For step-by-step explanation of task execution process refer to IComputeTask<TArg, TJobRes, TRes> documentation. Declaration Task<TRes> ExecuteAsync<TJobRes, TRes>(Type taskType) Parameters Type Name Description System.Type taskType Task type. Returns Type Description System.Threading.Tasks.Task <TRes> Task result. Type Parameters Name Description TJobRes Type of job result. TRes Type of reduce result. ExecuteAsync<TJobRes, TRes>(Type, CancellationToken) Executes given task on the grid projection. For step-by-step explanation of task execution process refer to IComputeTask<TArg, TJobRes, TRes> documentation. Declaration Task<TRes> ExecuteAsync<TJobRes, TRes>(Type taskType, CancellationToken cancellationToken) Parameters Type Name Description System.Type taskType Task type. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task <TRes> Task result. Type Parameters Name Description TJobRes Type of job result. TRes Type of reduce result. ExecuteAsync<TArg, TJobRes, TRes>(IComputeTask<TArg, TJobRes, TRes>, TArg) Executes given task on the grid projection. For step-by-step explanation of task execution process refer to IComputeTask<TArg, TJobRes, TRes> documentation. Declaration Task<TRes> ExecuteAsync<TArg, TJobRes, TRes>(IComputeTask<TArg, TJobRes, TRes> task, TArg taskArg) Parameters Type Name Description IComputeTask <TArg, TJobRes, TRes> task Task to execute. TArg taskArg Optional task argument. Returns Type Description System.Threading.Tasks.Task <TRes> Task result. Type Parameters Name Description TArg Argument type. TJobRes Type of job result. TRes Type of final task result. ExecuteAsync<TArg, TJobRes, TRes>(IComputeTask<TArg, TJobRes, TRes>, TArg, CancellationToken) Executes given task on the grid projection. For step-by-step explanation of task execution process refer to IComputeTask<TArg, TJobRes, TRes> documentation. Declaration Task<TRes> ExecuteAsync<TArg, TJobRes, TRes>(IComputeTask<TArg, TJobRes, TRes> task, TArg taskArg, CancellationToken cancellationToken) Parameters Type Name Description IComputeTask <TArg, TJobRes, TRes> task Task to execute. TArg taskArg Optional task argument. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task <TRes> Task result. Type Parameters Name Description TArg Argument type. TJobRes Type of job result. TRes Type of final task result. ExecuteAsync<TArg, TJobRes, TRes>(Type, TArg) Executes given task on the grid projection. For step-by-step explanation of task execution process refer to IComputeTask<TArg, TJobRes, TRes> documentation. Declaration Task<TRes> ExecuteAsync<TArg, TJobRes, TRes>(Type taskType, TArg taskArg) Parameters Type Name Description System.Type taskType Task type. TArg taskArg Optional task argument. Returns Type Description System.Threading.Tasks.Task <TRes> Task result. Type Parameters Name Description TArg Argument type. TJobRes Type of job result. TRes Type of reduce result. ExecuteAsync<TArg, TJobRes, TRes>(Type, TArg, CancellationToken) Executes given task on the grid projection. For step-by-step explanation of task execution process refer to IComputeTask<TArg, TJobRes, TRes> documentation. Declaration Task<TRes> ExecuteAsync<TArg, TJobRes, TRes>(Type taskType, TArg taskArg, CancellationToken cancellationToken) Parameters Type Name Description System.Type taskType Task type. TArg taskArg Optional task argument. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task <TRes> Task result. Type Parameters Name Description TArg Argument type. TJobRes Type of job result. TRes Type of reduce result. ExecuteJavaTask<TRes>(String, Object) Executes given Java task on the grid projection. If task for given name has not been deployed yet, then 'taskName' will be used as task class name to auto-deploy the task. Declaration TRes ExecuteJavaTask<TRes>(string taskName, object taskArg) Parameters Type Name Description System.String taskName Java task name System.Object taskArg Optional argument of task execution, can be null. Returns Type Description TRes Task result. Type Parameters Name Description TRes Type of task result. ExecuteJavaTaskAsync<TRes>(String, Object) Executes given Java task on the grid projection. If task for given name has not been deployed yet, then 'taskName' will be used as task class name to auto-deploy the task. Declaration Task<TRes> ExecuteJavaTaskAsync<TRes>(string taskName, object taskArg) Parameters Type Name Description System.String taskName Java task name System.Object taskArg Optional argument of task execution, can be null. Returns Type Description System.Threading.Tasks.Task <TRes> Task result. Type Parameters Name Description TRes Type of task result. ExecuteJavaTaskAsync<TRes>(String, Object, CancellationToken) Executes given Java task on the grid projection. If task for given name has not been deployed yet, then 'taskName' will be used as task class name to auto-deploy the task. Declaration Task<TRes> ExecuteJavaTaskAsync<TRes>(string taskName, object taskArg, CancellationToken cancellationToken) Parameters Type Name Description System.String taskName Java task name System.Object taskArg Optional argument of task execution, can be null. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task <TRes> Task result. Type Parameters Name Description TRes Type of task result. Run(IComputeAction) Executes provided job on a node in this grid projection. Declaration void Run(IComputeAction action) Parameters Type Name Description IComputeAction action Job to execute. Run(IEnumerable<IComputeAction>) Executes collection of jobs on Ignite nodes within this grid projection. Declaration void Run(IEnumerable<IComputeAction> actions) Parameters Type Name Description System.Collections.Generic.IEnumerable < IComputeAction > actions Jobs to execute. RunAsync(IComputeAction) Executes provided job on a node in this grid projection. Declaration Task RunAsync(IComputeAction action) Parameters Type Name Description IComputeAction action Job to execute. Returns Type Description System.Threading.Tasks.Task RunAsync(IComputeAction, CancellationToken) Executes provided job on a node in this grid projection. Declaration Task RunAsync(IComputeAction action, CancellationToken cancellationToken) Parameters Type Name Description IComputeAction action Job to execute. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task RunAsync(IEnumerable<IComputeAction>) Executes collection of jobs on Ignite nodes within this grid projection. Declaration Task RunAsync(IEnumerable<IComputeAction> actions) Parameters Type Name Description System.Collections.Generic.IEnumerable < IComputeAction > actions Jobs to execute. Returns Type Description System.Threading.Tasks.Task RunAsync(IEnumerable<IComputeAction>, CancellationToken) Executes collection of jobs on Ignite nodes within this grid projection. Declaration Task RunAsync(IEnumerable<IComputeAction> actions, CancellationToken cancellationToken) Parameters Type Name Description System.Collections.Generic.IEnumerable < IComputeAction > actions Jobs to execute. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task Task. WithKeepBinary() Sets keep-binary flag for the next executed Java task on this projection in the current thread so that task argument passed to Java and returned task results will not be deserialized. Declaration ICompute WithKeepBinary() Returns Type Description ICompute This compute instance for chaining calls. WithNoFailover() Sets no-failover flag for the next executed task on this projection in the current thread. If flag is set, job will be never failed over even if remote node crashes or rejects execution. When task starts execution, the no-failover flag is reset, so all other task will use default failover policy, unless this flag is set again. Declaration ICompute WithNoFailover() Returns Type Description ICompute This compute instance for chaining calls. WithTimeout(Int64) Sets task timeout for the next executed task on this projection in the current thread. When task starts execution, the timeout is reset, so one timeout is used only once. Declaration ICompute WithTimeout(long timeout) Parameters Type Name Description System.Int64 timeout Computation timeout in milliseconds. Returns Type Description ICompute This compute instance for chaining calls."
  },
  "api/Apache.Ignite.Core.Compute.IComputeAction.html": {
    "href": "api/Apache.Ignite.Core.Compute.IComputeAction.html",
    "title": "Interface IComputeAction | Apache Ignite.NET",
    "keywords": "Interface IComputeAction Defines a void function having no arguments. Namespace : Apache.Ignite.Core.Compute Assembly : Apache.Ignite.Core.dll Syntax public interface IComputeAction Methods Invoke() Invokes action. Declaration void Invoke()"
  },
  "api/Apache.Ignite.Core.Configuration.WalMode.html": {
    "href": "api/Apache.Ignite.Core.Configuration.WalMode.html",
    "title": "Enum WalMode | Apache Ignite.NET",
    "keywords": "Enum WalMode Write Ahead Log mode. Namespace : Apache.Ignite.Core.Configuration Assembly : Apache.Ignite.Core.dll Syntax public enum WalMode Fields Name Description Background Background mode. Does not force application buffer flush. Data may be lost in case of process crash. Default Default mode: full-sync disk writes. These writes survive power loss scenarios. Fsync FSYNC mode: full-sync disk writes. These writes survive power loss scenarios. LogOnly Log only mode: flushes application buffers. These writes survive process crash. None WAL disabled."
  },
  "api/Apache.Ignite.Core.Configuration.html": {
    "href": "api/Apache.Ignite.Core.Configuration.html",
    "title": "Namespace Apache.Ignite.Core.Configuration | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Configuration Classes ClientConnectorConfiguration Client connector configuration (ODBC, JDBC, Thin Client). DataRegionConfiguration Defines custom data region configuration for Apache Ignite page memory (see DataStorageConfiguration ). For each configured data region Apache Ignite instantiates respective memory regions with different parameters like maximum size, eviction policy, swapping options, etc. An Apache Ignite cache can be mapped to a particular region using DataRegionName method. DataStorageConfiguration Data storage configuration for Ignite page memory. The page memory is a manageable off-heap based memory architecture that divides all expandable data regions into pages of fixed size. An individual page can store one or many cache key-value entries that allows reusing the memory in the most efficient way and avoid memory fragmentation issues. By default, the page memory allocates a single expandable data region. All the caches that will be configured in an application will be mapped to this data region by default, thus, all the cache data will reside in that data region. SqlConnectorConfiguration SQL connector configuration (for ODBC and JDBC). Enums CheckpointWriteOrder Defines checkpoint pages order on disk. DataPageEvictionMode Memory page eviction mode. Only data pages, that store key-value entries, are eligible for eviction. The other types of pages, like index or system pages, are not evictable. WalMode Write Ahead Log mode."
  },
  "api/Apache.Ignite.Core.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.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.AspNet.IgniteOutputCacheProvider.html": {
    "href": "api/Apache.Ignite.AspNet.IgniteOutputCacheProvider.html",
    "title": "Class IgniteOutputCacheProvider | Apache Ignite.NET",
    "keywords": "Class IgniteOutputCacheProvider ASP.NET output cache provider that uses Ignite cache as a storage. You can either start Ignite yourself, and provide gridName attribute, or provide igniteConfigurationSectionName attribute to start Ignite automatically from specified configuration section (see IgniteConfigurationSection ) using igniteConfigurationSectionName . cacheName attribute specifies Ignite cache name to use for data storage. This attribute can be omitted if cache name is null. Inheritance System.Object System.Configuration.Provider.ProviderBase System.Web.Caching.OutputCacheProvider IgniteOutputCacheProvider Inherited Members System.Configuration.Provider.ProviderBase.Name System.Configuration.Provider.ProviderBase.Description System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.AspNet Assembly : Apache.Ignite.AspNet.dll Syntax public class IgniteOutputCacheProvider : OutputCacheProvider Methods Add(String, Object, DateTime) Inserts the specified entry into the output cache. Declaration public override object Add(string key, object entry, DateTime utcExpiry) Parameters Type Name Description System.String key A unique identifier for entry . System.Object entry The content to add to the output cache. System.DateTime utcExpiry The time and date on which the cached entry expires. Returns Type Description System.Object A reference to the specified provider. Overrides System.Web.Caching.OutputCacheProvider.Add(System.String, System.Object, System.DateTime) Get(String) Returns a reference to the specified entry in the output cache. Declaration public override object Get(string key) Parameters Type Name Description System.String key A unique identifier for a cached entry in the output cache. Returns Type Description System.Object The key value that identifies the specified entry in the cache, or null if the specified entry is not in the cache. Overrides System.Web.Caching.OutputCacheProvider.Get(System.String) Initialize(String, NameValueCollection) Initializes the provider. Declaration public override void Initialize(string name, NameValueCollection config) Parameters Type Name Description System.String name The friendly name of the provider. System.Collections.Specialized.NameValueCollection config A collection of the name/value pairs representing the provider-specific attributes specified in the configuration for this provider. Overrides System.Configuration.Provider.ProviderBase.Initialize(System.String, System.Collections.Specialized.NameValueCollection) Remove(String) Removes the specified entry from the output cache. Declaration public override void Remove(string key) Parameters Type Name Description System.String key The unique identifier for the entry to remove from the output cache. Overrides System.Web.Caching.OutputCacheProvider.Remove(System.String) Set(String, Object, DateTime) Inserts the specified entry into the output cache, overwriting the entry if it is already cached. Declaration public override void Set(string key, object entry, DateTime utcExpiry) Parameters Type Name Description System.String key A unique identifier for entry . System.Object entry The content to add to the output cache. System.DateTime utcExpiry The time and date on which the cached entry expires. Overrides System.Web.Caching.OutputCacheProvider.Set(System.String, System.Object, System.DateTime)"
  },
  "api/Apache.Ignite.Core.Binary.IBinarizable.html": {
    "href": "api/Apache.Ignite.Core.Binary.IBinarizable.html",
    "title": "Interface IBinarizable | Apache Ignite.NET",
    "keywords": "Interface IBinarizable Interface to implement custom serialization logic. Namespace : Apache.Ignite.Core.Binary Assembly : Apache.Ignite.Core.dll Syntax public interface IBinarizable Methods ReadBinary(IBinaryReader) Reads this object from the given reader. Declaration void ReadBinary(IBinaryReader reader) Parameters Type Name Description IBinaryReader reader Reader. Exceptions Type Condition System.IO.IOException If read failed. WriteBinary(IBinaryWriter) Writes this object to the given writer. Declaration void WriteBinary(IBinaryWriter writer) Parameters Type Name Description IBinaryWriter writer Writer. Exceptions Type Condition System.IO.IOException If write failed."
  },
  "api/Apache.Ignite.Core.Binary.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.AffinityFunctionContext.html": {
    "href": "api/Apache.Ignite.Core.Cache.Affinity.AffinityFunctionContext.html",
    "title": "Class AffinityFunctionContext | Apache Ignite.NET",
    "keywords": "Class AffinityFunctionContext Affinity function context. Inheritance System.Object AffinityFunctionContext Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Affinity Assembly : Apache.Ignite.Core.dll Syntax public class AffinityFunctionContext Properties Backups Gets number of backups for new assignment. Declaration public int Backups { get; } Property Value Type Description System.Int32 CurrentTopologySnapshot Gets the current topology snapshot. Snapshot will contain only nodes on which the particular cache is configured. List of passed nodes is guaranteed to be sorted in a same order on all nodes on which partition assignment is performed. Declaration public ICollection<IClusterNode> CurrentTopologySnapshot { get; } Property Value Type Description System.Collections.Generic.ICollection < IClusterNode > CurrentTopologyVersion Gets the current topology version. Declaration public AffinityTopologyVersion CurrentTopologyVersion { get; } Property Value Type Description AffinityTopologyVersion DiscoveryEvent Gets the discovery event that caused the topology change. Declaration public DiscoveryEvent DiscoveryEvent { get; } Property Value Type Description DiscoveryEvent Methods GetPreviousAssignment(Int32) Gets the affinity assignment for given partition on previous topology version. First node in returned list is a primary node, other nodes are backups. Declaration public ICollection<IClusterNode> GetPreviousAssignment(int partition) Parameters Type Name Description System.Int32 partition The partition to get previous assignment for. Returns Type Description System.Collections.Generic.ICollection < IClusterNode > List of nodes assigned to a given partition on previous topology version or null if this information is not available."
  },
  "api/Apache.Ignite.Core.Cache.CacheException.html": {
    "href": "api/Apache.Ignite.Core.Cache.CacheException.html",
    "title": "Class CacheException | Apache Ignite.NET",
    "keywords": "Class CacheException Indicates an error during Cache operation. Inheritance System.Object System.Exception IgniteException CacheException CacheAtomicUpdateTimeoutException 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.PartitionLossPolicy.html": {
    "href": "api/Apache.Ignite.Core.Cache.Configuration.PartitionLossPolicy.html",
    "title": "Enum PartitionLossPolicy | Apache Ignite.NET",
    "keywords": "Enum PartitionLossPolicy Partition loss policy. Defines how cache will behave in a case when one or more partitions are lost because of a node(s) failure. All Safe policies prevent a user from interaction with partial data in lost partitions until ResetLostPartitions(IEnumerable<String>) method is called. *All policies allow working with partial data in lost partitions. ReadOnly and ReadWrite* policies do not automatically change partition state and thus do not change rebalancing assignments for such partitions. Namespace : Apache.Ignite.Core.Cache.Configuration Assembly : Apache.Ignite.Core.dll Syntax public enum PartitionLossPolicy Fields Name Description Ignore If partition is lost, reset it's state and do not clear intermediate data. The result of reading from a previously lost and not cleared partition is undefined and may be different on different nodes in the cluster. ReadOnlyAll All writes to the cache will be failed with an exception. All reads will proceed as if all partitions were in a consistent state. The result of reading from a lost partition is undefined and may be different on different nodes in the cluster. ReadOnlySafe All writes to the cache will be failed with an exception, reads will only be allowed for keys in non-lost partitions. Reads from lost partitions will be failed with an exception. ReadWriteAll All reads and writes will proceed as if all partitions were in a consistent state. The result of reading from a lost partition is undefined and may be different on different nodes in the cluster. ReadWriteSafe All reads and writes will be allowed for keys in valid partitions. All reads and writes for keys in lost partitions will be failed with an exception."
  },
  "api/Apache.Ignite.Core.Cache.Configuration.QuerySqlFieldAttribute.html": {
    "href": "api/Apache.Ignite.Core.Cache.Configuration.QuerySqlFieldAttribute.html",
    "title": "Class QuerySqlFieldAttribute | Apache Ignite.NET",
    "keywords": "Class QuerySqlFieldAttribute Marks field or property for SQL queries. Using this attribute is an alternative to Fields in CacheConfiguration . Inheritance System.Object System.Attribute QuerySqlFieldAttribute Implements System.Runtime.InteropServices._Attribute Inherited Members System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Boolean) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Boolean) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Module) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.IsDefined(System.Reflection.Module, System.Type) System.Attribute.IsDefined(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Boolean) System.Attribute.IsDefined(System.Reflection.Assembly, System.Type) System.Attribute.IsDefined(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.Equals(System.Object) System.Attribute.GetHashCode() System.Attribute.Match(System.Object) System.Attribute.IsDefaultAttribute() System.Attribute.System.Runtime.InteropServices._Attribute.GetTypeInfoCount(System.UInt32) System.Attribute.System.Runtime.InteropServices._Attribute.GetTypeInfo(System.UInt32, System.UInt32, System.IntPtr) System.Attribute.System.Runtime.InteropServices._Attribute.GetIDsOfNames(System.Guid, System.IntPtr, System.UInt32, System.UInt32, System.IntPtr) System.Attribute.System.Runtime.InteropServices._Attribute.Invoke(System.UInt32, System.Guid, System.UInt32, System.Int16, System.IntPtr, System.IntPtr, System.IntPtr, System.IntPtr) System.Attribute.TypeId System.Object.ToString() System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Configuration Assembly : Apache.Ignite.Core.dll Syntax [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)] public sealed class QuerySqlFieldAttribute : Attribute, _Attribute Constructors QuerySqlFieldAttribute() Initializes a new instance of the QuerySqlFieldAttribute class. Declaration public QuerySqlFieldAttribute() Properties DefaultValue Gets or sets the default value for the field (has effect when inserting with DML). Declaration public object DefaultValue { get; set; } Property Value Type Description System.Object IndexGroups Gets or sets the collection of index groups this field belongs to. Groups are used for compound indexes, whenever index should be created on more than one field. All fields within the same group will belong to the same index. Declaration public string[] IndexGroups { get; set; } Property Value Type Description System.String [] IndexInlineSize Gets or sets the index inline size, see InlineSize . Declaration public int IndexInlineSize { get; set; } Property Value Type Description System.Int32 IsDescending Gets or sets a value indicating whether index for this field should be descending. Ignored when IsIndexed is false . Declaration public bool IsDescending { get; set; } Property Value Type Description System.Boolean IsIndexed Gets or sets a value indicating whether corresponding field should be indexed. Just like with databases, field indexing may require additional overhead during updates, but makes select operations faster. Declaration public bool IsIndexed { get; set; } Property Value Type Description System.Boolean Name Gets or sets the sql field name. If not provided, property or field name will be used. Declaration public string Name { get; set; } Property Value Type Description System.String NotNull Gets or sets a value indicating whether null values are allowed for this field. Declaration public bool NotNull { get; set; } Property Value Type Description System.Boolean Implements System.Runtime.InteropServices._Attribute"
  },
  "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.ICacheAffinity.html": {
    "href": "api/Apache.Ignite.Core.Cache.ICacheAffinity.html",
    "title": "Interface ICacheAffinity | Apache Ignite.NET",
    "keywords": "Interface ICacheAffinity Provides affinity information to detect which node is primary and which nodes are backups for a partitioned cache. You can get an instance of this interface by calling GetAffinity(String) method. Mapping of a key to a node is a three-step operation. First step will get an affinity key for given key using CacheAffinityKeyMapper . If mapper is not specified, the original key will be used. Second step will map affinity key to partition using CacheAffinityFunction.partition(Object) method. Third step will map obtained partition to nodes for current grid topology version. Interface provides various mapKeysToNodes(...) methods which provide node affinity mapping for given keys. All mapKeysToNodes(...) methods are not transactional and will not enlist keys into ongoing transaction. All members are thread-safe and may be used concurrently from multiple threads. Namespace : Apache.Ignite.Core.Cache Assembly : Apache.Ignite.Core.dll Syntax public interface ICacheAffinity Properties Partitions Gets number of partitions in cache according to configured affinity function. Declaration int Partitions { get; } Property Value Type Description System.Int32 Number of cache partitions. Methods GetAffinityKey<TK, TR>(TK) Maps passed in key to a key which will be used for node affinity. Declaration TR GetAffinityKey<TK, TR>(TK key) Parameters Type Name Description TK key Key to map. Returns Type Description TR Key to be used for node-to-affinity mapping (may be the same key as passed in). Type Parameters Name Description TK TR GetAllPartitions(IClusterNode) Gets partition ids for which nodes of the given projection has ownership (either primary or backup). Declaration int[] GetAllPartitions(IClusterNode n) Parameters Type Name Description IClusterNode n Node. Returns Type Description System.Int32 [] Partition ids for which given projection has ownership. GetBackupPartitions(IClusterNode) Gets partition ids for which nodes of the given projection has backup ownership. Declaration int[] GetBackupPartitions(IClusterNode n) Parameters Type Name Description IClusterNode n Node. Returns Type Description System.Int32 [] Partition ids for which given projection has backup ownership. GetPartition<TK>(TK) Gets partition id for the given key. Declaration int GetPartition<TK>(TK key) Parameters Type Name Description TK key Key to get partition id for. Returns Type Description System.Int32 Partition id. Type Parameters Name Description TK GetPrimaryPartitions(IClusterNode) Gets partition ids for which nodes of the given projection has primary ownership. Declaration int[] GetPrimaryPartitions(IClusterNode n) Parameters Type Name Description IClusterNode n Node. Returns Type Description System.Int32 [] Partition ids for which given projection has primary ownership. IsBackup<TK>(IClusterNode, TK) Returns 'true' if given node is the backup node for given key. Declaration bool IsBackup<TK>(IClusterNode n, TK key) Parameters Type Name Description IClusterNode n Node. TK key Key. Returns Type Description System.Boolean 'True' if given node is the backup node for given key. Type Parameters Name Description TK IsPrimary<TK>(IClusterNode, TK) Returns 'true' if given node is the primary node for given key. Declaration bool IsPrimary<TK>(IClusterNode n, TK key) Parameters Type Name Description IClusterNode n Node. TK key Key. Returns Type Description System.Boolean 'True' if given node is the primary node for given key. Type Parameters Name Description TK IsPrimaryOrBackup<TK>(IClusterNode, TK) Returns 'true' if given node is either primary or backup node for given key. Declaration bool IsPrimaryOrBackup<TK>(IClusterNode n, TK key) Parameters Type Name Description IClusterNode n Node. TK key Key. Returns Type Description System.Boolean 'True' if given node is either primary or backup node for given key. Type Parameters Name Description TK MapKeysToNodes<TK>(IEnumerable<TK>) This method provides ability to detect which keys are mapped to which nodes. Use it to determine which nodes are storing which keys prior to sending jobs that access these keys. Declaration IDictionary<IClusterNode, IList<TK>> MapKeysToNodes<TK>(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys to map to nodes. Returns Type Description System.Collections.Generic.IDictionary < IClusterNode , System.Collections.Generic.IList <TK>> Map of nodes to keys or empty map if there are no alive nodes for this cache. Type Parameters Name Description TK MapKeyToNode<TK>(TK) This method provides ability to detect to which primary node the given key is mapped. Use it to determine which nodes are storing which keys prior to sending jobs that access these keys. Declaration IClusterNode MapKeyToNode<TK>(TK key) Parameters Type Name Description TK key Keys to map to a node. Returns Type Description IClusterNode Primary node for the key or null if there are no alive nodes for this cache. Type Parameters Name Description TK MapKeyToPrimaryAndBackups<TK>(TK) Gets primary and backup nodes for the key. Note that primary node is always first in the returned collection. Declaration IList<IClusterNode> MapKeyToPrimaryAndBackups<TK>(TK key) Parameters Type Name Description TK key Returns Type Description System.Collections.Generic.IList < IClusterNode > Type Parameters Name Description TK MapPartitionsToNodes(IEnumerable<Int32>) Gets primary nodes for the given partitions. Declaration IDictionary<int, IClusterNode> MapPartitionsToNodes(IEnumerable<int> parts) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Int32 > parts Partition ids. Returns Type Description System.Collections.Generic.IDictionary < System.Int32 , IClusterNode > Mapping of given partitions to their primary nodes. MapPartitionToNode(Int32) Gets primary node for the given partition. Declaration IClusterNode MapPartitionToNode(int part) Parameters Type Name Description System.Int32 part Partition id. Returns Type Description IClusterNode Primary node for the given partition. MapPartitionToPrimaryAndBackups(Int32) Gets primary and backup nodes for partition. Note that primary node is always first in the returned collection. Declaration IList<IClusterNode> MapPartitionToPrimaryAndBackups(int part) Parameters Type Name Description System.Int32 part Partition to get affinity nodes for. Returns Type Description System.Collections.Generic.IList < IClusterNode > Collection of primary and backup nodes for partition with primary node always first"
  },
  "api/Apache.Ignite.Core.Cache.ICacheEntry-2.html": {
    "href": "api/Apache.Ignite.Core.Cache.ICacheEntry-2.html",
    "title": "Interface ICacheEntry<TK, TV> | Apache Ignite.NET",
    "keywords": "Interface ICacheEntry<TK, TV> Cache entry interface. Namespace : Apache.Ignite.Core.Cache Assembly : Apache.Ignite.Core.dll Syntax public interface ICacheEntry<out TK, out TV> Type Parameters Name Description TK Key type. TV Value type. Properties Key Gets the key. Declaration TK Key { get; } Property Value Type Description TK Value Gets the value. Declaration TV Value { get; } Property Value Type Description TV"
  },
  "api/Apache.Ignite.Core.Cache.Query.Continuous.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 >"
  }
}