{
  "api/Apache.Ignite.Core.html": {
    "href": "api/Apache.Ignite.Core.html",
    "title": "Namespace Apache.Ignite.Core | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core Classes IgniteConfiguration Grid configuration. IgniteConfigurationSection Ignite configuration section for app.config and web.config files. Ignition This class defines a factory for the main Ignite API. Use Start() method to start Ignite with default configuration. All members are thread-safe and may be used concurrently from multiple threads. Interfaces IDataRegionMetrics Memory usage metrics. IDataStorageMetrics Persistent store metrics. IIgnite Main entry point for all Ignite APIs. You can obtain an instance of IIgnite through GetIgnite() , or for named grids you can use GetIgnite(String) . Note that you can have multiple instances of IIgnite running in the same process by giving each instance a different name. All members are thread-safe and may be used concurrently from multiple threads."
  },
  "api/Apache.Ignite.EntityFramework.DbCachingMode.html": {
    "href": "api/Apache.Ignite.EntityFramework.DbCachingMode.html",
    "title": "Enum DbCachingMode | Apache Ignite.NET",
    "keywords": "Enum DbCachingMode Represents a second-level caching strategy. Namespace : Apache.Ignite.EntityFramework Assembly : Apache.Ignite.EntityFramework.dll Syntax public enum DbCachingMode Fields Name Description ReadOnly Read-only mode, never invalidates. Database updates are ignored in this mode. Once query results have been cached, they are kept in cache until expired (forever when no expiration is specified). This mode is suitable for data that is not expected to change (like a list of countries and other dictionary data). ReadWrite Read-write mode. Cached data is invalidated when underlying entity set changes. This is \"normal\" cache mode which always provides correct query results. Keep in mind that this mode works correctly only when all database changes are performed via System.Data.Entity.DbContext with Ignite caching configured. Other database updates are not tracked."
  },
  "api/Apache.Ignite.EntityFramework.DbCachingPolicy.html": {
    "href": "api/Apache.Ignite.EntityFramework.DbCachingPolicy.html",
    "title": "Class DbCachingPolicy | Apache Ignite.NET",
    "keywords": "Class DbCachingPolicy Default caching policy implementation: everything is cached with ReadWrite , no expiration. Inheritance System.Object DbCachingPolicy Implements IDbCachingPolicy Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.EntityFramework Assembly : Apache.Ignite.EntityFramework.dll Syntax public class DbCachingPolicy : IDbCachingPolicy Methods CanBeCached(DbQueryInfo) Determines whether the specified query can be cached. Declaration public virtual bool CanBeCached(DbQueryInfo queryInfo) Parameters Type Name Description DbQueryInfo queryInfo The query information. Returns Type Description System.Boolean true if the specified query can be cached; otherwise, false . CanBeCached(DbQueryInfo, Int32) Determines whether specified number of rows should be cached. Declaration public virtual bool CanBeCached(DbQueryInfo queryInfo, int rowCount) Parameters Type Name Description DbQueryInfo queryInfo The query information. System.Int32 rowCount The count of fetched rows. Returns Type Description System.Boolean GetCachingMode(DbQueryInfo) Gets the caching strategy for a give query. Declaration public virtual DbCachingMode GetCachingMode(DbQueryInfo queryInfo) Parameters Type Name Description DbQueryInfo queryInfo The query information. Returns Type Description DbCachingMode Caching strategy for the query. GetExpirationTimeout(DbQueryInfo) Gets the absolute expiration timeout for a given query. Declaration public virtual TimeSpan GetExpirationTimeout(DbQueryInfo queryInfo) Parameters Type Name Description DbQueryInfo queryInfo The query information. Returns Type Description System.TimeSpan Expiration timeout. System.TimeSpan.MaxValue for no expiration. Implements IDbCachingPolicy"
  },
  "api/Apache.Ignite.EntityFramework.DbQueryInfo.html": {
    "href": "api/Apache.Ignite.EntityFramework.DbQueryInfo.html",
    "title": "Class DbQueryInfo | Apache Ignite.NET",
    "keywords": "Class DbQueryInfo Query info. Inheritance System.Object DbQueryInfo Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.EntityFramework Assembly : Apache.Ignite.EntityFramework.dll Syntax public class DbQueryInfo Properties AffectedEntitySets Gets the affected entity sets. Declaration public ICollection<EntitySetBase> AffectedEntitySets { get; } Property Value Type Description System.Collections.Generic.ICollection < System.Data.Entity.Core.Metadata.Edm.EntitySetBase > CommandText Gets the command text. Declaration public string CommandText { get; } Property Value Type Description System.String Parameters Gets the parameters. Declaration public DbParameterCollection Parameters { get; } Property Value Type Description System.Data.Common.DbParameterCollection"
  },
  "index.html": {
    "href": "index.html",
    "title": "Apache Ignite.NET | Apache Ignite.NET",
    "keywords": "Apache Ignite.NET Apache Ignite is a memory-centric distributed database, caching , and processing platform for transactional, analytical, and streaming workloads, delivering in-memory speeds at petabyte scale. API Documentation Gettting Started"
  },
  "api/index.html": {
    "href": "api/index.html",
    "title": "Apache Ignite.NET API Documentation | Apache Ignite.NET",
    "keywords": "Apache Ignite.NET API Documentation Click namespaces on the left to browse the API, or use the search box on top of the page. Ignition class is the API entry point, see various Start overloads."
  },
  "api/Apache.Ignite.Core.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.ComputeTaskAdapter-3.html": {
    "href": "api/Apache.Ignite.Core.Compute.ComputeTaskAdapter-3.html",
    "title": "Class ComputeTaskAdapter<TArg, TJobRes, TTaskRes> | Apache Ignite.NET",
    "keywords": "Class ComputeTaskAdapter<TArg, TJobRes, TTaskRes> Convenience adapter for IComputeTask<TArg, TJobRes, TRes> interface Inheritance System.Object ComputeTaskAdapter<TArg, TJobRes, TTaskRes> ComputeTaskSplitAdapter<TArg, TJobRes, TTaskRes> Implements IComputeTask <TArg, TJobRes, TTaskRes> Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Compute Assembly : Apache.Ignite.Core.dll Syntax public abstract class ComputeTaskAdapter<TArg, TJobRes, TTaskRes> : IComputeTask<TArg, TJobRes, TTaskRes> Type Parameters Name Description TArg TJobRes TTaskRes Methods Map(IList<IClusterNode>, TArg) This method is called to map or split Ignite task into multiple Ignite jobs. This is the first method that gets called when task execution starts. Declaration public abstract IDictionary<IComputeJob<TJobRes>, IClusterNode> Map(IList<IClusterNode> subgrid, TArg arg) Parameters Type Name Description System.Collections.Generic.IList < IClusterNode > subgrid Nodes available for this task execution. Note that order of nodes is guaranteed to be randomized by container. This ensures that every time you simply iterate through Ignite nodes, the order of nodes will be random which over time should result into all nodes being used equally. TArg arg Task execution argument. Can be null . This is the same argument as the one passed into ICompute.Execute() methods. Returns Type Description System.Collections.Generic.IDictionary < IComputeJob <TJobRes>, IClusterNode > Map of Ignite jobs assigned to subgrid node. If null or empty map is returned, exception will be thrown. OnResult(IComputeJobResult<TJobRes>, IList<IComputeJobResult<TJobRes>>) Default implementation which will wait for all jobs to complete before calling Reduce(IList<IComputeJobResult<TJobRes>>) method. If remote job resulted in exception Exception is not null ), then Failover policy will be returned if the exception is instance of ClusterTopologyException or ComputeExecutionRejectedException , which means that remote node either failed or job execution was rejected before it got a chance to start. In all other cases the exception will be rethrown which will ultimately cause task to fail. Declaration public virtual ComputeJobResultPolicy OnResult(IComputeJobResult<TJobRes> res, IList<IComputeJobResult<TJobRes>> rcvd) Parameters Type Name Description IComputeJobResult <TJobRes> res Received remote Ignite executable result. System.Collections.Generic.IList < IComputeJobResult <TJobRes>> rcvd All previously received results. Returns Type Description ComputeJobResultPolicy Result policy that dictates how to process further upcoming job results. Reduce(IList<IComputeJobResult<TJobRes>>) Reduces (or aggregates) results received so far into one compound result to be returned to caller via task. Note, that if some jobs did not succeed and could not be failed over then the list of results passed into this method will include the failed results. Otherwise, failed results will not be in the list. Declaration public abstract TTaskRes Reduce(IList<IComputeJobResult<TJobRes>> results) Parameters Type Name Description System.Collections.Generic.IList < IComputeJobResult <TJobRes>> results Received job results. Note that if task class has ComputeTaskNoResultCacheAttribute attribute, then this list will be empty. Returns Type Description TTaskRes Task result constructed from results of remote executions. Implements IComputeTask<TArg, TJobRes, TRes>"
  },
  "api/Apache.Ignite.Core.Compute.ComputeTaskCancelledException.html": {
    "href": "api/Apache.Ignite.Core.Compute.ComputeTaskCancelledException.html",
    "title": "Class ComputeTaskCancelledException | Apache Ignite.NET",
    "keywords": "Class ComputeTaskCancelledException This exception indicates that Ignite task was cancelled. Inheritance System.Object System.Exception IgniteException ComputeTaskCancelledException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Compute Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class ComputeTaskCancelledException : IgniteException, ISerializable, _Exception Constructors ComputeTaskCancelledException() Initializes a new instance of the ComputeTaskCancelledException class. Declaration public ComputeTaskCancelledException() ComputeTaskCancelledException(SerializationInfo, StreamingContext) Initializes a new instance of the ComputeTaskCancelledException class. Declaration protected ComputeTaskCancelledException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. ComputeTaskCancelledException(String) Initializes a new instance of the ComputeTaskCancelledException class. Declaration public ComputeTaskCancelledException(string message) Parameters Type Name Description System.String message The message that describes the error. ComputeTaskCancelledException(String, Exception) Initializes a new instance of the ComputeTaskCancelledException class. Declaration public ComputeTaskCancelledException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Configuration.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.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.Cluster.ICluster.html": {
    "href": "api/Apache.Ignite.Core.Cluster.ICluster.html",
    "title": "Interface ICluster | Apache Ignite.NET",
    "keywords": "Interface ICluster Represents whole cluster (group of all nodes in a cluster). All members are thread-safe and may be used concurrently from multiple threads. Inherited Members IClusterGroup.Ignite IClusterGroup.GetCompute() IClusterGroup.ForNodes(IEnumerable<IClusterNode>) IClusterGroup.ForNodes(IClusterNode[]) IClusterGroup.ForNodeIds(IEnumerable<Guid>) IClusterGroup.ForNodeIds(Guid[]) IClusterGroup.ForPredicate(Func<IClusterNode, Boolean>) IClusterGroup.ForAttribute(String, String) IClusterGroup.ForCacheNodes(String) IClusterGroup.ForDataNodes(String) IClusterGroup.ForClientNodes(String) IClusterGroup.ForRemotes() IClusterGroup.ForDaemons() IClusterGroup.ForHost(IClusterNode) IClusterGroup.ForRandom() IClusterGroup.ForOldest() IClusterGroup.ForYoungest() IClusterGroup.ForDotNet() IClusterGroup.ForServers() IClusterGroup.GetNodes() IClusterGroup.GetNode(Guid) IClusterGroup.GetNode() IClusterGroup.GetMetrics() IClusterGroup.GetMessaging() IClusterGroup.GetEvents() IClusterGroup.GetServices() Namespace : Apache.Ignite.Core.Cluster Assembly : Apache.Ignite.Core.dll Syntax public interface ICluster : IClusterGroup Properties ClientReconnectTask Gets the reconnect task, which will transition to Completed state when local client node reconnects to the cluster. Result of the task indicates whether cluster has been restarted. If local node is not in client mode or is not disconnected, returns completed task. Declaration Task<bool> ClientReconnectTask { get; } Property Value Type Description System.Threading.Tasks.Task < System.Boolean > The reconnect task. TopologyVersion Gets current topology version. In case of TCP discovery topology versions are sequential they start from 1 and get incremented every time whenever a node joins or leaves. For other discovery SPIs topology versions may not be (and likely are not) sequential. Declaration long TopologyVersion { get; } Property Value Type Description System.Int64 Current topology version. Methods DisableWal(String) Disables write-ahead logging for specified cache. When WAL is disabled, changes are not logged to disk. This significantly improves cache update speed.The drawback is absence of local crash-recovery guarantees. If node is crashed, local content of WAL-disabled cache will be cleared on restart to avoid data corruption. Internally this method will wait for all current cache operations to finish and prevent new cache operations from being executed.Then checkpoint is initiated to flush all data to disk.Control is returned to the callee when all dirty pages are prepared for checkpoint, but not necessarily flushed to disk. WAL state can be changed only for persistent caches. Declaration void DisableWal(string cacheName) Parameters Type Name Description System.String cacheName Name of the cache. EnableWal(String) Enables write-ahead logging for specified cache. Restoring crash-recovery guarantees of a previous call to DisableWal(String) . Internally this method will wait for all current cache operations to finish and prevent new cache operations from being executed. Then checkpoint is initiated to flush all data to disk. Control is returned to the callee when all data is persisted to disk. WAL state can be changed only for persistent caches. Declaration void EnableWal(string cacheName) Parameters Type Name Description System.String cacheName Name of the cache. ForLocal() Gets monadic projection consisting from the local node. Declaration IClusterGroup ForLocal() Returns Type Description IClusterGroup Monadic projection consisting from the local node. GetBaselineTopology() Gets the baseline topology. Returns null if SetBaselineTopology(Int64) has not been called. Declaration ICollection<IBaselineNode> GetBaselineTopology() Returns Type Description System.Collections.Generic.ICollection < IBaselineNode > GetLocalNode() Gets local Ignite node. Declaration IClusterNode GetLocalNode() Returns Type Description IClusterNode Local Ignite node. GetTopology(Int64) Gets a topology by version. Returns null if topology history storage doesn't contain specified topology version (history currently keeps the last 1000 snapshots). Declaration ICollection<IClusterNode> GetTopology(long ver) Parameters Type Name Description System.Int64 ver Topology version. Returns Type Description System.Collections.Generic.ICollection < IClusterNode > Collection of Ignite nodes which represented by specified topology version, if it is present in history storage, null otherwise. Exceptions Type Condition IgniteException If underlying SPI implementation does not support topology history. Currently only org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi supports topology history. IsActive() Determines whether this grid is in active state. Declaration bool IsActive() Returns Type Description System.Boolean true if the grid is active; otherwise, false . IsWalEnabled(String) Determines whether write-ahead logging is enabled for specified cache. Declaration bool IsWalEnabled(string cacheName) Parameters Type Name Description System.String cacheName Name of the cache. Returns Type Description System.Boolean PingNode(Guid) Pings a remote node. Declaration bool PingNode(Guid nodeId) Parameters Type Name Description System.Guid nodeId ID of a node to ping. Returns Type Description System.Boolean True if node for a given ID is alive, false otherwise. ResetMetrics() Resets local I/O, job, and task execution metrics. Declaration void ResetMetrics() SetActive(Boolean) Changes Ignite grid state to active or inactive. Declaration void SetActive(bool isActive) Parameters Type Name Description System.Boolean isActive SetBaselineTopology(IEnumerable<IBaselineNode>) Sets the baseline topology nodes. Declaration void SetBaselineTopology(IEnumerable<IBaselineNode> nodes) Parameters Type Name Description System.Collections.Generic.IEnumerable < IBaselineNode > nodes The nodes. SetBaselineTopology(Int64) Sets the baseline topology from the cluster topology of the given version. This method requires active cluster ( IsActive() ). Declaration void SetBaselineTopology(long topologyVersion) Parameters Type Name Description System.Int64 topologyVersion The topology version. SetTxTimeoutOnPartitionMapExchange(TimeSpan) Set transaction timeout on partition map exchange Declaration void SetTxTimeoutOnPartitionMapExchange(TimeSpan timeout) Parameters Type Name Description System.TimeSpan timeout"
  },
  "api/Apache.Ignite.Core.Cluster.IClusterGroup.html": {
    "href": "api/Apache.Ignite.Core.Cluster.IClusterGroup.html",
    "title": "Interface IClusterGroup | Apache Ignite.NET",
    "keywords": "Interface IClusterGroup Defines grid projection which represents a common functionality over a group of nodes. Grid projection allows to group Ignite nodes into various subgroups to perform distributed operations on them. All ForXXX(...)' methods will create a child grid projection from existing projection. If you create a new projection from current one, then the resulting projection will include a subset of nodes from current projection. The following code snippet shows how to create grid projections: var g = Ignition.GetIgnite(); // Projection over remote nodes. var remoteNodes = g.ForRemotes(); // Projection over random remote node. var randomNode = g.ForRandom(); // Projection over all nodes with cache named \"myCache\" enabled. var cacheNodes = g.ForCacheNodes(\"myCache\"); // Projection over all nodes that have user attribute \"group\" set to value \"worker\". var workerNodes = g.ForAttribute(\"group\", \"worker\"); Grid projection provides functionality for executing tasks and closures over nodes in this projection using GetCompute() . All members are thread-safe and may be used concurrently from multiple threads. Namespace : Apache.Ignite.Core.Cluster Assembly : Apache.Ignite.Core.dll Syntax public interface IClusterGroup Properties Ignite Instance of Ignite. Declaration IIgnite Ignite { get; } Property Value Type Description IIgnite Methods ForAttribute(String, String) Creates projection for nodes containing given name and value specified in user attributes. Declaration IClusterGroup ForAttribute(string name, string val) Parameters Type Name Description System.String name Name of the attribute. System.String val Optional attribute value to match. Returns Type Description IClusterGroup Grid projection for nodes containing specified attribute. ForCacheNodes(String) Creates projection for all nodes that have cache with specified name running. Declaration IClusterGroup ForCacheNodes(string name) Parameters Type Name Description System.String name Cache name to include into projection. Returns Type Description IClusterGroup Projection over nodes that have specified cache running. ForClientNodes(String) Creates projection for all nodes that have cache with specified name running and cache distribution mode is CLIENT_ONLY or NEAR_ONLY. Declaration IClusterGroup ForClientNodes(string name) Parameters Type Name Description System.String name Cache name to include into projection. Returns Type Description IClusterGroup Projection over nodes that have specified cache running. ForDaemons() Gets a cluster group consisting of the daemon nodes. Daemon nodes are the usual grid nodes that participate in topology but not visible on the main APIs, i.e. they are not part of any cluster group. The only way to see daemon nodes is to use this method. Daemon nodes are used primarily for management and monitoring functionality that is build on Ignite and needs to participate in the topology, but also needs to be excluded from the \"normal\" topology, so that it won't participate in the task execution or in-memory data grid storage. Declaration IClusterGroup ForDaemons() Returns Type Description IClusterGroup Cluster group consisting of the daemon nodes. ForDataNodes(String) Creates projection for all nodes that have cache with specified name running and cache distribution mode is PARTITIONED_ONLY or NEAR_PARTITIONED. Declaration IClusterGroup ForDataNodes(string name) Parameters Type Name Description System.String name Cache name to include into projection. Returns Type Description IClusterGroup Projection over nodes that have specified cache running. ForDotNet() Creates grid projection for nodes supporting .Net, i.e. for nodes started with Apache.Ignite.exe. Declaration IClusterGroup ForDotNet() Returns Type Description IClusterGroup Grid projection for nodes supporting .Net. ForHost(IClusterNode) Gets grid projection consisting from the nodes in this projection residing on the same host as given node. Declaration IClusterGroup ForHost(IClusterNode node) Parameters Type Name Description IClusterNode node Node residing on the host for which projection is created. Returns Type Description IClusterGroup Projection for nodes residing on the same host as passed in node. ForNodeIds(IEnumerable<Guid>) Creates a grid projection over a given set of node IDs. Declaration IClusterGroup ForNodeIds(IEnumerable<Guid> ids) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Guid > ids Collection of node IDs to create a projection from. Returns Type Description IClusterGroup Projection over provided Ignite node IDs. ForNodeIds(Guid[]) Creates a grid projection over a given set of node IDs. Declaration IClusterGroup ForNodeIds(params Guid[] ids) Parameters Type Name Description System.Guid [] ids Collection of node IDs to create a projection from. Returns Type Description IClusterGroup Projection over provided Ignite node IDs. ForNodes(IClusterNode[]) Creates a grid projection over a given set of nodes. Declaration IClusterGroup ForNodes(params IClusterNode[] nodes) Parameters Type Name Description IClusterNode [] nodes Collection of nodes to create a projection from. Returns Type Description IClusterGroup Projection over provided Ignite nodes. ForNodes(IEnumerable<IClusterNode>) Creates a grid projection over a given set of nodes. Declaration IClusterGroup ForNodes(IEnumerable<IClusterNode> nodes) Parameters Type Name Description System.Collections.Generic.IEnumerable < IClusterNode > nodes Collection of nodes to create a projection from. Returns Type Description IClusterGroup Projection over provided Ignite nodes. ForOldest() Creates grid projection with one oldest node in the current projection. The resulting projection is dynamic and will always pick the next oldest node if the previous one leaves topology even after the projection has been created. Declaration IClusterGroup ForOldest() Returns Type Description IClusterGroup Grid projection with one oldest node from the current projection. ForPredicate(Func<IClusterNode, Boolean>) Creates a grid projection which includes all nodes that pass the given predicate filter. Declaration IClusterGroup ForPredicate(Func<IClusterNode, bool> p) Parameters Type Name Description System.Func < IClusterNode , System.Boolean > p Predicate filter for nodes to include into this projection. Returns Type Description IClusterGroup Grid projection for nodes that passed the predicate filter. ForRandom() Creates grid projection with one random node from current projection. Declaration IClusterGroup ForRandom() Returns Type Description IClusterGroup Grid projection with one random node from current projection. ForRemotes() Gets grid projection consisting from the nodes in this projection excluding the local node. Declaration IClusterGroup ForRemotes() Returns Type Description IClusterGroup Grid projection consisting from the nodes in this projection excluding the local node. ForServers() Creates a cluster group of nodes started in server mode ( ClientMode ). Declaration IClusterGroup ForServers() Returns Type Description IClusterGroup Cluster group of nodes started in server mode. ForYoungest() Creates grid projection with one youngest node in the current projection. The resulting projection is dynamic and will always pick the newest node in the topology, even if more nodes entered after the projection has been created. Declaration IClusterGroup ForYoungest() Returns Type Description IClusterGroup Grid projection with one youngest node from the current projection. GetCompute() Gets compute functionality over this grid projection. All operations on the returned ICompute instance will only include nodes from this projection. Declaration ICompute GetCompute() Returns Type Description ICompute Compute instance over this grid projection. GetEvents() Gets events facade over nodes within this cluster group. All operations on the returned IEvents > instance will only include nodes from current cluster group. Declaration IEvents GetEvents() Returns Type Description IEvents Events instance over this cluster group. GetMessaging() Gets messaging facade over nodes within this cluster group. All operations on the returned IMessaging > instance will only include nodes from current cluster group. Declaration IMessaging GetMessaging() Returns Type Description IMessaging Messaging instance over this cluster group. GetMetrics() Gets a metrics snapshot for this projection Declaration IClusterMetrics GetMetrics() Returns Type Description IClusterMetrics Grid projection metrics snapshot. GetNode() Gets first node from the list of nodes in this projection. Declaration IClusterNode GetNode() Returns Type Description IClusterNode Node. GetNode(Guid) Gets a node for given ID from this grid projection. Declaration IClusterNode GetNode(Guid id) Parameters Type Name Description System.Guid id Node ID. Returns Type Description IClusterNode Node with given ID from this projection or null if such node does not exist in this projection. GetNodes() Gets read-only collections of nodes in this projection. Declaration ICollection<IClusterNode> GetNodes() Returns Type Description System.Collections.Generic.ICollection < IClusterNode > All nodes in this projection. GetServices() Gets services facade over nodes within this cluster group. All operations on the returned IServices > instance will only include nodes from current cluster group. Declaration IServices GetServices() Returns Type Description IServices Services instance over this cluster group."
  },
  "api/Apache.Ignite.Core.Compute.ICompute.html": {
    "href": "api/Apache.Ignite.Core.Compute.ICompute.html",
    "title": "Interface ICompute | Apache Ignite.NET",
    "keywords": "Interface ICompute Defines Ignite functionality for executing tasks and closures over nodes in the IClusterGroup . Instance of ICompute is obtained from grid projection using GetCompute() method. Note that if attempt is made to execute a computation over an empty projection (i.e. projection that does not have any alive nodes), ClusterGroupEmptyException will be thrown out of result task. Ignite must select a node for a computation to be executed. The node will be selected based on the underlying GridLoadBalancingSpi , which by default sequentially picks next available node from grid projection. Other load balancing policies, such as random or adaptive , can be configured as well by selecting different load balancing SPI in Ignite configuration. If your logic requires some custom load balancing behavior, consider implementing ComputeTask in Java directly. Ignite guarantees that as long as there is at least one Ignite node standing, every job will be executed. Jobs will automatically failover to another node if a remote node crashed or has rejected execution due to lack of resources. By default, in case of failover, next load balanced node will be picked for job execution. Also jobs will never be re-routed to the nodes they have failed on. This behavior can be changed by configuring any of the existing or a custom FailoverSpi in Ignite configuration. All members are thread-safe and may be used concurrently from multiple threads. Namespace : Apache.Ignite.Core.Compute Assembly : Apache.Ignite.Core.dll Syntax public interface ICompute Properties ClusterGroup Grid projection to which this compute instance belongs. Declaration IClusterGroup ClusterGroup { get; } Property Value Type Description IClusterGroup Methods AffinityCall<TRes>(String, Object, IComputeFunc<TRes>) Executes given job on the node where data for provided affinity key is located (a.k.a. affinity co-location). Declaration TRes AffinityCall<TRes>(string cacheName, object affinityKey, IComputeFunc<TRes> clo) Parameters Type Name Description System.String cacheName Name of the cache to use for affinity co-location. System.Object affinityKey Affinity key. IComputeFunc <TRes> clo Job to execute. Returns Type Description TRes Job result for this execution. Type Parameters Name Description TRes Type of job result. AffinityCallAsync<TRes>(String, Object, IComputeFunc<TRes>) Executes given job on the node where data for provided affinity key is located (a.k.a. affinity co-location). Declaration Task<TRes> AffinityCallAsync<TRes>(string cacheName, object affinityKey, IComputeFunc<TRes> clo) Parameters Type Name Description System.String cacheName Name of the cache to use for affinity co-location. System.Object affinityKey Affinity key. IComputeFunc <TRes> clo Job to execute. Returns Type Description System.Threading.Tasks.Task <TRes> Job result for this execution. Type Parameters Name Description TRes Type of job result. AffinityCallAsync<TRes>(String, Object, IComputeFunc<TRes>, CancellationToken) Executes given job on the node where data for provided affinity key is located (a.k.a. affinity co-location). Declaration Task<TRes> AffinityCallAsync<TRes>(string cacheName, object affinityKey, IComputeFunc<TRes> clo, CancellationToken cancellationToken) Parameters Type Name Description System.String cacheName Name of the cache to use for affinity co-location. System.Object affinityKey Affinity key. IComputeFunc <TRes> clo Job to execute. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task <TRes> Job result for this execution. Type Parameters Name Description TRes Type of job result. AffinityRun(String, Object, IComputeAction) Executes given job on the node where data for provided affinity key is located (a.k.a. affinity co-location). Declaration void AffinityRun(string cacheName, object affinityKey, IComputeAction action) Parameters Type Name Description System.String cacheName Name of the cache to use for affinity co-location. System.Object affinityKey Affinity key. IComputeAction action Job to execute. AffinityRunAsync(String, Object, IComputeAction) Executes given job on the node where data for provided affinity key is located (a.k.a. affinity co-location). Declaration Task AffinityRunAsync(string cacheName, object affinityKey, IComputeAction action) Parameters Type Name Description System.String cacheName Name of the cache to use for affinity co-location. System.Object affinityKey Affinity key. IComputeAction action Job to execute. Returns Type Description System.Threading.Tasks.Task AffinityRunAsync(String, Object, IComputeAction, CancellationToken) Executes given job on the node where data for provided affinity key is located (a.k.a. affinity co-location). Declaration Task AffinityRunAsync(string cacheName, object affinityKey, IComputeAction action, CancellationToken cancellationToken) Parameters Type Name Description System.String cacheName Name of the cache to use for affinity co-location. System.Object affinityKey Affinity key. IComputeAction action Job to execute. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task Task. Apply<TArg, TRes>(IComputeFunc<TArg, TRes>, TArg) Executes provided closure job on a node in this grid projection. Declaration TRes Apply<TArg, TRes>(IComputeFunc<TArg, TRes> clo, TArg arg) Parameters Type Name Description IComputeFunc <TArg, TRes> clo Job to run. TArg arg Job argument. Returns Type Description TRes Job result for this execution. Type Parameters Name Description TArg Type of argument. TRes Type of job result. Apply<TArg, TRes>(IComputeFunc<TArg, TRes>, IEnumerable<TArg>) Executes provided closure job on nodes within this grid projection. A new job is executed for every argument in the passed in collection. The number of actual job executions will be equal to size of the job arguments collection. Declaration ICollection<TRes> Apply<TArg, TRes>(IComputeFunc<TArg, TRes> clo, IEnumerable<TArg> args) Parameters Type Name Description IComputeFunc <TArg, TRes> clo Job to run. System.Collections.Generic.IEnumerable <TArg> args Job arguments. Returns Type Description System.Collections.Generic.ICollection <TRes> Collection of job results. Type Parameters Name Description TArg Type of argument. TRes Type of job result. Apply<TArg, TFuncRes, TRes>(IComputeFunc<TArg, TFuncRes>, IEnumerable<TArg>, IComputeReducer<TFuncRes, TRes>) Executes provided closure job on nodes within this grid projection. A new job is executed for every argument in the passed in collection. The number of actual job executions will be equal to size of the job arguments collection. The returned job results will be reduced into an individual result by provided reducer. Declaration TRes Apply<TArg, TFuncRes, TRes>(IComputeFunc<TArg, TFuncRes> clo, IEnumerable<TArg> args, IComputeReducer<TFuncRes, TRes> rdc) Parameters Type Name Description IComputeFunc <TArg, TFuncRes> clo Job to run. System.Collections.Generic.IEnumerable <TArg> args Job arguments. IComputeReducer <TFuncRes, TRes> rdc Reducer to reduce all job results into one individual return value. Returns Type Description TRes Reduced job result for this execution. Type Parameters Name Description TArg Type of argument. TFuncRes Type of function result. TRes Type of result after reduce. ApplyAsync<TArg, TRes>(IComputeFunc<TArg, TRes>, TArg) Executes provided closure job on a node in this grid projection. Declaration Task<TRes> ApplyAsync<TArg, TRes>(IComputeFunc<TArg, TRes> clo, TArg arg) Parameters Type Name Description IComputeFunc <TArg, TRes> clo Job to run. TArg arg Job argument. Returns Type Description System.Threading.Tasks.Task <TRes> Job result for this execution. Type Parameters Name Description TArg Type of argument. TRes Type of job result. ApplyAsync<TArg, TRes>(IComputeFunc<TArg, TRes>, TArg, CancellationToken) Executes provided closure job on a node in this grid projection. Declaration Task<TRes> ApplyAsync<TArg, TRes>(IComputeFunc<TArg, TRes> clo, TArg arg, CancellationToken cancellationToken) Parameters Type Name Description IComputeFunc <TArg, TRes> clo Job to run. TArg arg Job argument. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task <TRes> Job result for this execution. Type Parameters Name Description TArg Type of argument. TRes Type of job result. ApplyAsync<TArg, TRes>(IComputeFunc<TArg, TRes>, IEnumerable<TArg>) Executes provided closure job on nodes within this grid projection. A new job is executed for every argument in the passed in collection. The number of actual job executions will be equal to size of the job arguments collection. Declaration Task<ICollection<TRes>> ApplyAsync<TArg, TRes>(IComputeFunc<TArg, TRes> clo, IEnumerable<TArg> args) Parameters Type Name Description IComputeFunc <TArg, TRes> clo Job to run. System.Collections.Generic.IEnumerable <TArg> args Job arguments. Returns Type Description System.Threading.Tasks.Task < System.Collections.Generic.ICollection <TRes>> Collection of job results. Type Parameters Name Description TArg Type of argument. TRes Type of job result. ApplyAsync<TArg, TRes>(IComputeFunc<TArg, TRes>, IEnumerable<TArg>, CancellationToken) Executes provided closure job on nodes within this grid projection. A new job is executed for every argument in the passed in collection. The number of actual job executions will be equal to size of the job arguments collection. Declaration Task<ICollection<TRes>> ApplyAsync<TArg, TRes>(IComputeFunc<TArg, TRes> clo, IEnumerable<TArg> args, CancellationToken cancellationToken) Parameters Type Name Description IComputeFunc <TArg, TRes> clo Job to run. System.Collections.Generic.IEnumerable <TArg> args Job arguments. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task < System.Collections.Generic.ICollection <TRes>> Collection of job results. Type Parameters Name Description TArg Type of argument. TRes Type of job result. ApplyAsync<TArg, TFuncRes, TRes>(IComputeFunc<TArg, TFuncRes>, IEnumerable<TArg>, IComputeReducer<TFuncRes, TRes>) Executes provided closure job on nodes within this grid projection. A new job is executed for every argument in the passed in collection. The number of actual job executions will be equal to size of the job arguments collection. The returned job results will be reduced into an individual result by provided reducer. Declaration Task<TRes> ApplyAsync<TArg, TFuncRes, TRes>(IComputeFunc<TArg, TFuncRes> clo, IEnumerable<TArg> args, IComputeReducer<TFuncRes, TRes> rdc) Parameters Type Name Description IComputeFunc <TArg, TFuncRes> clo Job to run. System.Collections.Generic.IEnumerable <TArg> args Job arguments. IComputeReducer <TFuncRes, TRes> rdc Reducer to reduce all job results into one individual return value. Returns Type Description System.Threading.Tasks.Task <TRes> Reduced job result for this execution. Type Parameters Name Description TArg Type of argument. TFuncRes Type of function result. TRes Type of result after reduce. ApplyAsync<TArg, TFuncRes, TRes>(IComputeFunc<TArg, TFuncRes>, IEnumerable<TArg>, IComputeReducer<TFuncRes, TRes>, CancellationToken) Executes provided closure job on nodes within this grid projection. A new job is executed for every argument in the passed in collection. The number of actual job executions will be equal to size of the job arguments collection. The returned job results will be reduced into an individual result by provided reducer. Declaration Task<TRes> ApplyAsync<TArg, TFuncRes, TRes>(IComputeFunc<TArg, TFuncRes> clo, IEnumerable<TArg> args, IComputeReducer<TFuncRes, TRes> rdc, CancellationToken cancellationToken) Parameters Type Name Description IComputeFunc <TArg, TFuncRes> clo Job to run. System.Collections.Generic.IEnumerable <TArg> args Job arguments. IComputeReducer <TFuncRes, TRes> rdc Reducer to reduce all job results into one individual return value. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task <TRes> Reduced job result for this execution. Type Parameters Name Description TArg Type of argument. TFuncRes Type of function result. TRes Type of result after reduce. Broadcast(IComputeAction) Broadcasts given job to all nodes in grid projection. Declaration void Broadcast(IComputeAction action) Parameters Type Name Description IComputeAction action Job to broadcast to all projection nodes. Broadcast<TRes>(IComputeFunc<TRes>) Broadcasts given job to all nodes in grid projection. Every participating node will return a job result. Declaration ICollection<TRes> Broadcast<TRes>(IComputeFunc<TRes> clo) Parameters Type Name Description IComputeFunc <TRes> clo Job to broadcast to all projection nodes. Returns Type Description System.Collections.Generic.ICollection <TRes> Collection of results for this execution. Type Parameters Name Description TRes Broadcast<TArg, TRes>(IComputeFunc<TArg, TRes>, TArg) Broadcasts given closure job with passed in argument to all nodes in grid projection. Every participating node will return a job result. Declaration ICollection<TRes> Broadcast<TArg, TRes>(IComputeFunc<TArg, TRes> clo, TArg arg) Parameters Type Name Description IComputeFunc <TArg, TRes> clo Job to broadcast to all projection nodes. TArg arg Job closure argument. Returns Type Description System.Collections.Generic.ICollection <TRes> Collection of results for this execution. Type Parameters Name Description TArg Type of argument. TRes Type of job result. BroadcastAsync(IComputeAction) Broadcasts given job to all nodes in grid projection. Declaration Task BroadcastAsync(IComputeAction action) Parameters Type Name Description IComputeAction action Job to broadcast to all projection nodes. Returns Type Description System.Threading.Tasks.Task BroadcastAsync(IComputeAction, CancellationToken) Broadcasts given job to all nodes in grid projection. Declaration Task BroadcastAsync(IComputeAction action, CancellationToken cancellationToken) Parameters Type Name Description IComputeAction action Job to broadcast to all projection nodes. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task Task. BroadcastAsync<TRes>(IComputeFunc<TRes>) Broadcasts given job to all nodes in grid projection. Every participating node will return a job result. Declaration Task<ICollection<TRes>> BroadcastAsync<TRes>(IComputeFunc<TRes> clo) Parameters Type Name Description IComputeFunc <TRes> clo Job to broadcast to all projection nodes. Returns Type Description System.Threading.Tasks.Task < System.Collections.Generic.ICollection <TRes>> Collection of results for this execution. Type Parameters Name Description TRes BroadcastAsync<TRes>(IComputeFunc<TRes>, CancellationToken) Broadcasts given job to all nodes in grid projection. Every participating node will return a job result. Declaration Task<ICollection<TRes>> BroadcastAsync<TRes>(IComputeFunc<TRes> clo, CancellationToken cancellationToken) Parameters Type Name Description IComputeFunc <TRes> clo Job to broadcast to all projection nodes. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task < System.Collections.Generic.ICollection <TRes>> Collection of results for this execution. Type Parameters Name Description TRes The type of the resource. BroadcastAsync<TArg, TRes>(IComputeFunc<TArg, TRes>, TArg) Broadcasts given closure job with passed in argument to all nodes in grid projection. Every participating node will return a job result. Declaration Task<ICollection<TRes>> BroadcastAsync<TArg, TRes>(IComputeFunc<TArg, TRes> clo, TArg arg) Parameters Type Name Description IComputeFunc <TArg, TRes> clo Job to broadcast to all projection nodes. TArg arg Job closure argument. Returns Type Description System.Threading.Tasks.Task < System.Collections.Generic.ICollection <TRes>> Collection of results for this execution. Type Parameters Name Description TArg Type of argument. TRes Type of job result. BroadcastAsync<TArg, TRes>(IComputeFunc<TArg, TRes>, TArg, CancellationToken) Broadcasts given closure job with passed in argument to all nodes in grid projection. Every participating node will return a job result. Declaration Task<ICollection<TRes>> BroadcastAsync<TArg, TRes>(IComputeFunc<TArg, TRes> clo, TArg arg, CancellationToken cancellationToken) Parameters Type Name Description IComputeFunc <TArg, TRes> clo Job to broadcast to all projection nodes. TArg arg Job closure argument. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task < System.Collections.Generic.ICollection <TRes>> Collection of results for this execution. Type Parameters Name Description TArg Type of argument. TRes Type of job result. Call<TRes>(IComputeFunc<TRes>) Executes provided job on a node in this grid projection. The result of the job execution is returned from the result closure. Declaration TRes Call<TRes>(IComputeFunc<TRes> clo) Parameters Type Name Description IComputeFunc <TRes> clo Job to execute. Returns Type Description TRes Job result for this execution. Type Parameters Name Description TRes Type of job result. Call<TRes>(IEnumerable<IComputeFunc<TRes>>) Executes collection of jobs on nodes within this grid projection. Declaration ICollection<TRes> Call<TRes>(IEnumerable<IComputeFunc<TRes>> clos) Parameters Type Name Description System.Collections.Generic.IEnumerable < IComputeFunc <TRes>> clos Collection of jobs to execute. Returns Type Description System.Collections.Generic.ICollection <TRes> Collection of job results for this execution. Type Parameters Name Description TRes Type of job result. Call<TFuncRes, TRes>(IEnumerable<IComputeFunc<TFuncRes>>, IComputeReducer<TFuncRes, TRes>) Executes collection of jobs on nodes within this grid projection. Declaration TRes Call<TFuncRes, TRes>(IEnumerable<IComputeFunc<TFuncRes>> clos, IComputeReducer<TFuncRes, TRes> reducer) Parameters Type Name Description System.Collections.Generic.IEnumerable < IComputeFunc <TFuncRes>> clos Collection of jobs to execute. IComputeReducer <TFuncRes, TRes> reducer Reducer to reduce all job results into one individual return value. Returns Type Description TRes Reduced job result for this execution. Type Parameters Name Description TFuncRes Type of function result. TRes Type of result after reduce. CallAsync<TRes>(IComputeFunc<TRes>) Executes provided job on a node in this grid projection. The result of the job execution is returned from the result closure. Declaration Task<TRes> CallAsync<TRes>(IComputeFunc<TRes> clo) Parameters Type Name Description IComputeFunc <TRes> clo Job to execute. Returns Type Description System.Threading.Tasks.Task <TRes> Job result for this execution. Type Parameters Name Description TRes Type of job result. CallAsync<TRes>(IComputeFunc<TRes>, CancellationToken) Executes provided job on a node in this grid projection. The result of the job execution is returned from the result closure. Declaration Task<TRes> CallAsync<TRes>(IComputeFunc<TRes> clo, CancellationToken cancellationToken) Parameters Type Name Description IComputeFunc <TRes> clo Job to execute. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task <TRes> Job result for this execution. Type Parameters Name Description TRes Type of job result. CallAsync<TRes>(IEnumerable<IComputeFunc<TRes>>) Executes collection of jobs on nodes within this grid projection. Declaration Task<ICollection<TRes>> CallAsync<TRes>(IEnumerable<IComputeFunc<TRes>> clos) Parameters Type Name Description System.Collections.Generic.IEnumerable < IComputeFunc <TRes>> clos Collection of jobs to execute. Returns Type Description System.Threading.Tasks.Task < System.Collections.Generic.ICollection <TRes>> Collection of job results for this execution. Type Parameters Name Description TRes Type of job result. CallAsync<TRes>(IEnumerable<IComputeFunc<TRes>>, CancellationToken) Executes collection of jobs on nodes within this grid projection. Declaration Task<ICollection<TRes>> CallAsync<TRes>(IEnumerable<IComputeFunc<TRes>> clos, CancellationToken cancellationToken) Parameters Type Name Description System.Collections.Generic.IEnumerable < IComputeFunc <TRes>> clos Collection of jobs to execute. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task < System.Collections.Generic.ICollection <TRes>> Collection of job results for this execution. Type Parameters Name Description TRes Type of job result. CallAsync<TFuncRes, TRes>(IEnumerable<IComputeFunc<TFuncRes>>, IComputeReducer<TFuncRes, TRes>) Executes collection of jobs on nodes within this grid projection. Declaration Task<TRes> CallAsync<TFuncRes, TRes>(IEnumerable<IComputeFunc<TFuncRes>> clos, IComputeReducer<TFuncRes, TRes> reducer) Parameters Type Name Description System.Collections.Generic.IEnumerable < IComputeFunc <TFuncRes>> clos Collection of jobs to execute. IComputeReducer <TFuncRes, TRes> reducer Reducer to reduce all job results into one individual return value. Returns Type Description System.Threading.Tasks.Task <TRes> Reduced job result for this execution. Type Parameters Name Description TFuncRes Type of function result. TRes Type of result after reduce. CallAsync<TFuncRes, TRes>(IEnumerable<IComputeFunc<TFuncRes>>, IComputeReducer<TFuncRes, TRes>, CancellationToken) Executes collection of jobs on nodes within this grid projection. Declaration Task<TRes> CallAsync<TFuncRes, TRes>(IEnumerable<IComputeFunc<TFuncRes>> clos, IComputeReducer<TFuncRes, TRes> reducer, CancellationToken cancellationToken) Parameters Type Name Description System.Collections.Generic.IEnumerable < IComputeFunc <TFuncRes>> clos Collection of jobs to execute. IComputeReducer <TFuncRes, TRes> reducer Reducer to reduce all job results into one individual return value. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task <TRes> Reduced job result for this execution. Type Parameters Name Description TFuncRes Type of function result. TRes Type of result after reduce. Execute<TJobRes, TRes>(IComputeTask<TJobRes, TRes>) Executes given task on the grid projection. For step-by-step explanation of task execution process refer to IComputeTask<TArg, TJobRes, TRes> documentation. Declaration TRes Execute<TJobRes, TRes>(IComputeTask<TJobRes, TRes> task) Parameters Type Name Description IComputeTask <TJobRes, TRes> task Task to execute. Returns Type Description TRes Task result. Type Parameters Name Description TJobRes Type of job result. TRes Type of reduce result. Execute<TJobRes, TRes>(Type) Executes given task on the grid projection. For step-by-step explanation of task execution process refer to IComputeTask<TArg, TJobRes, TRes> documentation. Declaration TRes Execute<TJobRes, TRes>(Type taskType) Parameters Type Name Description System.Type taskType Task type. Returns Type Description TRes Task result. Type Parameters Name Description TJobRes Type of job result. TRes Type of reduce result. Execute<TArg, TJobRes, TRes>(IComputeTask<TArg, TJobRes, TRes>, TArg) Executes given task on the grid projection. For step-by-step explanation of task execution process refer to IComputeTask<TArg, TJobRes, TRes> documentation. Declaration TRes Execute<TArg, TJobRes, TRes>(IComputeTask<TArg, TJobRes, TRes> task, TArg taskArg) Parameters Type Name Description IComputeTask <TArg, TJobRes, TRes> task Task to execute. TArg taskArg Optional task argument. Returns Type Description TRes Task result. Type Parameters Name Description TArg Argument type. TJobRes Type of job result. TRes Type of final task result. Execute<TArg, TJobRes, TRes>(Type, TArg) Executes given task on the grid projection. For step-by-step explanation of task execution process refer to IComputeTask<TArg, TJobRes, TRes> documentation. Declaration TRes Execute<TArg, TJobRes, TRes>(Type taskType, TArg taskArg) Parameters Type Name Description System.Type taskType Task type. TArg taskArg Optional task argument. Returns Type Description TRes Task result. Type Parameters Name Description TArg Argument type. TJobRes Type of job result. TRes Type of reduce result. ExecuteAsync<TJobRes, TRes>(IComputeTask<TJobRes, TRes>) Executes given task on the grid projection. For step-by-step explanation of task execution process refer to IComputeTask<TArg, TJobRes, TRes> documentation. Declaration Task<TRes> ExecuteAsync<TJobRes, TRes>(IComputeTask<TJobRes, TRes> task) Parameters Type Name Description IComputeTask <TJobRes, TRes> task Task to execute. Returns Type Description System.Threading.Tasks.Task <TRes> Task result. Type Parameters Name Description TJobRes Type of job result. TRes Type of reduce result. ExecuteAsync<TJobRes, TRes>(IComputeTask<TJobRes, TRes>, CancellationToken) Executes given task on the grid projection. For step-by-step explanation of task execution process refer to IComputeTask<TArg, TJobRes, TRes> documentation. Declaration Task<TRes> ExecuteAsync<TJobRes, TRes>(IComputeTask<TJobRes, TRes> task, CancellationToken cancellationToken) Parameters Type Name Description IComputeTask <TJobRes, TRes> task Task to execute. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task <TRes> Task result. Type Parameters Name Description TJobRes Type of job result. TRes Type of reduce result. ExecuteAsync<TJobRes, TRes>(Type) Executes given task on the grid projection. For step-by-step explanation of task execution process refer to IComputeTask<TArg, TJobRes, TRes> documentation. Declaration Task<TRes> ExecuteAsync<TJobRes, TRes>(Type taskType) Parameters Type Name Description System.Type taskType Task type. Returns Type Description System.Threading.Tasks.Task <TRes> Task result. Type Parameters Name Description TJobRes Type of job result. TRes Type of reduce result. ExecuteAsync<TJobRes, TRes>(Type, CancellationToken) Executes given task on the grid projection. For step-by-step explanation of task execution process refer to IComputeTask<TArg, TJobRes, TRes> documentation. Declaration Task<TRes> ExecuteAsync<TJobRes, TRes>(Type taskType, CancellationToken cancellationToken) Parameters Type Name Description System.Type taskType Task type. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task <TRes> Task result. Type Parameters Name Description TJobRes Type of job result. TRes Type of reduce result. ExecuteAsync<TArg, TJobRes, TRes>(IComputeTask<TArg, TJobRes, TRes>, TArg) Executes given task on the grid projection. For step-by-step explanation of task execution process refer to IComputeTask<TArg, TJobRes, TRes> documentation. Declaration Task<TRes> ExecuteAsync<TArg, TJobRes, TRes>(IComputeTask<TArg, TJobRes, TRes> task, TArg taskArg) Parameters Type Name Description IComputeTask <TArg, TJobRes, TRes> task Task to execute. TArg taskArg Optional task argument. Returns Type Description System.Threading.Tasks.Task <TRes> Task result. Type Parameters Name Description TArg Argument type. TJobRes Type of job result. TRes Type of final task result. ExecuteAsync<TArg, TJobRes, TRes>(IComputeTask<TArg, TJobRes, TRes>, TArg, CancellationToken) Executes given task on the grid projection. For step-by-step explanation of task execution process refer to IComputeTask<TArg, TJobRes, TRes> documentation. Declaration Task<TRes> ExecuteAsync<TArg, TJobRes, TRes>(IComputeTask<TArg, TJobRes, TRes> task, TArg taskArg, CancellationToken cancellationToken) Parameters Type Name Description IComputeTask <TArg, TJobRes, TRes> task Task to execute. TArg taskArg Optional task argument. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task <TRes> Task result. Type Parameters Name Description TArg Argument type. TJobRes Type of job result. TRes Type of final task result. ExecuteAsync<TArg, TJobRes, TRes>(Type, TArg) Executes given task on the grid projection. For step-by-step explanation of task execution process refer to IComputeTask<TArg, TJobRes, TRes> documentation. Declaration Task<TRes> ExecuteAsync<TArg, TJobRes, TRes>(Type taskType, TArg taskArg) Parameters Type Name Description System.Type taskType Task type. TArg taskArg Optional task argument. Returns Type Description System.Threading.Tasks.Task <TRes> Task result. Type Parameters Name Description TArg Argument type. TJobRes Type of job result. TRes Type of reduce result. ExecuteAsync<TArg, TJobRes, TRes>(Type, TArg, CancellationToken) Executes given task on the grid projection. For step-by-step explanation of task execution process refer to IComputeTask<TArg, TJobRes, TRes> documentation. Declaration Task<TRes> ExecuteAsync<TArg, TJobRes, TRes>(Type taskType, TArg taskArg, CancellationToken cancellationToken) Parameters Type Name Description System.Type taskType Task type. TArg taskArg Optional task argument. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task <TRes> Task result. Type Parameters Name Description TArg Argument type. TJobRes Type of job result. TRes Type of reduce result. ExecuteJavaTask<TRes>(String, Object) Executes given Java task on the grid projection. If task for given name has not been deployed yet, then 'taskName' will be used as task class name to auto-deploy the task. Declaration TRes ExecuteJavaTask<TRes>(string taskName, object taskArg) Parameters Type Name Description System.String taskName Java task name System.Object taskArg Optional argument of task execution, can be null. Returns Type Description TRes Task result. Type Parameters Name Description TRes Type of task result. ExecuteJavaTaskAsync<TRes>(String, Object) Executes given Java task on the grid projection. If task for given name has not been deployed yet, then 'taskName' will be used as task class name to auto-deploy the task. Declaration Task<TRes> ExecuteJavaTaskAsync<TRes>(string taskName, object taskArg) Parameters Type Name Description System.String taskName Java task name System.Object taskArg Optional argument of task execution, can be null. Returns Type Description System.Threading.Tasks.Task <TRes> Task result. Type Parameters Name Description TRes Type of task result. ExecuteJavaTaskAsync<TRes>(String, Object, CancellationToken) Executes given Java task on the grid projection. If task for given name has not been deployed yet, then 'taskName' will be used as task class name to auto-deploy the task. Declaration Task<TRes> ExecuteJavaTaskAsync<TRes>(string taskName, object taskArg, CancellationToken cancellationToken) Parameters Type Name Description System.String taskName Java task name System.Object taskArg Optional argument of task execution, can be null. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task <TRes> Task result. Type Parameters Name Description TRes Type of task result. Run(IComputeAction) Executes provided job on a node in this grid projection. Declaration void Run(IComputeAction action) Parameters Type Name Description IComputeAction action Job to execute. Run(IEnumerable<IComputeAction>) Executes collection of jobs on Ignite nodes within this grid projection. Declaration void Run(IEnumerable<IComputeAction> actions) Parameters Type Name Description System.Collections.Generic.IEnumerable < IComputeAction > actions Jobs to execute. RunAsync(IComputeAction) Executes provided job on a node in this grid projection. Declaration Task RunAsync(IComputeAction action) Parameters Type Name Description IComputeAction action Job to execute. Returns Type Description System.Threading.Tasks.Task RunAsync(IComputeAction, CancellationToken) Executes provided job on a node in this grid projection. Declaration Task RunAsync(IComputeAction action, CancellationToken cancellationToken) Parameters Type Name Description IComputeAction action Job to execute. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task RunAsync(IEnumerable<IComputeAction>) Executes collection of jobs on Ignite nodes within this grid projection. Declaration Task RunAsync(IEnumerable<IComputeAction> actions) Parameters Type Name Description System.Collections.Generic.IEnumerable < IComputeAction > actions Jobs to execute. Returns Type Description System.Threading.Tasks.Task RunAsync(IEnumerable<IComputeAction>, CancellationToken) Executes collection of jobs on Ignite nodes within this grid projection. Declaration Task RunAsync(IEnumerable<IComputeAction> actions, CancellationToken cancellationToken) Parameters Type Name Description System.Collections.Generic.IEnumerable < IComputeAction > actions Jobs to execute. System.Threading.CancellationToken cancellationToken The cancellation token. Returns Type Description System.Threading.Tasks.Task Task. WithKeepBinary() Sets keep-binary flag for the next executed Java task on this projection in the current thread so that task argument passed to Java and returned task results will not be deserialized. Declaration ICompute WithKeepBinary() Returns Type Description ICompute This compute instance for chaining calls. WithNoFailover() Sets no-failover flag for the next executed task on this projection in the current thread. If flag is set, job will be never failed over even if remote node crashes or rejects execution. When task starts execution, the no-failover flag is reset, so all other task will use default failover policy, unless this flag is set again. Declaration ICompute WithNoFailover() Returns Type Description ICompute This compute instance for chaining calls. WithNoResultCache() Disables caching for the next executed task in the current thread. Declaration ICompute WithNoResultCache() Returns Type Description ICompute This compute instance for chaining calls. WithTimeout(Int64) Sets task timeout for the next executed task on this projection in the current thread. When task starts execution, the timeout is reset, so one timeout is used only once. Declaration ICompute WithTimeout(long timeout) Parameters Type Name Description System.Int64 timeout Computation timeout in milliseconds. Returns Type Description ICompute This compute instance for chaining calls."
  },
  "api/Apache.Ignite.Core.Compute.IComputeAction.html": {
    "href": "api/Apache.Ignite.Core.Compute.IComputeAction.html",
    "title": "Interface IComputeAction | Apache Ignite.NET",
    "keywords": "Interface IComputeAction Defines a void function having no arguments. Namespace : Apache.Ignite.Core.Compute Assembly : Apache.Ignite.Core.dll Syntax public interface IComputeAction Methods Invoke() Invokes action. Declaration void Invoke()"
  },
  "api/Apache.Ignite.Core.Configuration.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.Encryption.IEncryptionSpi.html": {
    "href": "api/Apache.Ignite.Core.Encryption.IEncryptionSpi.html",
    "title": "Interface IEncryptionSpi | Apache Ignite.NET",
    "keywords": "Interface IEncryptionSpi Encryption SPI. Only predefined implementations are supported: KeystoreEncryptionSpi Namespace : Apache.Ignite.Core.Encryption Assembly : Apache.Ignite.Core.dll Syntax public interface IEncryptionSpi"
  },
  "api/Apache.Ignite.Core.Encryption.Keystore.KeystoreEncryptionSpi.html": {
    "href": "api/Apache.Ignite.Core.Encryption.Keystore.KeystoreEncryptionSpi.html",
    "title": "Class KeystoreEncryptionSpi | Apache Ignite.NET",
    "keywords": "Class KeystoreEncryptionSpi IEncryptionSPI implementation base on JDK provided cipher algorithm implementations. Inheritance System.Object KeystoreEncryptionSpi Implements IEncryptionSpi Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Encryption.Keystore Assembly : Apache.Ignite.Core.dll Syntax public class KeystoreEncryptionSpi : IEncryptionSpi Constructors KeystoreEncryptionSpi() Empty constructor. Declaration public KeystoreEncryptionSpi() KeystoreEncryptionSpi(IBinaryRawReader) Initializes a new instance of the KeystoreEncryptionSpi class. Declaration public KeystoreEncryptionSpi(IBinaryRawReader reader) Parameters Type Name Description IBinaryRawReader reader The reader. Fields DefaultKeySize Default encryption key size. Declaration public const int DefaultKeySize = 256 Field Value Type Description System.Int32 DefaultMasterKeyName Default master key name. Declaration public const string DefaultMasterKeyName = \"ignite.master.key\" Field Value Type Description System.String Properties KeySize Size of encryption key. Declaration public int KeySize { get; set; } Property Value Type Description System.Int32 KeyStorePassword Key store password. Declaration public string KeyStorePassword { get; set; } Property Value Type Description System.String KeyStorePath Path to key store. Declaration public string KeyStorePath { get; set; } Property Value Type Description System.String MasterKeyName Name of master key in key store. Declaration public string MasterKeyName { get; set; } Property Value Type Description System.String Implements IEncryptionSpi"
  },
  "api/Apache.Ignite.Core.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.Interop.JavaObject.html": {
    "href": "api/Apache.Ignite.Core.Interop.JavaObject.html",
    "title": "Class JavaObject | Apache Ignite.NET",
    "keywords": "Class JavaObject Represents a Java object wrapper. JavaObject can be converted to Ignite filters and predicates which can be used on non-.NET Ignite nodes. Workflow is as follows: Instantiate specified Java class; Set property values; If the resulting object implements PlatformJavaObjectFactory, call create() method and use the result, otherwise use the original object. Inheritance System.Object JavaObject Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Interop Assembly : Apache.Ignite.Core.dll Syntax public class JavaObject Constructors JavaObject(String) Initializes a new instance of the JavaObject class. Declaration public JavaObject(string className) Parameters Type Name Description System.String className Name of the Java class. JavaObject(String, IDictionary<String, Object>) Initializes a new instance of the JavaObject class. Declaration public JavaObject(string className, IDictionary<string, object> properties) Parameters Type Name Description System.String className Name of the Java class. System.Collections.Generic.IDictionary < System.String , System.Object > properties The properties to set on the Java object. Properties ClassName Gets the Java class name. Declaration public string ClassName { get; } Property Value Type Description System.String Properties Gets the properties to be set on the Java object. Declaration public IDictionary<string, object> Properties { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.Object > Extension Methods ContinuousQueryExtensions.ToCacheEntryEventFilter<TK, TV>(JavaObject)"
  },
  "api/Apache.Ignite.Core.Interop.html": {
    "href": "api/Apache.Ignite.Core.Interop.html",
    "title": "Namespace Apache.Ignite.Core.Interop | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Interop Classes JavaObject Represents a Java object wrapper. JavaObject can be converted to Ignite filters and predicates which can be used on non-.NET Ignite nodes. Workflow is as follows: Instantiate specified Java class; Set property values; If the resulting object implements PlatformJavaObjectFactory, call create() method and use the result, otherwise use the original object. Interfaces IPlatformTarget Interface to interoperate with org.apache.ignite.internal.processors.platform.PlatformTarget on Java side."
  },
  "api/Apache.Ignite.Core.Plugin.Cache.html": {
    "href": "api/Apache.Ignite.Core.Plugin.Cache.html",
    "title": "Namespace Apache.Ignite.Core.Plugin.Cache | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Plugin.Cache Interfaces ICachePluginConfiguration Cache plugin configuration marker interface. Starting point to extend CacheConfiguration and extend existing cache functionality."
  },
  "api/Apache.Ignite.Core.Plugin.IPluginConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Plugin.IPluginConfiguration.html",
    "title": "Interface IPluginConfiguration | Apache Ignite.NET",
    "keywords": "Interface IPluginConfiguration Plugin configuration interface. Implementations should be linked to corresponding IPluginProvider<TConfig> via PluginProviderTypeAttribute . Example plugin implementation: [PluginProviderType(typeof(MyPluginProvider))] class MyPluginConfig : IPluginConfiguration { int CustomProperty { get; set; } } class MyPluginProvider : IPluginProvider<MyPluginConfig> { ... } Namespace : Apache.Ignite.Core.Plugin Assembly : Apache.Ignite.Core.dll Syntax public interface IPluginConfiguration Properties PluginConfigurationClosureFactoryId Gets the id to locate PlatformPluginConfigurationClosureFactory on Java side and read the data written by WriteBinary(IBinaryRawWriter) method. Declaration int ? PluginConfigurationClosureFactoryId { get; } Property Value Type Description System.Nullable < System.Int32 > Methods WriteBinary(IBinaryRawWriter) Writes this instance to a raw writer. This method will be called when PluginConfigurationClosureFactoryId is not null to propagate configuration to the Java side. Declaration void WriteBinary(IBinaryRawWriter writer) Parameters Type Name Description IBinaryRawWriter writer The writer."
  },
  "api/Apache.Ignite.Core.Plugin.IPluginContext-1.html": {
    "href": "api/Apache.Ignite.Core.Plugin.IPluginContext-1.html",
    "title": "Interface IPluginContext<T> | Apache Ignite.NET",
    "keywords": "Interface IPluginContext<T> Plugin execution context. Namespace : Apache.Ignite.Core.Plugin Assembly : Apache.Ignite.Core.dll Syntax public interface IPluginContext<out T> where T : IPluginConfiguration Type Parameters Name Description T Properties Ignite Gets the Ignite. Declaration IIgnite Ignite { get; } Property Value Type Description IIgnite IgniteConfiguration Gets the Ignite configuration. Declaration IgniteConfiguration IgniteConfiguration { get; } Property Value Type Description IgniteConfiguration PluginConfiguration Gets the plugin configuration. Declaration T PluginConfiguration { get; } Property Value Type Description T Methods GetExtension(Int32) Gets a reference to plugin extension on Java side. Extensions on Java side are configured via PluginProvider.initExtensions(). Extension should implement PlatformExtension interface to be accessible from this method. Declaration IPlatformTarget GetExtension(int id) Parameters Type Name Description System.Int32 id Extension id. Equal to PlatformExtension.id(). Returns Type Description IPlatformTarget Reference to a plugin extension on Java side. InjectResources(Object) Injects resources into specified target: populates members marked with InstanceResourceAttribute . Declaration void InjectResources(object target) Parameters Type Name Description System.Object target Target object. RegisterCallback(Int64, PluginCallback) Registers Java->.NET callback. Declaration void RegisterCallback(long callbackId, PluginCallback callback) Parameters Type Name Description System.Int64 callbackId Callback id. PluginCallback callback Callback delegate. RegisterExceptionMapping(String, ExceptionFactory) Registers custom exception mapping: when Java exception of specified class occurs, it will be mapped using provided factory delegate. Declaration void RegisterExceptionMapping(string className, ExceptionFactory factory) Parameters Type Name Description System.String className Name of the Java exception class to be mapped. ExceptionFactory factory Exception factory delegate."
  },
  "api/Apache.Ignite.Core.Plugin.IPluginProvider-1.html": {
    "href": "api/Apache.Ignite.Core.Plugin.IPluginProvider-1.html",
    "title": "Interface IPluginProvider<TConfig> | Apache Ignite.NET",
    "keywords": "Interface IPluginProvider<TConfig> Pluggable Ignite component. Should have parameterless constructor. Ignite plugins are loaded according to PluginConfigurations . Namespace : Apache.Ignite.Core.Plugin Assembly : Apache.Ignite.Core.dll Syntax public interface IPluginProvider<in TConfig> where TConfig : IPluginConfiguration Type Parameters Name Description TConfig Properties Copyright Gets the copyright information. Declaration string Copyright { get; } Property Value Type Description System.String Name Gets the plugin name. Plugins can be retrieved by name via GetPlugin<T>(String) . Declaration string Name { get; } Property Value Type Description System.String Methods GetPlugin<T>() Gets the plugin instance. Declaration T GetPlugin<T>()where T : class Returns Type Description T Plugin instance. Type Parameters Name Description T Plugin instance type. OnIgniteStart() Called when Ignite has been started and is fully functional. Declaration void OnIgniteStart() OnIgniteStop(Boolean) Callback to notify that Ignite is about to stop. Declaration void OnIgniteStop(bool cancel) Parameters Type Name Description System.Boolean cancel if set to true , all ongoing operations should be canceled. Start(IPluginContext<TConfig>) Starts the plugin provider. Ignite can be null until OnIgniteStart() is called. Declaration void Start(IPluginContext<TConfig> context) Parameters Type Name Description IPluginContext <TConfig> context The context. Stop(Boolean) Stops the plugin provider. Declaration void Stop(bool cancel) Parameters Type Name Description System.Boolean cancel if set to true , all ongoing operations should be canceled."
  },
  "api/Apache.Ignite.Core.Transactions.TransactionHeuristicException.html": {
    "href": "api/Apache.Ignite.Core.Transactions.TransactionHeuristicException.html",
    "title": "Class TransactionHeuristicException | Apache Ignite.NET",
    "keywords": "Class TransactionHeuristicException Exception thrown whenever Ignite transaction enters an unknown state. This exception is usually thrown whenever commit partially succeeds. Cache will still resolve this situation automatically to ensure data integrity, by invalidating all values participating in this transaction on remote nodes. Inheritance System.Object System.Exception IgniteException TransactionHeuristicException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Transactions Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class TransactionHeuristicException : IgniteException, ISerializable, _Exception Constructors TransactionHeuristicException() Initializes a new instance of the TransactionHeuristicException class. Declaration public TransactionHeuristicException() TransactionHeuristicException(SerializationInfo, StreamingContext) Initializes a new instance of the TransactionHeuristicException class. Declaration protected TransactionHeuristicException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. TransactionHeuristicException(String) Initializes a new instance of the TransactionHeuristicException class. Declaration public TransactionHeuristicException(string message) Parameters Type Name Description System.String message The message that describes the error. TransactionHeuristicException(String, Exception) Initializes a new instance of the TransactionHeuristicException class. Declaration public TransactionHeuristicException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Transactions.TransactionIsolation.html": {
    "href": "api/Apache.Ignite.Core.Transactions.TransactionIsolation.html",
    "title": "Enum TransactionIsolation | Apache Ignite.NET",
    "keywords": "Enum TransactionIsolation Defines different cache transaction isolation levels. See ITransaction documentation for more information about cache transaction isolation levels. Namespace : Apache.Ignite.Core.Transactions Assembly : Apache.Ignite.Core.dll Syntax public enum TransactionIsolation Fields Name Description ReadCommitted Read committed isolation level. RepeatableRead Repeatable read isolation level. Serializable Serializable isolation level."
  },
  "api/Apache.Ignite.Core.Transactions.TransactionOptimisticException.html": {
    "href": "api/Apache.Ignite.Core.Transactions.TransactionOptimisticException.html",
    "title": "Class TransactionOptimisticException | Apache Ignite.NET",
    "keywords": "Class TransactionOptimisticException Exception thrown whenever Ignite transactions fail optimistically. Inheritance System.Object System.Exception IgniteException TransactionOptimisticException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Transactions Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class TransactionOptimisticException : IgniteException, ISerializable, _Exception Constructors TransactionOptimisticException() Initializes a new instance of the TransactionOptimisticException class. Declaration public TransactionOptimisticException() TransactionOptimisticException(SerializationInfo, StreamingContext) Initializes a new instance of the TransactionOptimisticException class. Declaration protected TransactionOptimisticException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. TransactionOptimisticException(String) Initializes a new instance of the TransactionOptimisticException class. Declaration public TransactionOptimisticException(string message) Parameters Type Name Description System.String message The message that describes the error. TransactionOptimisticException(String, Exception) Initializes a new instance of the TransactionOptimisticException class. Declaration public TransactionOptimisticException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.AspNet.IgniteOutputCacheProvider.html": {
    "href": "api/Apache.Ignite.AspNet.IgniteOutputCacheProvider.html",
    "title": "Class IgniteOutputCacheProvider | Apache Ignite.NET",
    "keywords": "Class IgniteOutputCacheProvider ASP.NET output cache provider that uses Ignite cache as a storage. You can either start Ignite yourself, and provide gridName attribute, or provide igniteConfigurationSectionName attribute to start Ignite automatically from specified configuration section (see IgniteConfigurationSection ) using igniteConfigurationSectionName . cacheName attribute specifies Ignite cache name to use for data storage. This attribute can be omitted if cache name is null. Inheritance System.Object System.Configuration.Provider.ProviderBase System.Web.Caching.OutputCacheProvider IgniteOutputCacheProvider Inherited Members System.Configuration.Provider.ProviderBase.Name System.Configuration.Provider.ProviderBase.Description System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.AspNet Assembly : Apache.Ignite.AspNet.dll Syntax public class IgniteOutputCacheProvider : OutputCacheProvider Methods Add(String, Object, DateTime) Inserts the specified entry into the output cache. Declaration public override object Add(string key, object entry, DateTime utcExpiry) Parameters Type Name Description System.String key A unique identifier for entry . System.Object entry The content to add to the output cache. System.DateTime utcExpiry The time and date on which the cached entry expires. Returns Type Description System.Object A reference to the specified provider. Overrides System.Web.Caching.OutputCacheProvider.Add(System.String, System.Object, System.DateTime) Get(String) Returns a reference to the specified entry in the output cache. Declaration public override object Get(string key) Parameters Type Name Description System.String key A unique identifier for a cached entry in the output cache. Returns Type Description System.Object The key value that identifies the specified entry in the cache, or null if the specified entry is not in the cache. Overrides System.Web.Caching.OutputCacheProvider.Get(System.String) Initialize(String, NameValueCollection) Initializes the provider. Declaration public override void Initialize(string name, NameValueCollection config) Parameters Type Name Description System.String name The friendly name of the provider. System.Collections.Specialized.NameValueCollection config A collection of the name/value pairs representing the provider-specific attributes specified in the configuration for this provider. Overrides System.Configuration.Provider.ProviderBase.Initialize(System.String, System.Collections.Specialized.NameValueCollection) Remove(String) Removes the specified entry from the output cache. Declaration public override void Remove(string key) Parameters Type Name Description System.String key The unique identifier for the entry to remove from the output cache. Overrides System.Web.Caching.OutputCacheProvider.Remove(System.String) Set(String, Object, DateTime) Inserts the specified entry into the output cache, overwriting the entry if it is already cached. Declaration public override void Set(string key, object entry, DateTime utcExpiry) Parameters Type Name Description System.String key A unique identifier for entry . System.Object entry The content to add to the output cache. System.DateTime utcExpiry The time and date on which the cached entry expires. Overrides System.Web.Caching.OutputCacheProvider.Set(System.String, System.Object, System.DateTime)"
  },
  "api/Apache.Ignite.Core.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.CacheException.html": {
    "href": "api/Apache.Ignite.Core.Cache.CacheException.html",
    "title": "Class CacheException | Apache Ignite.NET",
    "keywords": "Class CacheException Indicates an error during Cache operation. Inheritance System.Object System.Exception IgniteException CacheException CachePartialUpdateException CacheStoreException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class CacheException : IgniteException, ISerializable, _Exception Constructors CacheException() Initializes a new instance of the CacheException class. Declaration public CacheException() CacheException(SerializationInfo, StreamingContext) Initializes a new instance of the CacheException class. Declaration protected CacheException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. CacheException(String) Initializes a new instance of the CacheException class. Declaration public CacheException(string message) Parameters Type Name Description System.String message The message that describes the error. CacheException(String, Exception) Initializes a new instance of the CacheException class. Declaration public CacheException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Cache.Configuration.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.QueryIndexField.html": {
    "href": "api/Apache.Ignite.Core.Cache.Configuration.QueryIndexField.html",
    "title": "Class QueryIndexField | Apache Ignite.NET",
    "keywords": "Class QueryIndexField Represents an indexed field. Inheritance System.Object QueryIndexField Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Configuration Assembly : Apache.Ignite.Core.dll Syntax public class QueryIndexField Constructors QueryIndexField() Initializes a new instance of the QueryIndexField class. Declaration public QueryIndexField() QueryIndexField(String) Initializes a new instance of the QueryIndexField class. Declaration public QueryIndexField(string name) Parameters Type Name Description System.String name The name. QueryIndexField(String, Boolean) Initializes a new instance of the QueryIndexField class. Declaration public QueryIndexField(string name, bool isDescending) Parameters Type Name Description System.String name The name. System.Boolean isDescending Sort direction. Properties IsDescending Gets a value indicating whether this index is descending. Default is false. Declaration public bool IsDescending { get; set; } Property Value Type Description System.Boolean Name Gets the name. Declaration public string Name { get; set; } Property Value Type Description System.String"
  },
  "api/Apache.Ignite.Core.Cache.Event.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.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.ICacheLock.html": {
    "href": "api/Apache.Ignite.Core.Cache.ICacheLock.html",
    "title": "Interface ICacheLock | Apache Ignite.NET",
    "keywords": "Interface ICacheLock Cache locking interface. All members are thread-safe and may be used concurrently from multiple threads. Inherited Members System.IDisposable.Dispose() Namespace : Apache.Ignite.Core.Cache Assembly : Apache.Ignite.Core.dll Syntax public interface ICacheLock : IDisposable Methods Enter() Acquires an exclusive lock. Declaration void Enter() Exit() Releases an exclusive lock on the specified object. System.IDisposable.Dispose() does not call this method and will throw System.Threading.SynchronizationLockException if this lock is acquired. Declaration void Exit() TryEnter() Acquires an exclusive lock only if it is free at the time of invocation. Declaration bool TryEnter() Returns Type Description System.Boolean True if the current thread acquires the lock; otherwise, false. TryEnter(TimeSpan) Attempts, for the specified amount of time, to acquire an exclusive lock. Declaration bool TryEnter(TimeSpan timeout) Parameters Type Name Description System.TimeSpan timeout A System.TimeSpan representing the amount of time to wait for the lock. A value of -1 millisecond specifies an infinite wait. Returns Type Description System.Boolean True if the current thread acquires the lock; otherwise, false."
  },
  "api/Apache.Ignite.Core.Cache.Query.Continuous.ContinuousQuery-2.html": {
    "href": "api/Apache.Ignite.Core.Cache.Query.Continuous.ContinuousQuery-2.html",
    "title": "Class ContinuousQuery<TK, TV> | Apache Ignite.NET",
    "keywords": "Class ContinuousQuery<TK, TV> API for configuring continuous cache queries. Continuous queries allow to register a remote and a listener for cache update events. If an update event passes the filter, it will be sent to the node that executed the query and listener will be notified on that node. Continuous query can either be executed on the whole topology or only on local node. In case query is distributed and a new node joins, it will get the filter for the query during discovery process before it actually joins topology, so no updates will be missed. To execute the query use method QueryContinuous(ContinuousQuery<TK, TV>) . Inheritance System.Object ContinuousQuery ContinuousQuery<TK, TV> Inherited Members ContinuousQuery.DefaultBufferSize ContinuousQuery.DefaultTimeInterval ContinuousQuery.DefaultAutoUnsubscribe System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Query.Continuous Assembly : Apache.Ignite.Core.dll Syntax public class ContinuousQuery<TK, TV> : ContinuousQuery Type Parameters Name Description TK TV Constructors ContinuousQuery(ICacheEntryEventListener<TK, TV>) Constructor. Declaration public ContinuousQuery(ICacheEntryEventListener<TK, TV> lsnr) Parameters Type Name Description ICacheEntryEventListener <TK, TV> lsnr Listener. ContinuousQuery(ICacheEntryEventListener<TK, TV>, ICacheEntryEventFilter<TK, TV>) Constructor. Declaration public ContinuousQuery(ICacheEntryEventListener<TK, TV> lsnr, ICacheEntryEventFilter<TK, TV> filter) Parameters Type Name Description ICacheEntryEventListener <TK, TV> lsnr Listener. ICacheEntryEventFilter <TK, TV> filter Filter. ContinuousQuery(ICacheEntryEventListener<TK, TV>, ICacheEntryEventFilter<TK, TV>, Boolean) Constructor. Declaration public ContinuousQuery(ICacheEntryEventListener<TK, TV> lsnr, ICacheEntryEventFilter<TK, TV> filter, bool loc) Parameters Type Name Description ICacheEntryEventListener <TK, TV> lsnr Listener. ICacheEntryEventFilter <TK, TV> filter Filter. System.Boolean loc Whether query should be executed locally. ContinuousQuery(ICacheEntryEventListener<TK, TV>, Boolean) Constructor. Declaration public ContinuousQuery(ICacheEntryEventListener<TK, TV> lsnr, bool loc) Parameters Type Name Description ICacheEntryEventListener <TK, TV> lsnr Listener. System.Boolean loc Whether query should be executed locally. Properties AutoUnsubscribe Automatic unsubscribe flag. This flag indicates that query filters on remote nodes should be automatically unregistered if master node (node that initiated the query) leaves topology. If this flag is false , filters will be unregistered only when the query is cancelled from master node, and won't ever be unregistered if master node leaves grid. Defaults to true . Declaration public bool AutoUnsubscribe { get; set; } Property Value Type Description System.Boolean BufferSize Buffer size. When a cache update happens, entry is first put into a buffer. Entries from buffer will be sent to the master node only if the buffer is full or time provided via TimeInterval is exceeded. Defaults to DefaultBufferSize Declaration public int BufferSize { get; set; } Property Value Type Description System.Int32 Filter Optional cache entry filter. Invoked on a node where cache event occurred. If filter returns false , then cache entry event will not be sent to a node where continuous query has been started. Must be either binary or serializable in case query is not local. Declaration public ICacheEntryEventFilter<TK, TV> Filter { get; set; } Property Value Type Description ICacheEntryEventFilter <TK, TV> Listener Cache entry event listener. Invoked on the node where continuous query execution has been started. Declaration public ICacheEntryEventListener<TK, TV> Listener { get; set; } Property Value Type Description ICacheEntryEventListener <TK, TV> Local Local flag. When set query will be executed only on local node, so only local entries will be returned as query result. Defaults to false . Declaration public bool Local { get; set; } Property Value Type Description System.Boolean TimeInterval Time interval. When a cache update happens, entry is first put into a buffer. Entries from buffer will be sent to the master node only if the buffer is full (its size can be provided via BufferSize property) or time provided via this method is exceeded. Defaults to 0 which means that time check is disabled and entries will be sent only when buffer is full. Declaration public TimeSpan TimeInterval { get; set; } Property Value Type Description System.TimeSpan"
  },
  "api/Apache.Ignite.Core.Cache.Query.Continuous.ContinuousQuery.html": {
    "href": "api/Apache.Ignite.Core.Cache.Query.Continuous.ContinuousQuery.html",
    "title": "Class ContinuousQuery | Apache Ignite.NET",
    "keywords": "Class ContinuousQuery Continuous query base class, see ContinuousQuery<TK, TV> . Inheritance System.Object ContinuousQuery ContinuousQuery <TK, TV> Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Query.Continuous Assembly : Apache.Ignite.Core.dll Syntax public abstract class ContinuousQuery Constructors ContinuousQuery() Initializes a new instance of the ContinuousQuery class. Declaration protected ContinuousQuery() Fields DefaultAutoUnsubscribe Default auto-unsubscribe flag value. Declaration public const bool DefaultAutoUnsubscribe = true Field Value Type Description System.Boolean DefaultBufferSize Default buffer size. Declaration public const int DefaultBufferSize = 1 Field Value Type Description System.Int32 DefaultTimeInterval Default time interval. Declaration public static readonly TimeSpan DefaultTimeInterval Field Value Type Description System.TimeSpan"
  },
  "api/Apache.Ignite.Core.Cache.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.IgniteClientConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Client.IgniteClientConfiguration.html",
    "title": "Class IgniteClientConfiguration | Apache Ignite.NET",
    "keywords": "Class IgniteClientConfiguration Ignite thin client configuration. Ignite thin client connects to a specific Ignite node with a socket and does not start JVM in process. This configuration should correspond to ClientConnectorConfiguration on a target node. Inheritance System.Object IgniteClientConfiguration Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Client Assembly : Apache.Ignite.Core.dll Syntax public class IgniteClientConfiguration Constructors IgniteClientConfiguration() Initializes a new instance of the IgniteClientConfiguration class. Declaration public IgniteClientConfiguration() IgniteClientConfiguration(IgniteClientConfiguration) Initializes a new instance of the IgniteClientConfiguration class. Declaration public IgniteClientConfiguration(IgniteClientConfiguration cfg) Parameters Type Name Description IgniteClientConfiguration cfg The configuration to copy. IgniteClientConfiguration(String) Initializes a new instance of the IgniteClientConfiguration class. Declaration public IgniteClientConfiguration(string host) Parameters Type Name Description System.String host The host to connect to. Fields DefaultPort Default port. Declaration public const int DefaultPort = 10800 Field Value Type Description System.Int32 DefaultSocketBufferSize Default socket buffer size. Declaration public const int DefaultSocketBufferSize = 0 Field Value Type Description System.Int32 DefaultSocketTimeout Default socket timeout. Declaration public static readonly TimeSpan DefaultSocketTimeout Field Value Type Description System.TimeSpan DefaultTcpNoDelay Default value of TcpNoDelay property. Declaration public const bool DefaultTcpNoDelay = true Field Value Type Description System.Boolean Properties BinaryConfiguration Gets or sets the binary configuration. Declaration public BinaryConfiguration BinaryConfiguration { get; set; } Property Value Type Description BinaryConfiguration Endpoints Gets or sets endpoints to connect to. Examples of supported formats: 192.168.1.25 (default port is used, see DefaultPort ). 192.168.1.25:780 (custom port) 192.168.1.25:780-787 (custom port range) my-host.com (default port is used, see DefaultPort ). my-host.com:780 (custom port) my-host.com:780-787 (custom port range) When multiple endpoints are specified, failover and load-balancing mechanism is enabled: Ignite picks random endpoint and connects to it. On disconnect, next endpoint is picked from the list (. Declaration public ICollection<string> Endpoints { get; set; } Property Value Type Description System.Collections.Generic.ICollection < System.String > Host Gets or sets the host. Should not be null. Declaration [Obsolete(\"Use Endpoints instead\")] public string Host { get; set; } Property Value Type Description System.String Password Password to be used to connect to secured cluster. Declaration public string Password { get; set; } Property Value Type Description System.String Port Gets or sets the port. Declaration [Obsolete(\"Use Endpoints instead\")] public int Port { get; set; } Property Value Type Description System.Int32 ReconnectDisabled Gets or sets a value indicating whether automatic reconnect is disabled. Declaration public bool ReconnectDisabled { get; set; } Property Value Type Description System.Boolean SocketReceiveBufferSize Gets or sets the size of the socket receive buffer. When set to 0, operating system default is used. Declaration public int SocketReceiveBufferSize { get; set; } Property Value Type Description System.Int32 SocketSendBufferSize Gets or sets the size of the socket send buffer. When set to 0, operating system default is used. Declaration public int SocketSendBufferSize { get; set; } Property Value Type Description System.Int32 SocketTimeout Gets or sets the socket operation timeout. Zero or negative means infinite timeout. Declaration public TimeSpan SocketTimeout { get; set; } Property Value Type Description System.TimeSpan SslStreamFactory Gets or sets the SSL stream factory. When not null, secure socket connection will be established. Declaration public ISslStreamFactory SslStreamFactory { get; set; } Property Value Type Description ISslStreamFactory TcpNoDelay Gets or sets the value for TCP_NODELAY socket option. Each socket will be opened using provided value. Setting this option to true disables Nagle's algorithm for socket decreasing latency and delivery time for small messages. For systems that work under heavy network load it is advisable to set this value to false . Declaration public bool TcpNoDelay { get; set; } Property Value Type Description System.Boolean UserName Username to be used to connect to secured cluster. Declaration public string UserName { get; set; } Property Value Type Description System.String Methods FromXml(String) Deserializes IgniteClientConfiguration from the XML string. Declaration public static IgniteClientConfiguration FromXml(string xml) Parameters Type Name Description System.String xml Xml string. Returns Type Description IgniteClientConfiguration Deserialized instance. FromXml(XmlReader) Deserializes IgniteClientConfiguration from the XML reader. Declaration public static IgniteClientConfiguration FromXml(XmlReader reader) Parameters Type Name Description System.Xml.XmlReader reader The reader. Returns Type Description IgniteClientConfiguration Deserialized instance. ToXml() Serializes this instance to an XML string. Declaration public string ToXml() Returns Type Description System.String ToXml(XmlWriter, String) Serializes this instance to the specified XML writer. Declaration public void ToXml(XmlWriter writer, string rootElementName) Parameters Type Name Description System.Xml.XmlWriter writer The writer. System.String rootElementName Name of the root element."
  },
  "api/Apache.Ignite.Core.Client.IgniteClientConfigurationSection.html": {
    "href": "api/Apache.Ignite.Core.Client.IgniteClientConfigurationSection.html",
    "title": "Class IgniteClientConfigurationSection | Apache Ignite.NET",
    "keywords": "Class IgniteClientConfigurationSection Ignite configuration section for app.config and web.config files. Inheritance System.Object System.Configuration.ConfigurationElement System.Configuration.ConfigurationSection IgniteClientConfigurationSection Inherited Members System.Configuration.ConfigurationSection.GetRuntimeObject() System.Configuration.ConfigurationSection.IsModified() System.Configuration.ConfigurationSection.ResetModified() System.Configuration.ConfigurationSection.ShouldSerializePropertyInTargetVersion(System.Configuration.ConfigurationProperty, System.String, System.Runtime.Versioning.FrameworkName, System.Configuration.ConfigurationElement) System.Configuration.ConfigurationSection.ShouldSerializeElementInTargetVersion(System.Configuration.ConfigurationElement, System.String, System.Runtime.Versioning.FrameworkName) System.Configuration.ConfigurationSection.ShouldSerializeSectionInTargetVersion(System.Runtime.Versioning.FrameworkName) System.Configuration.ConfigurationSection.SectionInformation System.Configuration.ConfigurationElement.Init() System.Configuration.ConfigurationElement.IsReadOnly() System.Configuration.ConfigurationElement.SetReadOnly() System.Configuration.ConfigurationElement.ListErrors(System.Collections.IList) System.Configuration.ConfigurationElement.InitializeDefault() System.Configuration.ConfigurationElement.Reset(System.Configuration.ConfigurationElement) System.Configuration.ConfigurationElement.Equals(System.Object) System.Configuration.ConfigurationElement.GetHashCode() System.Configuration.ConfigurationElement.SetPropertyValue(System.Configuration.ConfigurationProperty, System.Object, System.Boolean) System.Configuration.ConfigurationElement.Unmerge(System.Configuration.ConfigurationElement, System.Configuration.ConfigurationElement, System.Configuration.ConfigurationSaveMode) System.Configuration.ConfigurationElement.SerializeToXmlElement(System.Xml.XmlWriter, System.String) System.Configuration.ConfigurationElement.SerializeElement(System.Xml.XmlWriter, System.Boolean) System.Configuration.ConfigurationElement.DeserializeElement(System.Xml.XmlReader, System.Boolean) System.Configuration.ConfigurationElement.OnRequiredPropertyNotFound(System.String) System.Configuration.ConfigurationElement.PostDeserialize() System.Configuration.ConfigurationElement.PreSerialize(System.Xml.XmlWriter) System.Configuration.ConfigurationElement.OnDeserializeUnrecognizedAttribute(System.String, System.String) System.Configuration.ConfigurationElement.OnDeserializeUnrecognizedElement(System.String, System.Xml.XmlReader) System.Configuration.ConfigurationElement.GetTransformedTypeString(System.String) System.Configuration.ConfigurationElement.GetTransformedAssemblyString(System.String) System.Configuration.ConfigurationElement.LockAttributes System.Configuration.ConfigurationElement.LockAllAttributesExcept System.Configuration.ConfigurationElement.LockElements System.Configuration.ConfigurationElement.LockAllElementsExcept System.Configuration.ConfigurationElement.LockItem System.Configuration.ConfigurationElement.Item[System.Configuration.ConfigurationProperty] System.Configuration.ConfigurationElement.Item[System.String] System.Configuration.ConfigurationElement.Properties System.Configuration.ConfigurationElement.ElementInformation System.Configuration.ConfigurationElement.EvaluationContext System.Configuration.ConfigurationElement.ElementProperty System.Configuration.ConfigurationElement.CurrentConfiguration System.Object.ToString() System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Client Assembly : Apache.Ignite.Core.dll Syntax public class IgniteClientConfigurationSection : ConfigurationSection Properties IgniteClientConfiguration Gets the Ignite client configuration. Declaration public IgniteClientConfiguration IgniteClientConfiguration { get; } Property Value Type Description IgniteClientConfiguration Methods DeserializeSection(XmlReader) Reads XML from the configuration file. Declaration protected override void DeserializeSection(XmlReader reader) Parameters Type Name Description System.Xml.XmlReader reader The reader object, which reads from the configuration file. Overrides System.Configuration.ConfigurationSection.DeserializeSection(System.Xml.XmlReader) SerializeSection(ConfigurationElement, String, ConfigurationSaveMode) Creates an XML string containing an unmerged view of the System.Configuration.ConfigurationSection object as a single section to write to a file. Declaration protected override string SerializeSection(ConfigurationElement parentElement, string name, ConfigurationSaveMode saveMode) Parameters Type Name Description System.Configuration.ConfigurationElement parentElement The System.Configuration.ConfigurationElement instance to use as the parent when performing the un-merge. System.String name The name of the section to create. System.Configuration.ConfigurationSaveMode saveMode The System.Configuration.ConfigurationSaveMode instance to use when writing to a string. Returns Type Description System.String An XML string containing an unmerged view of the System.Configuration.ConfigurationSection object. Overrides System.Configuration.ConfigurationSection.SerializeSection(System.Configuration.ConfigurationElement, System.String, System.Configuration.ConfigurationSaveMode)"
  },
  "api/Apache.Ignite.Core.Cluster.IClusterMetrics.html": {
    "href": "api/Apache.Ignite.Core.Cluster.IClusterMetrics.html",
    "title": "Interface IClusterMetrics | Apache Ignite.NET",
    "keywords": "Interface IClusterMetrics Represents runtime information of a cluster. Apart from obvious statistical value, this information is used for implementation of load balancing, failover, and collision SPIs. For example, collision SPI in combination with fail-over SPI could check if other nodes don't have any active or waiting jobs and fail-over some jobs to those nodes. Node metrics for any node can be accessed via GetMetrics() method. Keep in mind that there will be a certain network delay (usually equal to heartbeat delay) for the accuracy of node metrics. However, when accessing metrics on local node the metrics are always accurate and up to date. Namespace : Apache.Ignite.Core.Cluster Assembly : Apache.Ignite.Core.dll Syntax public interface IClusterMetrics Properties AverageActiveJobs Average number of active jobs. Declaration float AverageActiveJobs { get; } Property Value Type Description System.Single AverageCancelledJobs Average number of cancelled jobs. Declaration float AverageCancelledJobs { get; } Property Value Type Description System.Single AverageCpuLoad Average of CPU load values in [0, 1] range over all metrics kept in the history. Declaration double AverageCpuLoad { get; } Property Value Type Description System.Double AverageJobExecuteTime Average job execution time. Declaration double AverageJobExecuteTime { get; } Property Value Type Description System.Double AverageJobWaitTime Average time jobs spend waiting in the queue to be executed. Declaration double AverageJobWaitTime { get; } Property Value Type Description System.Double AverageRejectedJobs Average number of jobs this node rejects during collision resolution operations. Declaration float AverageRejectedJobs { get; } Property Value Type Description System.Single AverageWaitingJobs Average number of waiting jobs. Declaration float AverageWaitingJobs { get; } Property Value Type Description System.Single BusyTimePercentage Percentage of time this node is busy. Declaration float BusyTimePercentage { get; } Property Value Type Description System.Single CurrentActiveJobs Number of currently active jobs concurrently executing on the node. Declaration int CurrentActiveJobs { get; } Property Value Type Description System.Int32 CurrentCancelledJobs Number of cancelled jobs that are still running. Declaration int CurrentCancelledJobs { get; } Property Value Type Description System.Int32 CurrentCpuLoad Returns the CPU usage usage in [0, 1] range. Declaration double CurrentCpuLoad { get; } Property Value Type Description System.Double CurrentDaemonThreadCount Current number of live daemon threads. Declaration int CurrentDaemonThreadCount { get; } Property Value Type Description System.Int32 CurrentGcCpuLoad Average time spent in CG since the last update. Declaration double CurrentGcCpuLoad { get; } Property Value Type Description System.Double CurrentIdleTime Time this node spend idling since executing last job. Declaration long CurrentIdleTime { get; } Property Value Type Description System.Int64 CurrentJobExecuteTime Longest time a current job has been executing for. Declaration long CurrentJobExecuteTime { get; } Property Value Type Description System.Int64 CurrentJobWaitTime Current time an oldest jobs has spent waiting to be executed. Declaration long CurrentJobWaitTime { get; } Property Value Type Description System.Int64 CurrentRejectedJobs Number of jobs rejected after more recent collision resolution operation. Declaration int CurrentRejectedJobs { get; } Property Value Type Description System.Int32 CurrentThreadCount Current number of live threads. Declaration int CurrentThreadCount { get; } Property Value Type Description System.Int32 CurrentWaitingJobs Number of queued jobs currently waiting to be executed. Declaration int CurrentWaitingJobs { get; } Property Value Type Description System.Int32 HeapMemoryCommitted Amount of heap memory in bytes that is committed for the JVM to use. This amount of memory is guaranteed for the JVM to use. The heap consists of one or more memory pools. This value is the sum of committed heap memory values of all heap memory pools. Declaration long HeapMemoryCommitted { get; } Property Value Type Description System.Int64 HeapMemoryInitialized Amount of heap memory in bytes that the JVM initially requests from the operating system for memory management. This method returns -1 if the initial memory size is undefined. This value represents a setting of the heap memory for Java VM and is not a sum of all initial heap values for all memory pools. Declaration long HeapMemoryInitialized { get; } Property Value Type Description System.Int64 HeapMemoryMaximum Mmaximum amount of heap memory in bytes that can be used for memory management. This method returns -1 if the maximum memory size is undefined. This amount of memory is not guaranteed to be available for memory management if it is greater than the amount of committed memory. The JVM may fail to allocate memory even if the amount of used memory does not exceed this maximum size. This value represents a setting of the heap memory for Java VM and is not a sum of all initial heap values for all memory pools. Declaration long HeapMemoryMaximum { get; } Property Value Type Description System.Int64 HeapMemoryTotal Total amount of heap memory in bytes. This method returns -1 if the total memory size is undefined. This amount of memory is not guaranteed to be available for memory management if it is greater than the amount of committed memory. The JVM may fail to allocate memory even if the amount of used memory does not exceed this maximum size. This value represents a setting of the heap memory for Java VM and is not a sum of all initial heap values for all memory pools. Declaration long HeapMemoryTotal { get; } Property Value Type Description System.Int64 HeapMemoryUsed Current heap size that is used for object allocation. The heap consists of one or more memory pools. This value is the sum of used heap memory values of all heap memory pools. The amount of used memory in the returned is the amount of memory occupied by both live objects and garbage objects that have not been collected, if any. Declaration long HeapMemoryUsed { get; } Property Value Type Description System.Int64 IdleTimePercentage Percentage of time this node is idle Declaration float IdleTimePercentage { get; } Property Value Type Description System.Single LastDataVersion Ignite assigns incremental versions to all cache operations. This property provides the latest data version on the node. Declaration long LastDataVersion { get; } Property Value Type Description System.Int64 LastUpdateTime Last update time of this node metrics. Declaration DateTime LastUpdateTime { get; } Property Value Type Description System.DateTime MaximumActiveJobs Maximum number of jobs that ever ran concurrently on this node. Declaration int MaximumActiveJobs { get; } Property Value Type Description System.Int32 MaximumCancelledJobs Maximum number of cancelled jobs ever had running concurrently. Declaration int MaximumCancelledJobs { get; } Property Value Type Description System.Int32 MaximumJobExecuteTime Time it took to execute the longest job on the node. Declaration long MaximumJobExecuteTime { get; } Property Value Type Description System.Int64 MaximumJobWaitTime Maximum time a job ever spent waiting in a queue to be executed. Declaration long MaximumJobWaitTime { get; } Property Value Type Description System.Int64 MaximumRejectedJobs Maximum number of jobs rejected at once. Declaration int MaximumRejectedJobs { get; } Property Value Type Description System.Int32 MaximumThreadCount The peak live thread count. Declaration int MaximumThreadCount { get; } Property Value Type Description System.Int32 MaximumWaitingJobs Maximum number of waiting jobs. Declaration int MaximumWaitingJobs { get; } Property Value Type Description System.Int32 NodeStartTime Start time of the Ignite node in milliseconds. Declaration DateTime NodeStartTime { get; } Property Value Type Description System.DateTime NonHeapMemoryCommitted Amount of non-heap memory in bytes that is committed for the JVM to use. Declaration long NonHeapMemoryCommitted { get; } Property Value Type Description System.Int64 NonHeapMemoryInitialized Amount of non-heap memory in bytes that the JVM initially requests from the operating system for memory management. Declaration long NonHeapMemoryInitialized { get; } Property Value Type Description System.Int64 NonHeapMemoryMaximum Maximum amount of non-heap memory in bytes that can be used for memory management. Declaration long NonHeapMemoryMaximum { get; } Property Value Type Description System.Int64 NonHeapMemoryTotal Total amount of non-heap memory in bytes that can be used for memory management. Declaration long NonHeapMemoryTotal { get; } Property Value Type Description System.Int64 NonHeapMemoryUsed Current non-heap memory size that is used by Java VM. Declaration long NonHeapMemoryUsed { get; } Property Value Type Description System.Int64 OutboundMessagesQueueSize Outbound messages queue size. Declaration int OutboundMessagesQueueSize { get; } Property Value Type Description System.Int32 ReceivedBytesCount Received bytes count. Declaration long ReceivedBytesCount { get; } Property Value Type Description System.Int64 ReceivedMessagesCount Received messages count. Declaration int ReceivedMessagesCount { get; } Property Value Type Description System.Int32 SentBytesCount Sent bytes count. Declaration long SentBytesCount { get; } Property Value Type Description System.Int64 SentMessagesCount Sent messages count Declaration int SentMessagesCount { get; } Property Value Type Description System.Int32 StartTime Start time of the JVM in milliseconds. Declaration DateTime StartTime { get; } Property Value Type Description System.DateTime TotalBusyTime Total time this node spent executing jobs. Declaration long TotalBusyTime { get; } Property Value Type Description System.Int64 TotalCancelledJobs Total number of cancelled jobs since node startup. Declaration int TotalCancelledJobs { get; } Property Value Type Description System.Int32 TotalCpus Returns the number of CPUs available to the Java Virtual Machine. Declaration int TotalCpus { get; } Property Value Type Description System.Int32 TotalExecutedJobs Total number of jobs handled by the node since node startup. Declaration int TotalExecutedJobs { get; } Property Value Type Description System.Int32 TotalExecutedTasks Total number of jobs handled by the node. Declaration int TotalExecutedTasks { get; } Property Value Type Description System.Int32 TotalIdleTime Total time this node spent idling. Declaration long TotalIdleTime { get; } Property Value Type Description System.Int64 TotalNodes Gets total number of nodes. Declaration int TotalNodes { get; } Property Value Type Description System.Int32 TotalRejectedJobs Total number of jobs this node rejects during collision resolution operations since node startup. Declaration int TotalRejectedJobs { get; } Property Value Type Description System.Int32 TotalStartedThreadCount The total number of threads started. Declaration long TotalStartedThreadCount { get; } Property Value Type Description System.Int64 Uptime Uptime of the JVM in milliseconds. Declaration long Uptime { get; } Property Value Type Description System.Int64"
  },
  "api/Apache.Ignite.Core.Cluster.IClusterNode.html": {
    "href": "api/Apache.Ignite.Core.Cluster.IClusterNode.html",
    "title": "Interface IClusterNode | Apache Ignite.NET",
    "keywords": "Interface IClusterNode Interface representing a single cluster node. Use GetAttribute<T>(String) or GetMetrics() to get static and dynamic information about remote nodes. You can get a list of all nodes in grid by calling GetNodes() on IIgnite instance. You can use Ignite node attributes to provide static information about a node. This information is initialized once within grid, during node startup, and remains the same throughout the lifetime of a node. All members are thread-safe and may be used concurrently from multiple threads. Inherited Members IBaselineNode.ConsistentId IBaselineNode.Attributes Namespace : Apache.Ignite.Core.Cluster Assembly : Apache.Ignite.Core.dll Syntax public interface IClusterNode : IBaselineNode Properties Addresses Collection of addresses this node is known by. Declaration ICollection<string> Addresses { get; } Property Value Type Description System.Collections.Generic.ICollection < System.String > Collection of addresses. HostNames Collection of host names this node is known by. Declaration ICollection<string> HostNames { get; } Property Value Type Description System.Collections.Generic.ICollection < System.String > Collection of host names. Id Globally unique node ID. A new ID is generated every time a node restarts. Declaration Guid Id { get; } Property Value Type Description System.Guid IsClient Gets a value indicating whether or not this node is connected to cluster as a client. Do not confuse client in terms of discovery and client in terms of cache. Cache clients cannot carry data, while topology clients connect to the topology in a different way. Declaration bool IsClient { get; } Property Value Type Description System.Boolean true if this node is a client node, false otherwise. . IsDaemon Tests whether or not this node is a daemon. Daemon nodes are the usual Ignite nodes that participate in topology but not visible on the main APIs, i.e. they are not part of any projections. Daemon nodes are used primarily for management and monitoring functionality that is build on Ignite and needs to participate in the topology but should be excluded from \"normal\" topology so that it won't participate in task execution or in-memory database. Application code should never use daemon nodes. Declaration bool IsDaemon { get; } Property Value Type Description System.Boolean IsLocal Tests whether or not this node is a local node. Declaration bool IsLocal { get; } Property Value Type Description System.Boolean Order Node order within grid topology. Discovery SPIs that support node ordering will assign a proper order to each node and will guarantee that discovery event notifications for new nodes will come in proper order. All other SPIs not supporting ordering may choose to return node startup time here. Declaration long Order { get; } Property Value Type Description System.Int64 Methods GetAttribute<T>(String) Gets node's attribute. Attributes are assigned to nodes at startup. Note that attributes cannot be changed at runtime. Declaration T GetAttribute<T>(string name) Parameters Type Name Description System.String name Attribute name. Returns Type Description T Attribute value. Type Parameters Name Description T GetAttributes() Gets all node attributes. Attributes are assigned to nodes at startup. Note that attributes cannot be changed at runtime. Declaration [Obsolete(\"Use Attributes property.\")] IDictionary<string, object> GetAttributes() Returns Type Description System.Collections.Generic.IDictionary < System.String , System.Object > All node attributes. GetMetrics() Gets metrics snapshot for this node. Note that node metrics are constantly updated and provide up to date information about nodes. For example, you can get an idea about CPU load on remote node via CurrentCpuLoad . Node metrics are updated with some delay which is directly related to heartbeat frequency. For example, when used with default GridTcpDiscoverySpi the update will happen every 2 seconds. Declaration IClusterMetrics GetMetrics() Returns Type Description IClusterMetrics Runtime metrics snapshot for this node. TryGetAttribute<T>(String, out T) Try getting node's attribute. Attributes are assigned to nodes at startup. Note that attributes cannot be changed at runtime. Declaration bool TryGetAttribute<T>(string name, out T attr) Parameters Type Name Description System.String name Attribute name. T attr Attribute value. Returns Type Description System.Boolean true in case such attribute exists. Type Parameters Name Description T"
  },
  "api/Apache.Ignite.Core.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.IComputeFunc-1.html": {
    "href": "api/Apache.Ignite.Core.Compute.IComputeFunc-1.html",
    "title": "Interface IComputeFunc<TRes> | Apache Ignite.NET",
    "keywords": "Interface IComputeFunc<TRes> Defines function having no arguments. Namespace : Apache.Ignite.Core.Compute Assembly : Apache.Ignite.Core.dll Syntax public interface IComputeFunc<out TRes> Type Parameters Name Description TRes Methods Invoke() Invoke function. Declaration TRes Invoke() Returns Type Description TRes Result."
  },
  "api/Apache.Ignite.Core.Compute.IComputeFunc-2.html": {
    "href": "api/Apache.Ignite.Core.Compute.IComputeFunc-2.html",
    "title": "Interface IComputeFunc<TArg, TRes> | Apache Ignite.NET",
    "keywords": "Interface IComputeFunc<TArg, TRes> Defines function having a single argument. Namespace : Apache.Ignite.Core.Compute Assembly : Apache.Ignite.Core.dll Syntax public interface IComputeFunc<in TArg, out TRes> Type Parameters Name Description TArg TRes Methods Invoke(TArg) Invoke function. Declaration TRes Invoke(TArg arg) Parameters Type Name Description TArg arg Argument. Returns Type Description TRes Result."
  },
  "api/Apache.Ignite.Core.Configuration.DataStorageConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Configuration.DataStorageConfiguration.html",
    "title": "Class DataStorageConfiguration | Apache Ignite.NET",
    "keywords": "Class DataStorageConfiguration Data storage configuration for Ignite page memory. The page memory is a manageable off-heap based memory architecture that divides all expandable data regions into pages of fixed size. An individual page can store one or many cache key-value entries that allows reusing the memory in the most efficient way and avoid memory fragmentation issues. By default, the page memory allocates a single expandable data region. All the caches that will be configured in an application will be mapped to this data region by default, thus, all the cache data will reside in that data region. Inheritance System.Object DataStorageConfiguration Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Configuration Assembly : Apache.Ignite.Core.dll Syntax public class DataStorageConfiguration Constructors DataStorageConfiguration() Initializes a new instance of the DataStorageConfiguration class. Declaration public DataStorageConfiguration() Fields DefaultCheckpointFrequency Default value for CheckpointFrequency . Declaration public static readonly TimeSpan DefaultCheckpointFrequency Field Value Type Description System.TimeSpan DefaultCheckpointThreads Default value for CheckpointThreads . Declaration public const int DefaultCheckpointThreads = 4 Field Value Type Description System.Int32 DefaultCheckpointWriteOrder Default value for CheckpointWriteOrder . Declaration public const CheckpointWriteOrder DefaultCheckpointWriteOrder = CheckpointWriteOrder.Sequential Field Value Type Description CheckpointWriteOrder DefaultConcurrencyLevel The default concurrency level. Declaration public const int DefaultConcurrencyLevel = 0 Field Value Type Description System.Int32 DefaultDataRegionName Default name is assigned to default data region if no user-defined DefaultDataRegionConfiguration is specified. Declaration public const string DefaultDataRegionName = \"default\" Field Value Type Description System.String DefaultLockWaitTime Default value for LockWaitTime . Declaration public static readonly TimeSpan DefaultLockWaitTime Field Value Type Description System.TimeSpan DefaultMaxWalArchiveSize Default value for MaxWalArchiveSize . Declaration public const long DefaultMaxWalArchiveSize = 1073741824L Field Value Type Description System.Int64 DefaultMetricsRateTimeInterval The default rate time interval. Declaration public static readonly TimeSpan DefaultMetricsRateTimeInterval Field Value Type Description System.TimeSpan DefaultMetricsSubIntervalCount The default sub intervals. Declaration public const int DefaultMetricsSubIntervalCount = 5 Field Value Type Description System.Int32 DefaultPageSize The default page size. Declaration public const int DefaultPageSize = 4096 Field Value Type Description System.Int32 DefaultSystemRegionInitialSize Default size of a memory chunk reserved for system cache initially. Declaration public const long DefaultSystemRegionInitialSize = 41943040L Field Value Type Description System.Int64 DefaultSystemRegionMaxSize Default max size of a memory chunk for the system cache. Declaration public const long DefaultSystemRegionMaxSize = 104857600L Field Value Type Description System.Int64 DefaultTlbSize Default value for WalThreadLocalBufferSize . Declaration public const int DefaultTlbSize = 131072 Field Value Type Description System.Int32 DefaultWalArchivePath Default value for WalArchivePath . Declaration public const string DefaultWalArchivePath = \"db/wal/archive\" Field Value Type Description System.String DefaultWalAutoArchiveAfterInactivity Default value for WalFlushFrequency . Declaration public static readonly TimeSpan DefaultWalAutoArchiveAfterInactivity Field Value Type Description System.TimeSpan DefaultWalCompactionEnabled Default value for WalCompactionEnabled . Declaration public const bool DefaultWalCompactionEnabled = false Field Value Type Description System.Boolean DefaultWalFlushFrequency Default value for WalFlushFrequency . Declaration public static readonly TimeSpan DefaultWalFlushFrequency Field Value Type Description System.TimeSpan DefaultWalFsyncDelayNanos Default value for WalFsyncDelayNanos . Declaration public const long DefaultWalFsyncDelayNanos = 1000L Field Value Type Description System.Int64 DefaultWalHistorySize Default value for WalHistorySize . Declaration public const int DefaultWalHistorySize = 20 Field Value Type Description System.Int32 DefaultWalMode Default value for WalMode . Declaration public const WalMode DefaultWalMode = WalMode.LogOnly Field Value Type Description WalMode DefaultWalPath Default value for WalPath . Declaration public const string DefaultWalPath = \"db/wal\" Field Value Type Description System.String DefaultWalRecordIteratorBufferSize Default value for WalRecordIteratorBufferSize . Declaration public const int DefaultWalRecordIteratorBufferSize = 67108864 Field Value Type Description System.Int32 DefaultWalSegments Default value for WalSegments . Declaration public const int DefaultWalSegments = 10 Field Value Type Description System.Int32 DefaultWalSegmentSize Default value for WalSegmentSize . Declaration public const int DefaultWalSegmentSize = 67108864 Field Value Type Description System.Int32 DefaultWriteThrottlingEnabled Default value for WriteThrottlingEnabled . Declaration public const bool DefaultWriteThrottlingEnabled = false Field Value Type Description System.Boolean Properties AlwaysWriteFullPages Gets or sets a value indicating whether full pages should always be written. Declaration public bool AlwaysWriteFullPages { get; set; } Property Value Type Description System.Boolean CheckpointFrequency Gets or sets the checkpointing frequency which is a minimal interval when the dirty pages will be written to the Persistent Store. Declaration public TimeSpan CheckpointFrequency { get; set; } Property Value Type Description System.TimeSpan CheckpointReadLockTimeout Gets or sets the timeout for checkpoint read lock acquisition. Declaration public TimeSpan? CheckpointReadLockTimeout { get; set; } Property Value Type Description System.Nullable < System.TimeSpan > CheckpointThreads Gets or sets the number of threads for checkpointing. Declaration public int CheckpointThreads { get; set; } Property Value Type Description System.Int32 CheckpointWriteOrder Gets or sets the checkpoint page write order on disk. Declaration public CheckpointWriteOrder CheckpointWriteOrder { get; set; } Property Value Type Description CheckpointWriteOrder ConcurrencyLevel Gets or sets the number of concurrent segments in Ignite internal page mapping tables. Declaration public int ConcurrencyLevel { get; set; } Property Value Type Description System.Int32 DataRegionConfigurations Gets or sets the data region configurations. Declaration public ICollection<DataRegionConfiguration> DataRegionConfigurations { get; set; } Property Value Type Description System.Collections.Generic.ICollection < DataRegionConfiguration > DefaultDataRegionConfiguration Gets or sets the default region configuration. Declaration public DataRegionConfiguration DefaultDataRegionConfiguration { get; set; } Property Value Type Description DataRegionConfiguration LockWaitTime Gets or sets the persistent manager file lock wait time. Declaration public TimeSpan LockWaitTime { get; set; } Property Value Type Description System.TimeSpan MaxWalArchiveSize Gets or sets maximum size of wal archive folder, in bytes. Declaration public long MaxWalArchiveSize { get; set; } Property Value Type Description System.Int64 MetricsEnabled Gets or sets a value indicating whether to enable data storage metrics. See GetDataStorageMetrics() . Declaration public bool MetricsEnabled { get; set; } Property Value Type Description System.Boolean MetricsRateTimeInterval Gets or sets the length of the time interval for rate-based metrics. This interval defines a window over which hits will be tracked. Declaration public TimeSpan MetricsRateTimeInterval { get; set; } Property Value Type Description System.TimeSpan MetricsSubIntervalCount Number of sub-intervals to split the MetricsRateTimeInterval into to track the update history. Declaration public int MetricsSubIntervalCount { get; set; } Property Value Type Description System.Int32 PageSize Gets or sets the size of the memory page. Declaration public int PageSize { get; set; } Property Value Type Description System.Int32 StoragePath Gets or sets the path where data and indexes will be persisted. Declaration public string StoragePath { get; set; } Property Value Type Description System.String SystemRegionInitialSize Gets or sets the size of a memory chunk reserved for system needs. Declaration public long SystemRegionInitialSize { get; set; } Property Value Type Description System.Int64 SystemRegionMaxSize Gets or sets the maximum memory region size reserved for system needs. Declaration public long SystemRegionMaxSize { get; set; } Property Value Type Description System.Int64 WalArchivePath Gets or sets the path to the directory where WAL (Write Ahead Log) archive is stored. Every WAL segment will be fully copied to this directory before it can be reused for WAL purposes. Declaration public string WalArchivePath { get; set; } Property Value Type Description System.String WalAutoArchiveAfterInactivity Gets or sets the inactivity time after which to run WAL segment auto archiving. Declaration public TimeSpan WalAutoArchiveAfterInactivity { get; set; } Property Value Type Description System.TimeSpan WalCompactionEnabled Gets or sets flag indicating whether WAL compaction is enabled. If true, system filters and compresses WAL archive in background. Compressed WAL archive gets automatically decompressed on demand. Declaration public bool WalCompactionEnabled { get; set; } Property Value Type Description System.Boolean WalFlushFrequency Gets or sets the WAL (Write Ahead Log) flush frequency. Declaration public TimeSpan WalFlushFrequency { get; set; } Property Value Type Description System.TimeSpan WalFsyncDelayNanos Gets or sets the WAL (Write Ahead Log) fsync (disk sync) delay, in nanoseconds Declaration public long WalFsyncDelayNanos { get; set; } Property Value Type Description System.Int64 WalHistorySize Gets or sets the number of checkpoints to store in WAL (Write Ahead Log) history. Declaration public int WalHistorySize { get; set; } Property Value Type Description System.Int32 WalMode Gets or sets the WAL (Write Ahead Log) mode. Declaration public WalMode WalMode { get; set; } Property Value Type Description WalMode WalPath Gets or sets the path to the directory where WAL (Write Ahead Log) is stored. Declaration public string WalPath { get; set; } Property Value Type Description System.String WalRecordIteratorBufferSize Gets or sets the size of the WAL (Write Ahead Log) record iterator buffer, in bytes. Declaration public int WalRecordIteratorBufferSize { get; set; } Property Value Type Description System.Int32 WalSegments Gets or sets a number of WAL (Write Ahead Log) segments to work with. For performance reasons, the whole WAL is split into files of fixed length called segments. Declaration public int WalSegments { get; set; } Property Value Type Description System.Int32 WalSegmentSize Gets or sets the size of the WAL (Write Ahead Log) segment. For performance reasons, the whole WAL is split into files of fixed length called segments. Declaration public int WalSegmentSize { get; set; } Property Value Type Description System.Int32 WalThreadLocalBufferSize Gets or sets the size of the TLB (Thread-Local Buffer), in bytes. Declaration public int WalThreadLocalBufferSize { get; set; } Property Value Type Description System.Int32 WriteThrottlingEnabled Gets or sets a value indicating whether threads that generate dirty pages too fast during ongoing checkpoint will be throttled. Declaration public bool WriteThrottlingEnabled { get; set; } Property Value Type Description System.Boolean"
  },
  "api/Apache.Ignite.Core.Configuration.SqlConnectorConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Configuration.SqlConnectorConfiguration.html",
    "title": "Class SqlConnectorConfiguration | Apache Ignite.NET",
    "keywords": "Class SqlConnectorConfiguration SQL connector configuration (for ODBC and JDBC). Inheritance System.Object SqlConnectorConfiguration Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Configuration Assembly : Apache.Ignite.Core.dll Syntax [Obsolete(\"Use ClientConnectorConfiguration instead.\")] public class SqlConnectorConfiguration Constructors SqlConnectorConfiguration() Initializes a new instance of the SqlConnectorConfiguration class. Declaration public SqlConnectorConfiguration() Fields DefaultMaxOpenCursorsPerConnection Default maximum number of open cursors per connection. Declaration public const int DefaultMaxOpenCursorsPerConnection = 128 Field Value Type Description System.Int32 DefaultPort Default port. Declaration public const int DefaultPort = 10800 Field Value Type Description System.Int32 DefaultPortRange Default port range. Declaration public const int DefaultPortRange = 100 Field Value Type Description System.Int32 DefaultSocketBufferSize Default socket buffer size. Declaration public const int DefaultSocketBufferSize = 0 Field Value Type Description System.Int32 DefaultTcpNoDelay Default value of TcpNoDelay property. Declaration public const bool DefaultTcpNoDelay = true Field Value Type Description System.Boolean DefaultThreadPoolSize Default SQL connector thread pool size. Declaration public static readonly int DefaultThreadPoolSize Field Value Type Description System.Int32 Properties Host Gets or sets the host. Declaration public string Host { get; set; } Property Value Type Description System.String MaxOpenCursorsPerConnection Gets or sets the maximum open cursors per connection. Declaration public int MaxOpenCursorsPerConnection { get; set; } Property Value Type Description System.Int32 Port Gets or sets the port. Declaration public int Port { get; set; } Property Value Type Description System.Int32 PortRange Gets or sets the port range. Declaration public int PortRange { get; set; } Property Value Type Description System.Int32 SocketReceiveBufferSize Gets or sets the size of the socket receive buffer. When set to 0, operating system default is used. Declaration public int SocketReceiveBufferSize { get; set; } Property Value Type Description System.Int32 SocketSendBufferSize Gets or sets the size of the socket send buffer. When set to 0, operating system default is used. Declaration public int SocketSendBufferSize { get; set; } Property Value Type Description System.Int32 TcpNoDelay Gets or sets the value for TCP_NODELAY socket option. Each socket will be opened using provided value. Setting this option to true disables Nagle's algorithm for socket decreasing latency and delivery time for small messages. For systems that work under heavy network load it is advisable to set this value to false . Declaration public bool TcpNoDelay { get; set; } Property Value Type Description System.Boolean ThreadPoolSize Gets or sets the size of the thread pool. Declaration public int ThreadPoolSize { get; set; } Property Value Type Description System.Int32"
  },
  "api/Apache.Ignite.Core.Deployment.PeerAssemblyLoadingMode.html": {
    "href": "api/Apache.Ignite.Core.Deployment.PeerAssemblyLoadingMode.html",
    "title": "Enum PeerAssemblyLoadingMode | Apache Ignite.NET",
    "keywords": "Enum PeerAssemblyLoadingMode Peer assembly loading mode. See PeerAssemblyLoadingMode . Namespace : Apache.Ignite.Core.Deployment Assembly : Apache.Ignite.Core.dll Syntax public enum PeerAssemblyLoadingMode Fields Name Description CurrentAppDomain Automatically load assemblies from remote nodes into the current System.AppDomain . .NET does not allow assembly unloading, which means that all peer-loaded assemblies will live as long as the current AppDomain lives. This may cause increased memory usage. Assemblies are distinguished using their fully qualified name. Multiple versions of the same assembly can be loaded and the correct version will be used (according to Type.AssemblyQualifiedName). So in case when a new version of some type needs to be executed on remote nodes, corresponding assembly version should be bumped up. If assembly is recompiled without version increment, it is considered the same as before and won't be updated. Assemblies are requested from remote nodes on demand. For example, IComputeFunc<TRes> is sent to all nodes via Broadcast<TRes>(IComputeFunc<TRes>) . Each node then deserializes the instance and, if containing assembly is not present, requests it from originating node (which did the Broadcast<TRes>(IComputeFunc<TRes>) call), if it is alive, or from any other node in cluster. Therefore it is possible that eventually all nodes in cluster will have this assebly loaded. Disabled Disabled peer assembly loading. Default mode."
  },
  "api/Apache.Ignite.Core.Deployment.html": {
    "href": "api/Apache.Ignite.Core.Deployment.html",
    "title": "Namespace Apache.Ignite.Core.Deployment | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Deployment Enums PeerAssemblyLoadingMode Peer assembly loading mode. See PeerAssemblyLoadingMode ."
  },
  "api/Apache.Ignite.Core.Events.CacheEvent.html": {
    "href": "api/Apache.Ignite.Core.Events.CacheEvent.html",
    "title": "Class CacheEvent | Apache Ignite.NET",
    "keywords": "Class CacheEvent In-memory database (cache) event. Inheritance System.Object EventBase CacheEvent Implements IEvent System.IEquatable < EventBase > Inherited Members EventBase.Id EventBase.LocalOrder EventBase.Node EventBase.Message EventBase.Type EventBase.Name EventBase.Timestamp EventBase.Equals(EventBase) EventBase.Equals(Object) EventBase.GetHashCode() EventBase.ToString() EventBase.ReadNode(IBinaryRawReader) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Events Assembly : Apache.Ignite.Core.dll Syntax public sealed class CacheEvent : EventBase, IEvent, IEquatable<EventBase> Properties CacheName Gets cache name. Declaration public string CacheName { get; } Property Value Type Description System.String ClosureClassName Gets closure class name (applicable only for TRANSFORM operations). Declaration public string ClosureClassName { get; } Property Value Type Description System.String EventNode Gets node which initiated cache operation or null if that node is not available. Declaration public IClusterNode EventNode { get; } Property Value Type Description IClusterNode HasNewValue Gets flag indicating whether cache entry has new value in case if we only have new value in serialized form in which case NewValue will return null. Declaration public bool HasNewValue { get; } Property Value Type Description System.Boolean HasOldValue Gets flag indicating whether cache entry has old value in case if we only have old value in serialized form in which case OldValue will return null. Declaration public bool HasOldValue { get; } Property Value Type Description System.Boolean IsNear Gets flag indicating whether event happened on near or partitioned cache. Declaration public bool IsNear { get; } Property Value Type Description System.Boolean Key Gets cache entry associated with event. Declaration public object Key { get; } Property Value Type Description System.Object NewValue Gets new value for this event. Declaration public object NewValue { get; } Property Value Type Description System.Object OldValue Gets old value associated with this event. Declaration public object OldValue { get; } Property Value Type Description System.Object Partition Gets partition for the event which is the partition the key belongs to. Declaration public int Partition { get; } Property Value Type Description System.Int32 SubjectId Gets security subject ID initiated this cache event, if available. This property is available only for CacheObjectPut , CacheObjectRemoved and CacheObjectRead cache events. Subject ID will be set either to nodeId initiated cache update or read or client ID initiated cache update or read. Declaration public Guid? SubjectId { get; } Property Value Type Description System.Nullable < System.Guid > TaskName Gets task name if cache event was caused by an operation initiated within task execution. Declaration public string TaskName { get; } Property Value Type Description System.String Xid ID of surrounding cache cache transaction or null if there is no surrounding transaction. Declaration public IgniteGuid? Xid { get; } Property Value Type Description System.Nullable < IgniteGuid > Methods ToShortString() Gets shortened version of ToString result. Declaration public override string ToShortString() Returns Type Description System.String Overrides EventBase.ToShortString() Implements IEvent System.IEquatable<T>"
  },
  "api/Apache.Ignite.Core.Events.CacheQueryExecutedEvent.html": {
    "href": "api/Apache.Ignite.Core.Events.CacheQueryExecutedEvent.html",
    "title": "Class CacheQueryExecutedEvent | Apache Ignite.NET",
    "keywords": "Class CacheQueryExecutedEvent Cache query execution event. Inheritance System.Object EventBase CacheQueryExecutedEvent Implements IEvent System.IEquatable < EventBase > Inherited Members EventBase.Id EventBase.LocalOrder EventBase.Node EventBase.Message EventBase.Type EventBase.Name EventBase.Timestamp EventBase.Equals(EventBase) EventBase.Equals(Object) EventBase.GetHashCode() EventBase.ToString() EventBase.ReadNode(IBinaryRawReader) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Events Assembly : Apache.Ignite.Core.dll Syntax public sealed class CacheQueryExecutedEvent : EventBase, IEvent, IEquatable<EventBase> Properties CacheName Gets cache name on which query was executed. Declaration public string CacheName { get; } Property Value Type Description System.String ClassName Gets queried class name. Applicable for SQL and full text queries. Declaration public string ClassName { get; } Property Value Type Description System.String Clause Gets query clause. Applicable for SQL, SQL fields and full text queries. Declaration public string Clause { get; } Property Value Type Description System.String QueryType Gets query type. Declaration public string QueryType { get; } Property Value Type Description System.String SubjectId Gets security subject ID. Declaration public Guid? SubjectId { get; } Property Value Type Description System.Nullable < System.Guid > TaskName Gets the name of the task that executed the query (if any). Declaration public string TaskName { get; } Property Value Type Description System.String Methods ToShortString() Gets shortened version of ToString result. Declaration public override string ToShortString() Returns Type Description System.String Overrides EventBase.ToShortString() Implements IEvent System.IEquatable<T>"
  },
  "api/Apache.Ignite.Core.Events.CacheQueryReadEvent.html": {
    "href": "api/Apache.Ignite.Core.Events.CacheQueryReadEvent.html",
    "title": "Class CacheQueryReadEvent | Apache Ignite.NET",
    "keywords": "Class CacheQueryReadEvent Cache query read event. Inheritance System.Object EventBase CacheQueryReadEvent Implements IEvent System.IEquatable < EventBase > Inherited Members EventBase.Id EventBase.LocalOrder EventBase.Node EventBase.Message EventBase.Type EventBase.Name EventBase.Timestamp EventBase.Equals(EventBase) EventBase.Equals(Object) EventBase.GetHashCode() EventBase.ToString() EventBase.ReadNode(IBinaryRawReader) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Events Assembly : Apache.Ignite.Core.dll Syntax public sealed class CacheQueryReadEvent : EventBase, IEvent, IEquatable<EventBase> Properties CacheName Gets cache name on which query was executed. Declaration public string CacheName { get; } Property Value Type Description System.String ClassName Gets queried class name. Applicable for SQL and full text queries. Declaration public string ClassName { get; } Property Value Type Description System.String Clause Gets query clause. Applicable for SQL, SQL fields and full text queries. Declaration public string Clause { get; } Property Value Type Description System.String Key Gets read entry key. Declaration public object Key { get; } Property Value Type Description System.Object OldValue Gets read entry old value (applicable for continuous queries). Declaration public object OldValue { get; } Property Value Type Description System.Object QueryType Gets query type. Declaration public string QueryType { get; } Property Value Type Description System.String Row Gets read results set row. Declaration public object Row { get; } Property Value Type Description System.Object SubjectId Gets security subject ID. Declaration public Guid? SubjectId { get; } Property Value Type Description System.Nullable < System.Guid > TaskName Gets the name of the task that executed the query (if any). Declaration public string TaskName { get; } Property Value Type Description System.String Value Gets read entry value. Declaration public object Value { get; } Property Value Type Description System.Object Methods ToShortString() Gets shortened version of ToString result. Declaration public override string ToShortString() Returns Type Description System.String Overrides EventBase.ToShortString() Implements IEvent System.IEquatable<T>"
  },
  "api/Apache.Ignite.EntityFramework.IDbCachingPolicy.html": {
    "href": "api/Apache.Ignite.EntityFramework.IDbCachingPolicy.html",
    "title": "Interface IDbCachingPolicy | Apache Ignite.NET",
    "keywords": "Interface IDbCachingPolicy Caching policy: defines which queries should be cached. Namespace : Apache.Ignite.EntityFramework Assembly : Apache.Ignite.EntityFramework.dll Syntax public interface IDbCachingPolicy Methods CanBeCached(DbQueryInfo) Determines whether the specified query can be cached. Declaration bool CanBeCached(DbQueryInfo queryInfo) Parameters Type Name Description DbQueryInfo queryInfo The query information. Returns Type Description System.Boolean true if the specified query can be cached; otherwise, false . CanBeCached(DbQueryInfo, Int32) Determines whether specified number of rows should be cached. Declaration bool CanBeCached(DbQueryInfo queryInfo, int rowCount) Parameters Type Name Description DbQueryInfo queryInfo The query information. System.Int32 rowCount The count of fetched rows. Returns Type Description System.Boolean GetCachingMode(DbQueryInfo) Gets the caching strategy for a give query. Declaration DbCachingMode GetCachingMode(DbQueryInfo queryInfo) Parameters Type Name Description DbQueryInfo queryInfo The query information. Returns Type Description DbCachingMode Caching strategy for the query. GetExpirationTimeout(DbQueryInfo) Gets the absolute expiration timeout for a given query. Declaration TimeSpan GetExpirationTimeout(DbQueryInfo queryInfo) Parameters Type Name Description DbQueryInfo queryInfo The query information. Returns Type Description System.TimeSpan Expiration timeout. System.TimeSpan.MaxValue for no expiration."
  },
  "api/Apache.Ignite.EntityFramework.IgniteDbConfiguration.html": {
    "href": "api/Apache.Ignite.EntityFramework.IgniteDbConfiguration.html",
    "title": "Class IgniteDbConfiguration | Apache Ignite.NET",
    "keywords": "Class IgniteDbConfiguration System.Data.Entity.DbConfiguration implementation that uses Ignite as a second-level cache for Entity Framework queries. Inheritance System.Object System.Data.Entity.DbConfiguration IgniteDbConfiguration Inherited Members System.Data.Entity.DbConfiguration.SetConfiguration(System.Data.Entity.DbConfiguration) System.Data.Entity.DbConfiguration.LoadConfiguration(System.Type) System.Data.Entity.DbConfiguration.LoadConfiguration(System.Reflection.Assembly) System.Data.Entity.DbConfiguration.AddDependencyResolver(System.Data.Entity.Infrastructure.DependencyResolution.IDbDependencyResolver) System.Data.Entity.DbConfiguration.AddDefaultResolver(System.Data.Entity.Infrastructure.DependencyResolution.IDbDependencyResolver) System.Data.Entity.DbConfiguration.SetProviderServices(System.String, System.Data.Entity.Core.Common.DbProviderServices) System.Data.Entity.DbConfiguration.SetProviderFactory(System.String, System.Data.Common.DbProviderFactory) System.Data.Entity.DbConfiguration.SetExecutionStrategy(System.String, System.Func<System.Data.Entity.Infrastructure.IDbExecutionStrategy>) System.Data.Entity.DbConfiguration.SetExecutionStrategy(System.String, System.Func<System.Data.Entity.Infrastructure.IDbExecutionStrategy>, System.String) System.Data.Entity.DbConfiguration.SetDefaultTransactionHandler(System.Func<System.Data.Entity.Infrastructure.TransactionHandler>) System.Data.Entity.DbConfiguration.SetTransactionHandler(System.String, System.Func<System.Data.Entity.Infrastructure.TransactionHandler>) System.Data.Entity.DbConfiguration.SetTransactionHandler(System.String, System.Func<System.Data.Entity.Infrastructure.TransactionHandler>, System.String) System.Data.Entity.DbConfiguration.SetDefaultConnectionFactory(System.Data.Entity.Infrastructure.IDbConnectionFactory) System.Data.Entity.DbConfiguration.SetPluralizationService(System.Data.Entity.Infrastructure.Pluralization.IPluralizationService) System.Data.Entity.DbConfiguration.SetDatabaseInitializer<TContext>(System.Data.Entity.IDatabaseInitializer<TContext>) System.Data.Entity.DbConfiguration.SetMigrationSqlGenerator(System.String, System.Func<System.Data.Entity.Migrations.Sql.MigrationSqlGenerator>) System.Data.Entity.DbConfiguration.SetManifestTokenResolver(System.Data.Entity.Infrastructure.IManifestTokenResolver) System.Data.Entity.DbConfiguration.SetMetadataAnnotationSerializer(System.String, System.Func<System.Data.Entity.Infrastructure.IMetadataAnnotationSerializer>) System.Data.Entity.DbConfiguration.SetProviderFactoryResolver(System.Data.Entity.Infrastructure.IDbProviderFactoryResolver) System.Data.Entity.DbConfiguration.SetModelCacheKey(System.Func<System.Data.Entity.DbContext, System.Data.Entity.Infrastructure.IDbModelCacheKey>) System.Data.Entity.DbConfiguration.SetDefaultHistoryContext(System.Func<System.Data.Common.DbConnection, System.String, System.Data.Entity.Migrations.History.HistoryContext>) System.Data.Entity.DbConfiguration.SetHistoryContext(System.String, System.Func<System.Data.Common.DbConnection, System.String, System.Data.Entity.Migrations.History.HistoryContext>) System.Data.Entity.DbConfiguration.SetDefaultSpatialServices(System.Data.Entity.Spatial.DbSpatialServices) System.Data.Entity.DbConfiguration.SetSpatialServices(System.Data.Entity.Infrastructure.DbProviderInfo, System.Data.Entity.Spatial.DbSpatialServices) System.Data.Entity.DbConfiguration.SetSpatialServices(System.String, System.Data.Entity.Spatial.DbSpatialServices) System.Data.Entity.DbConfiguration.SetDatabaseLogFormatter(System.Func<System.Data.Entity.DbContext, System.Action<System.String>, System.Data.Entity.Infrastructure.Interception.DatabaseLogFormatter>) System.Data.Entity.DbConfiguration.AddInterceptor(System.Data.Entity.Infrastructure.Interception.IDbInterceptor) System.Data.Entity.DbConfiguration.SetContextFactory(System.Type, System.Func<System.Data.Entity.DbContext>) System.Data.Entity.DbConfiguration.SetContextFactory<TContext>(System.Func<TContext>) System.Data.Entity.DbConfiguration.SetTableExistenceChecker(System.String, System.Data.Entity.Infrastructure.TableExistenceChecker) System.Data.Entity.DbConfiguration.DependencyResolver System.Data.Entity.DbConfiguration.Loaded System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.EntityFramework Assembly : Apache.Ignite.EntityFramework.dll Syntax public class IgniteDbConfiguration : DbConfiguration Constructors IgniteDbConfiguration() Initializes a new instance of the IgniteDbConfiguration class. This constructor uses default Ignite instance (with null IgniteInstanceName ) and a cache with DefaultCacheNamePrefix name. Ignite instance will be started automatically, if it is not started yet. IgniteConfigurationSection with name Apache.Ignite.EntityFramework.IgniteDbConfiguration.ConfigurationSectionName will be picked up when starting Ignite, if present. Declaration public IgniteDbConfiguration() IgniteDbConfiguration(IgniteConfiguration, CacheConfiguration, CacheConfiguration, IDbCachingPolicy) Initializes a new instance of the IgniteDbConfiguration class. Declaration public IgniteDbConfiguration(IgniteConfiguration igniteConfiguration, CacheConfiguration metaCacheConfiguration, CacheConfiguration dataCacheConfiguration, IDbCachingPolicy policy) Parameters Type Name Description IgniteConfiguration igniteConfiguration The ignite configuration to use for starting Ignite instance. CacheConfiguration metaCacheConfiguration Configuration of the metadata cache which holds entity set information. Null for default configuration. This cache holds small amount of data, but should not lose entries. At least one backup recommended. CacheConfiguration dataCacheConfiguration Configuration of the data cache which holds query results. Null for default configuration. This cache tolerates lost data and can have no backups. IDbCachingPolicy policy The caching policy. Null for default DbCachingPolicy . IgniteDbConfiguration(IIgnite, CacheConfiguration, CacheConfiguration, IDbCachingPolicy) Initializes a new instance of the IgniteDbConfiguration class. Declaration public IgniteDbConfiguration(IIgnite ignite, CacheConfiguration metaCacheConfiguration, CacheConfiguration dataCacheConfiguration, IDbCachingPolicy policy) Parameters Type Name Description IIgnite ignite The ignite instance to use. CacheConfiguration metaCacheConfiguration Configuration of the metadata cache which holds entity set information. Null for default configuration. This cache holds small amount of data, but should not lose entries. At least one backup recommended. CacheConfiguration dataCacheConfiguration Configuration of the data cache which holds query results. Null for default configuration. This cache tolerates lost data and can have no backups. IDbCachingPolicy policy The caching policy. Null for default DbCachingPolicy . IgniteDbConfiguration(String, CacheConfiguration, CacheConfiguration, IDbCachingPolicy) Initializes a new instance of the IgniteDbConfiguration class. Declaration public IgniteDbConfiguration(string configurationSectionName, CacheConfiguration metaCacheConfiguration, CacheConfiguration dataCacheConfiguration, IDbCachingPolicy policy) Parameters Type Name Description System.String configurationSectionName Name of the configuration section. CacheConfiguration metaCacheConfiguration Configuration of the metadata cache which holds entity set information. Null for default configuration. This cache holds small amount of data, but should not lose entries. At least one backup recommended. CacheConfiguration dataCacheConfiguration Configuration of the data cache which holds query results. Null for default configuration. This cache tolerates lost data and can have no backups. IDbCachingPolicy policy The caching policy. Null for default DbCachingPolicy . IgniteDbConfiguration(String, String, IDbCachingPolicy) Initializes a new instance of the IgniteDbConfiguration class. Declaration public IgniteDbConfiguration(string configurationSectionName, string cacheNamePrefix, IDbCachingPolicy policy) Parameters Type Name Description System.String configurationSectionName Name of the configuration section. System.String cacheNamePrefix The cache name prefix for Data and Metadata caches. IDbCachingPolicy policy The caching policy. Null for default DbCachingPolicy . Fields DefaultCacheNamePrefix The default cache name to be used for cached EF data. Declaration public const string DefaultCacheNamePrefix = \"entityFrameworkQueryCache\" Field Value Type Description System.String Methods InitializeIgniteCaching(DbConfiguration, IIgnite, CacheConfiguration, CacheConfiguration, IDbCachingPolicy) Initializes Ignite caching for specified System.Data.Entity.DbConfiguration . This method should be used when it is not possible to use or inherit IgniteDbConfiguration . Declaration public static void InitializeIgniteCaching(DbConfiguration dbConfiguration, IIgnite ignite, CacheConfiguration metaCacheConfiguration, CacheConfiguration dataCacheConfiguration, IDbCachingPolicy policy) Parameters Type Name Description System.Data.Entity.DbConfiguration dbConfiguration System.Data.Entity.DbConfiguration instance to be initialized for Ignite caching. IIgnite ignite The ignite instance to use. CacheConfiguration metaCacheConfiguration Configuration of the metadata cache which holds entity set information. Null for default configuration. This cache holds small amount of data, but should not lose entries. At least one backup recommended. CacheConfiguration dataCacheConfiguration Configuration of the data cache which holds query results. Null for default configuration. This cache tolerates lost data and can have no backups. IDbCachingPolicy policy The caching policy. Null for default DbCachingPolicy ."
  },
  "api/Apache.Ignite.EntityFramework.html": {
    "href": "api/Apache.Ignite.EntityFramework.html",
    "title": "Namespace Apache.Ignite.EntityFramework | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.EntityFramework Classes DbCachingPolicy Default caching policy implementation: everything is cached with ReadWrite , no expiration. DbQueryInfo Query info. IgniteDbConfiguration System.Data.Entity.DbConfiguration implementation that uses Ignite as a second-level cache for Entity Framework queries. Interfaces IDbCachingPolicy Caching policy: defines which queries should be cached. Enums DbCachingMode Represents a second-level caching strategy."
  },
  "api/Apache.Ignite.Linq.CacheClientLinqExtensions.html": {
    "href": "api/Apache.Ignite.Linq.CacheClientLinqExtensions.html",
    "title": "Class CacheClientLinqExtensions | Apache Ignite.NET",
    "keywords": "Class CacheClientLinqExtensions Extensions methods for ICacheClient<TK, TV> . Inheritance System.Object CacheClientLinqExtensions Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Linq Assembly : Apache.Ignite.Linq.dll Syntax public static class CacheClientLinqExtensions Methods AsCacheQueryable<TKey, TValue>(ICacheClient<TKey, TValue>) Gets an System.Linq.IQueryable<T> instance over this cache. Resulting query will be translated to cache SQL query and executed over the cache instance via either Query(SqlFieldsQuery) . Result of this method (and subsequent query) can be cast to ICacheQueryable for introspection, or converted with ToCacheQueryable<T>(IQueryable<T>) extension method. Declaration public static IQueryable<ICacheEntry<TKey, TValue>> AsCacheQueryable<TKey, TValue>(this ICacheClient<TKey, TValue> cache) Parameters Type Name Description ICacheClient <TKey, TValue> cache The cache. Returns Type Description System.Linq.IQueryable < ICacheEntry <TKey, TValue>> System.Linq.IQueryable<T> instance over this cache. Type Parameters Name Description TKey The type of the key. TValue The type of the value. AsCacheQueryable<TKey, TValue>(ICacheClient<TKey, TValue>, QueryOptions) Gets an System.Linq.IQueryable<T> instance over this cache. Resulting query will be translated to cache SQL query and executed over the cache instance via either Query(SqlFieldsQuery) . Result of this method (and subsequent query) can be cast to ICacheQueryable for introspection. Declaration public static IQueryable<ICacheEntry<TKey, TValue>> AsCacheQueryable<TKey, TValue>(this ICacheClient<TKey, TValue> cache, QueryOptions queryOptions) Parameters Type Name Description ICacheClient <TKey, TValue> cache The cache. QueryOptions queryOptions The query options. Returns Type Description System.Linq.IQueryable < ICacheEntry <TKey, TValue>> System.Linq.IQueryable<T> instance over this cache. Type Parameters Name Description TKey The type of the key. TValue The type of the value. AsCacheQueryable<TKey, TValue>(ICacheClient<TKey, TValue>, Boolean) Gets an System.Linq.IQueryable<T> instance over this cache. Resulting query will be translated to cache SQL query and executed over the cache instance via either Query(SqlFieldsQuery) . Result of this method (and subsequent query) can be cast to ICacheQueryable for introspection. Declaration public static IQueryable<ICacheEntry<TKey, TValue>> AsCacheQueryable<TKey, TValue>(this ICacheClient<TKey, TValue> cache, bool local) Parameters Type Name Description ICacheClient <TKey, TValue> cache The cache. System.Boolean local Local flag. When set query will be executed only on local node, so only local entries will be returned as query result. Returns Type Description System.Linq.IQueryable < ICacheEntry <TKey, TValue>> System.Linq.IQueryable<T> instance over this cache. Type Parameters Name Description TKey The type of the key. TValue The type of the value. AsCacheQueryable<TKey, TValue>(ICacheClient<TKey, TValue>, Boolean, String) Gets an System.Linq.IQueryable<T> instance over this cache. Resulting query will be translated to cache SQL query and executed over the cache instance via either Query(SqlFieldsQuery) . Result of this method (and subsequent query) can be cast to ICacheQueryable for introspection. Declaration public static IQueryable<ICacheEntry<TKey, TValue>> AsCacheQueryable<TKey, TValue>(this ICacheClient<TKey, TValue> cache, bool local, string tableName) Parameters Type Name Description ICacheClient <TKey, TValue> cache The cache. System.Boolean local Local flag. When set query will be executed only on local node, so only local entries will be returned as query result. System.String tableName Name of the table. Table name is equal to short class name of a cache value. When a cache has only one type of values, or only one QueryEntity defined, table name will be inferred and can be omitted. Returns Type Description System.Linq.IQueryable < ICacheEntry <TKey, TValue>> System.Linq.IQueryable<T> instance over this cache. Type Parameters Name Description TKey The type of the key. TValue The type of the value."
  },
  "api/Apache.Ignite.Core.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.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.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.AffinityTopologyVersion.html": {
    "href": "api/Apache.Ignite.Core.Cache.Affinity.AffinityTopologyVersion.html",
    "title": "Struct AffinityTopologyVersion | Apache Ignite.NET",
    "keywords": "Struct AffinityTopologyVersion Affinity topology version. Implements System.IEquatable < AffinityTopologyVersion > Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() Namespace : Apache.Ignite.Core.Cache.Affinity Assembly : Apache.Ignite.Core.dll Syntax public struct AffinityTopologyVersion : IEquatable<AffinityTopologyVersion> Constructors AffinityTopologyVersion(Int64, Int32) Initializes a new instance of the AffinityTopologyVersion struct. Declaration public AffinityTopologyVersion(long version, int minorVersion) Parameters Type Name Description System.Int64 version The version. System.Int32 minorVersion The minor version. Properties MinorVersion Gets the minor version, which is increased when new caches start. Declaration public int MinorVersion { get; } Property Value Type Description System.Int32 Version Gets the major version, same as TopologyVersion . Declaration public long Version { get; } Property Value Type Description System.Int64 Methods Equals(AffinityTopologyVersion) Indicates whether the current object is equal to another object of the same type. Declaration public bool Equals(AffinityTopologyVersion other) Parameters Type Name Description AffinityTopologyVersion other An object to compare with this object. Returns Type Description System.Boolean true if the current object is equal to the other parameter; otherwise, false. Equals(Object) Determines whether the specified System.Object , is equal to this instance. Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj The System.Object to compare with this instance. Returns Type Description System.Boolean true if the specified System.Object is equal to this instance; otherwise, false . Overrides System.ValueType.Equals(System.Object) GetHashCode() Returns a hash code for this instance. Declaration public override int GetHashCode() Returns Type Description System.Int32 A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Overrides System.ValueType.GetHashCode() ToString() Returns a System.String that represents this instance. Declaration public override string ToString() Returns Type Description System.String A System.String that represents this instance. Overrides System.ValueType.ToString() Operators Equality(AffinityTopologyVersion, AffinityTopologyVersion) Implements the operator ==. Declaration public static bool operator ==(AffinityTopologyVersion left, AffinityTopologyVersion right) Parameters Type Name Description AffinityTopologyVersion left The left. AffinityTopologyVersion right The right. Returns Type Description System.Boolean The result of the operator. Inequality(AffinityTopologyVersion, AffinityTopologyVersion) Implements the operator !=. Declaration public static bool operator !=(AffinityTopologyVersion left, AffinityTopologyVersion right) Parameters Type Name Description AffinityTopologyVersion left The left. AffinityTopologyVersion right The right. Returns Type Description System.Boolean The result of the operator. Implements System.IEquatable<T>"
  },
  "api/Apache.Ignite.Core.Cache.Configuration.CacheConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Cache.Configuration.CacheConfiguration.html",
    "title": "Class CacheConfiguration | Apache Ignite.NET",
    "keywords": "Class CacheConfiguration Defines grid cache configuration. Inheritance System.Object CacheConfiguration Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Configuration Assembly : Apache.Ignite.Core.dll Syntax public class CacheConfiguration : IBinaryRawWriteAwareEx<BinaryWriter> Constructors CacheConfiguration() Initializes a new instance of the CacheConfiguration class. Declaration public CacheConfiguration() CacheConfiguration(CacheConfiguration) Initializes a new instance of the CacheConfiguration class, performing a deep copy of specified cache configuration. Declaration public CacheConfiguration(CacheConfiguration other) Parameters Type Name Description CacheConfiguration other The other configuration to perfrom deep copy from. CacheConfiguration(String) Initializes a new instance of the CacheConfiguration class. Declaration public CacheConfiguration(string name) Parameters Type Name Description System.String name Cache name. CacheConfiguration(String, QueryEntity[]) Initializes a new instance of the CacheConfiguration class. Declaration public CacheConfiguration(string name, params QueryEntity[] queryEntities) Parameters Type Name Description System.String name Cache name. QueryEntity [] queryEntities Query entities. CacheConfiguration(String, Type[]) Initializes a new instance of the CacheConfiguration class and populates QueryEntities according to provided query types. This constructor is depricated, please use CacheConfiguration(String, QueryEntity[]) Declaration [Obsolete(\"This constructor is deprecated, please use CacheConfiguration(string, QueryEntity[]) instead.\")] public CacheConfiguration(string name, params Type[] queryTypes) Parameters Type Name Description System.String name Cache name. System.Type [] queryTypes Collection of types to be registered as query entities. These types should use QuerySqlFieldAttribute to configure query fields and properties. Fields DefaultAtomicityMode Default atomicity mode. Declaration public const CacheAtomicityMode DefaultAtomicityMode = CacheAtomicityMode.Atomic Field Value Type Description CacheAtomicityMode DefaultBackups Default number of backups. Declaration public const int DefaultBackups = 0 Field Value Type Description System.Int32 DefaultCacheMode Default caching mode. Declaration public const CacheMode DefaultCacheMode = CacheMode.Partitioned Field Value Type Description CacheMode DefaultCacheSize Default cache size to use with eviction policy. Declaration public const int DefaultCacheSize = 100000 Field Value Type Description System.Int32 DefaultCopyOnRead Default value for 'copyOnRead' flag. Declaration public const bool DefaultCopyOnRead = true Field Value Type Description System.Boolean DefaultEagerTtl Default value for eager ttl flag. Declaration public const bool DefaultEagerTtl = true Field Value Type Description System.Boolean DefaultEncryptionEnabled Default value for EncryptionEnabled . Declaration public const bool DefaultEncryptionEnabled = false Field Value Type Description System.Boolean DefaultInvalidate Default value for 'invalidate' flag that indicates if this is invalidation-based cache. Declaration public const bool DefaultInvalidate = false Field Value Type Description System.Boolean DefaultKeepBinaryInStore Default value for KeepBinaryInStore property. Declaration public const bool DefaultKeepBinaryInStore = false Field Value Type Description System.Boolean DefaultKeepVinaryInStore Default value for keep portable in store behavior . Declaration [Obsolete(\"Use DefaultKeepBinaryInStore instead.\")] public const bool DefaultKeepVinaryInStore = true Field Value Type Description System.Boolean DefaultLoadPreviousValue Default value for load previous value flag. Declaration public const bool DefaultLoadPreviousValue = false Field Value Type Description System.Boolean DefaultLockTimeout Default lock timeout. Declaration public static readonly TimeSpan DefaultLockTimeout Field Value Type Description System.TimeSpan DefaultLongQueryWarningTimeout Default timeout after which long query warning will be printed. Declaration public static readonly TimeSpan DefaultLongQueryWarningTimeout Field Value Type Description System.TimeSpan DefaultMaxConcurrentAsyncOperations Default value for 'maxConcurrentAsyncOps'. Declaration public const int DefaultMaxConcurrentAsyncOperations = 500 Field Value Type Description System.Int32 DefaultMaxQueryIteratorsCount Default value for MaxQueryIteratorsCount . Declaration public const int DefaultMaxQueryIteratorsCount = 1024 Field Value Type Description System.Int32 DefaultPartitionLossPolicy Default value for PartitionLossPolicy . Declaration public const PartitionLossPolicy DefaultPartitionLossPolicy = PartitionLossPolicy.Ignore Field Value Type Description PartitionLossPolicy DefaultQueryDetailMetricsSize Default value for QueryDetailMetricsSize . Declaration public const int DefaultQueryDetailMetricsSize = 0 Field Value Type Description System.Int32 DefaultQueryParallelism Default value for QueryParallelism . Declaration public const int DefaultQueryParallelism = 1 Field Value Type Description System.Int32 DefaultReadFromBackup Default value for 'readFromBackup' flag. Declaration public const bool DefaultReadFromBackup = true Field Value Type Description System.Boolean DefaultReadThrough Default value for read-through behavior. Declaration public const bool DefaultReadThrough = false Field Value Type Description System.Boolean DefaultRebalanceBatchesPrefetchCount Default value for RebalanceBatchesPrefetchCount . Declaration public const long DefaultRebalanceBatchesPrefetchCount = 2L Field Value Type Description System.Int64 DefaultRebalanceBatchSize Default rebalance batch size in bytes. Declaration public const int DefaultRebalanceBatchSize = 524288 Field Value Type Description System.Int32 DefaultRebalanceMode Default rebalance mode for distributed cache. Declaration public const CacheRebalanceMode DefaultRebalanceMode = CacheRebalanceMode.Async Field Value Type Description CacheRebalanceMode DefaultRebalanceOrder Default value for RebalanceOrder . Declaration public const int DefaultRebalanceOrder = 0 Field Value Type Description System.Int32 DefaultRebalanceThreadPoolSize Default size of rebalance thread pool. Declaration public const int DefaultRebalanceThreadPoolSize = 2 Field Value Type Description System.Int32 DefaultRebalanceThrottle Time to wait between rebalance messages to avoid overloading CPU. Declaration public static readonly TimeSpan DefaultRebalanceThrottle Field Value Type Description System.TimeSpan DefaultRebalanceTimeout Default rebalance timeout. Declaration public static readonly TimeSpan DefaultRebalanceTimeout Field Value Type Description System.TimeSpan DefaultSqlIndexMaxInlineSize Default value for SqlIndexMaxInlineSize . Declaration public const int DefaultSqlIndexMaxInlineSize = -1 Field Value Type Description System.Int32 DefaultStoreConcurrentLoadAllThreshold Default value for StoreConcurrentLoadAllThreshold . Declaration public const int DefaultStoreConcurrentLoadAllThreshold = 5 Field Value Type Description System.Int32 DefaultWriteBehindBatchSize Default batch size for write-behind cache store. Declaration public const int DefaultWriteBehindBatchSize = 512 Field Value Type Description System.Int32 DefaultWriteBehindCoalescing Default value for WriteBehindCoalescing . Declaration public const bool DefaultWriteBehindCoalescing = true Field Value Type Description System.Boolean DefaultWriteBehindEnabled Default value for 'writeBehindEnabled' flag. Declaration public const bool DefaultWriteBehindEnabled = false Field Value Type Description System.Boolean DefaultWriteBehindFlushFrequency Default flush frequency for write-behind cache store. Declaration public static readonly TimeSpan DefaultWriteBehindFlushFrequency Field Value Type Description System.TimeSpan DefaultWriteBehindFlushSize Default flush size for write-behind cache store. Declaration public const int DefaultWriteBehindFlushSize = 10240 Field Value Type Description System.Int32 DefaultWriteBehindFlushThreadCount Default count of flush threads for write-behind cache store. Declaration public const int DefaultWriteBehindFlushThreadCount = 1 Field Value Type Description System.Int32 DefaultWriteSynchronizationMode Default value for WriteSynchronizationMode property. Declaration public const CacheWriteSynchronizationMode DefaultWriteSynchronizationMode = CacheWriteSynchronizationMode.PrimarySync Field Value Type Description CacheWriteSynchronizationMode DefaultWriteThrough Default value for write-through behavior. Declaration public const bool DefaultWriteThrough = false Field Value Type Description System.Boolean Properties AffinityFunction Gets or sets the affinity function to provide mapping from keys to nodes. Predefined implementations: RendezvousAffinityFunction . Declaration public IAffinityFunction AffinityFunction { get; set; } Property Value Type Description IAffinityFunction AtomicityMode Gets or sets cache atomicity mode. Declaration public CacheAtomicityMode AtomicityMode { get; set; } Property Value Type Description CacheAtomicityMode Backups Gets or sets number of nodes used to back up single partition for Partitioned cache. Declaration public int Backups { get; set; } Property Value Type Description System.Int32 CacheMode Gets or sets caching mode to use. Declaration public CacheMode CacheMode { get; set; } Property Value Type Description CacheMode CacheStoreFactory Gets or sets the factory for underlying persistent storage for read-through and write-through operations. See ReadThrough and WriteThrough properties to enable read-through and write-through behavior so that cache store is invoked on get and/or put operations. If both ReadThrough and WriteThrough are false , cache store will be invoked only on LoadCache(ICacheEntryFilter<TK, TV>, Object[]) calls. Declaration public IFactory<ICacheStore> CacheStoreFactory { get; set; } Property Value Type Description IFactory < ICacheStore > CopyOnRead Gets or sets flag indicating whether copy of the value stored in cache should be created for cache operation implying return value. Declaration public bool CopyOnRead { get; set; } Property Value Type Description System.Boolean DataRegionName Gets or sets the name of the data region, see DataRegionConfiguration . Declaration public string DataRegionName { get; set; } Property Value Type Description System.String EagerTtl Gets or sets flag indicating whether expired cache entries will be eagerly removed from cache. When set to false, expired entries will be removed on next entry access. Declaration public bool EagerTtl { get; set; } Property Value Type Description System.Boolean EnableStatistics Gets or sets a value indicating whether statistics gathering is enabled on a cache. These statistics can be retrieved via GetMetrics() . Declaration public bool EnableStatistics { get; set; } Property Value Type Description System.Boolean EncryptionEnabled Gets or sets encryption flag. Default is false. Declaration public bool EncryptionEnabled { get; set; } Property Value Type Description System.Boolean EvictionPolicy Gets or sets the eviction policy. Null value means disabled evictions. Declaration public IEvictionPolicy EvictionPolicy { get; set; } Property Value Type Description IEvictionPolicy ExpiryPolicyFactory Gets or sets the factory for IExpiryPolicy to be used for all cache operations, unless WithExpiryPolicy(IExpiryPolicy) is called. Default is null, which means no expiration. Declaration public IFactory<IExpiryPolicy> ExpiryPolicyFactory { get; set; } Property Value Type Description IFactory < IExpiryPolicy > GroupName Gets or sets the cache group name. Caches with the same group name share single underlying 'physical' cache (partition set), but are logically isolated. Since underlying cache is shared, the following configuration properties should be the same within group: AffinityFunction , CacheMode , PartitionLossPolicy , DataRegionName Grouping caches reduces overall overhead, since internal data structures are shared. Declaration public string GroupName { get; set; } Property Value Type Description System.String Invalidate Invalidation flag. If true, values will be invalidated (nullified) upon commit in near cache. Declaration public bool Invalidate { get; set; } Property Value Type Description System.Boolean KeepBinaryInStore Gets or sets the flag indicating whether ICacheStore is working with binary objects instead of deserialized objects. Declaration public bool KeepBinaryInStore { get; set; } Property Value Type Description System.Boolean KeyConfiguration Gets or sets the key configuration. Declaration public ICollection<CacheKeyConfiguration> KeyConfiguration { get; set; } Property Value Type Description System.Collections.Generic.ICollection < CacheKeyConfiguration > LoadPreviousValue Gets or sets flag indicating whether value should be loaded from store if it is not in the cache for the following cache operations: PutIfAbsent(TK, TV) Replace(TK, TV) Remove(TK) GetAndPut(TK, TV) GetAndRemove(TK) GetAndReplace(TK, TV) GetAndPutIfAbsent(TK, TV) Declaration public bool LoadPreviousValue { get; set; } Property Value Type Description System.Boolean LockTimeout Gets or sets default lock acquisition timeout. Declaration public TimeSpan LockTimeout { get; set; } Property Value Type Description System.TimeSpan LongQueryWarningTimeout Gets or sets the timeout after which long query warning will be printed. This property is obsolete, use LongQueryWarningTimeout instead. Declaration [Obsolete(\"Use IgniteConfiguration.LongQueryWarningTimeout instead.\")] public TimeSpan LongQueryWarningTimeout { get; set; } Property Value Type Description System.TimeSpan MaxConcurrentAsyncOperations Gets or sets maximum number of allowed concurrent asynchronous operations, 0 for unlimited. Declaration public int MaxConcurrentAsyncOperations { get; set; } Property Value Type Description System.Int32 MaxQueryIteratorsCount Gets or sets the maximum number of active query iterators. Declaration public int MaxQueryIteratorsCount { get; set; } Property Value Type Description System.Int32 MemoryPolicyName Gets or sets the name of the MemoryPolicyConfiguration for this cache. See MemoryConfiguration . Declaration [Obsolete(\"Use DataRegionName.\")] public string MemoryPolicyName { get; set; } Property Value Type Description System.String Name Gets or sets the cache name. Declaration public string Name { get; set; } Property Value Type Description System.String NearConfiguration Gets or sets the near cache configuration. Declaration public NearCacheConfiguration NearConfiguration { get; set; } Property Value Type Description NearCacheConfiguration OnheapCacheEnabled Gets or sets a value indicating whether on-heap cache is enabled for the off-heap based page memory. Declaration public bool OnheapCacheEnabled { get; set; } Property Value Type Description System.Boolean PartitionLossPolicy Gets or sets the partition loss policy. This policy defines how Ignite will react to a situation when all nodes for some partition leave the cluster. Declaration public PartitionLossPolicy PartitionLossPolicy { get; set; } Property Value Type Description PartitionLossPolicy PluginConfigurations Gets or sets the plugin configurations. Declaration public ICollection<ICachePluginConfiguration> PluginConfigurations { get; set; } Property Value Type Description System.Collections.Generic.ICollection < ICachePluginConfiguration > QueryDetailMetricsSize Gets or sets the size of the query detail metrics to be stored in memory. 0 means disabled metrics. Declaration public int QueryDetailMetricsSize { get; set; } Property Value Type Description System.Int32 QueryEntities Gets or sets the query entity configuration. Declaration public ICollection<QueryEntity> QueryEntities { get; set; } Property Value Type Description System.Collections.Generic.ICollection < QueryEntity > QueryParallelism Gets or sets the desired query parallelism within a single node. Query executor may or may not use this hint, depending on estimated query cost. Default is DefaultQueryParallelism . Declaration public int QueryParallelism { get; set; } Property Value Type Description System.Int32 ReadFromBackup Gets or sets flag indicating whether data can be read from backup. Declaration public bool ReadFromBackup { get; set; } Property Value Type Description System.Boolean ReadThrough Gets or sets a value indicating whether read-through should be enabled for cache operations. When in read-through mode, cache misses that occur due to cache entries not existing as a result of performing a \"get\" operations will appropriately cause the configured ICacheStore (see CacheStoreFactory ) to be invoked. Declaration public bool ReadThrough { get; set; } Property Value Type Description System.Boolean RebalanceBatchesPrefetchCount Gets or sets the rebalance batches prefetch count. Source node can provide more than one batch at rebalance start to improve performance. Default is DefaultRebalanceBatchesPrefetchCount , minimum is 2. Declaration public long RebalanceBatchesPrefetchCount { get; set; } Property Value Type Description System.Int64 RebalanceBatchSize Gets or sets size (in number bytes) to be loaded within a single rebalance message. Rebalancing algorithm will split total data set on every node into multiple batches prior to sending data. Declaration public int RebalanceBatchSize { get; set; } Property Value Type Description System.Int32 RebalanceDelay Gets or sets delay upon a node joining or leaving topology (or crash) after which rebalancing should be started automatically. Rebalancing should be delayed if you plan to restart nodes after they leave topology, or if you plan to start multiple nodes at once or one after another and don't want to repartition and rebalance until all nodes are started. Declaration public TimeSpan RebalanceDelay { get; set; } Property Value Type Description System.TimeSpan RebalanceMode Gets or sets cache rebalance mode. Declaration public CacheRebalanceMode RebalanceMode { get; set; } Property Value Type Description CacheRebalanceMode RebalanceOrder Gets or sets the cache rebalance order. Caches with bigger RebalanceOrder are rebalanced later than caches with smaller RebalanceOrder. Default is 0, which means unordered rebalance. All caches with RebalanceOrder=0 are rebalanced without any delay concurrently. This parameter is applicable only for caches with RebalanceMode of Sync and Async . Declaration public int RebalanceOrder { get; set; } Property Value Type Description System.Int32 RebalanceThrottle Time to wait between rebalance messages to avoid overloading of CPU or network. When rebalancing large data sets, the CPU or network can get over-consumed with rebalancing messages, which consecutively may slow down the application performance. This parameter helps tune the amount of time to wait between rebalance messages to make sure that rebalancing process does not have any negative performance impact. Note that application will continue to work properly while rebalancing is still in progress. Value of 0 means that throttling is disabled. Declaration public TimeSpan RebalanceThrottle { get; set; } Property Value Type Description System.TimeSpan RebalanceTimeout Gets or sets rebalance timeout. Declaration public TimeSpan RebalanceTimeout { get; set; } Property Value Type Description System.TimeSpan SqlEscapeAll If true all the SQL table and field names will be escaped with double quotes like ({ \"tableName\".\"fieldsName\"}). This enforces case sensitivity for field names and also allows having special characters in table and field names. Declaration public bool SqlEscapeAll { get; set; } Property Value Type Description System.Boolean SqlIndexMaxInlineSize Gets or sets maximum inline size in bytes for sql indexes. See also InlineSize . -1 for automatic. Declaration public int SqlIndexMaxInlineSize { get; set; } Property Value Type Description System.Int32 SqlSchema Gets or sets the SQL schema. Non-quoted identifiers are not case sensitive. Quoted identifiers are case sensitive. Quoted Name is used by default. Declaration public string SqlSchema { get; set; } Property Value Type Description System.String StoreConcurrentLoadAllThreshold Gets or sets the threshold to use when multiple keys are being loaded from an underlying cache store (see CacheStoreFactory ). In the situation when several threads load the same or intersecting set of keys and the total number of keys to load is less or equal to this threshold then there will be no second call to the storage in order to load a key from thread A if the same key is already being loaded by thread B. The threshold should be controlled wisely. On the one hand if it's set to a big value then the interaction with a storage during the load of missing keys will be minimal.On the other hand the big value may result in significant performance degradation because it is needed to check for every key whether it's being loaded or not. Declaration public int StoreConcurrentLoadAllThreshold { get; set; } Property Value Type Description System.Int32 WriteBehindBatchSize Maximum batch size for write-behind cache store operations. Store operations (get or remove) are combined in a batch of this size to be passed to WriteAll(IEnumerable<KeyValuePair<TK, TV>>) or DeleteAll(IEnumerable<TK>) methods. Declaration public int WriteBehindBatchSize { get; set; } Property Value Type Description System.Int32 WriteBehindCoalescing Gets or sets write coalescing flag for write-behind cache store operations. Store operations (get or remove) with the same key are combined or coalesced to single, resulting operation to reduce pressure to underlying cache store. Declaration public bool WriteBehindCoalescing { get; set; } Property Value Type Description System.Boolean WriteBehindEnabled Flag indicating whether Ignite should use write-behind behaviour for the cache store. Declaration public bool WriteBehindEnabled { get; set; } Property Value Type Description System.Boolean WriteBehindFlushFrequency Frequency with which write-behind cache is flushed to the cache store. This value defines the maximum time interval between object insertion/deletion from the cache at the moment when corresponding operation is applied to the cache store. If this value is 0, then flush is performed according to the flush size. Note that you cannot set both WriteBehindFlushSize and WriteBehindFlushFrequency to 0. Declaration public TimeSpan WriteBehindFlushFrequency { get; set; } Property Value Type Description System.TimeSpan WriteBehindFlushSize Maximum size of the write-behind cache. If cache size exceeds this value, all cached items are flushed to the cache store and write cache is cleared. Declaration public int WriteBehindFlushSize { get; set; } Property Value Type Description System.Int32 WriteBehindFlushThreadCount Number of threads that will perform cache flushing. Cache flushing is performed when cache size exceeds value defined by WriteBehindFlushSize , or flush interval defined by WriteBehindFlushFrequency is elapsed. Declaration public int WriteBehindFlushThreadCount { get; set; } Property Value Type Description System.Int32 WriteSynchronizationMode Gets or sets write synchronization mode. This mode controls whether the main caller should wait for update on other nodes to complete or not. Declaration public CacheWriteSynchronizationMode WriteSynchronizationMode { get; set; } Property Value Type Description CacheWriteSynchronizationMode WriteThrough Gets or sets a value indicating whether write-through should be enabled for cache operations. When in \"write-through\" mode, cache updates that occur as a result of performing \"put\" operations will appropriately cause the configured ICacheStore (see CacheStoreFactory ) to be invoked. Declaration public bool WriteThrough { get; set; } Property Value Type Description System.Boolean"
  },
  "api/Apache.Ignite.Core.Cache.Configuration.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.QueryIndexType.html": {
    "href": "api/Apache.Ignite.Core.Cache.Configuration.QueryIndexType.html",
    "title": "Enum QueryIndexType | Apache Ignite.NET",
    "keywords": "Enum QueryIndexType Query index type. Namespace : Apache.Ignite.Core.Cache.Configuration Assembly : Apache.Ignite.Core.dll Syntax public enum QueryIndexType Fields Name Description FullText Fulltext index. Geospatial Geo-spatial index. Sorted Sorted index."
  },
  "api/Apache.Ignite.Core.Cache.Eviction.EvictionPolicyBase.html": {
    "href": "api/Apache.Ignite.Core.Cache.Eviction.EvictionPolicyBase.html",
    "title": "Class EvictionPolicyBase | Apache Ignite.NET",
    "keywords": "Class EvictionPolicyBase Base class for predefined eviction policies. Inheritance System.Object EvictionPolicyBase FifoEvictionPolicy LruEvictionPolicy Implements IEvictionPolicy Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Eviction Assembly : Apache.Ignite.Core.dll Syntax public abstract class EvictionPolicyBase : IEvictionPolicy Fields DefaultBatchSize Default batch cache size. Declaration public const int DefaultBatchSize = 1 Field Value Type Description System.Int32 DefaultMaxMemorySize Default max cache size in bytes. Declaration public const long DefaultMaxMemorySize = 0L Field Value Type Description System.Int64 DefaultMaxSize Default max cache size. Declaration public const int DefaultMaxSize = 100000 Field Value Type Description System.Int32 Properties BatchSize Gets or sets the size of the eviction batch. Batch eviction is enabled only if maximum memory limit isn't set ( MaxMemorySize == 0). Declaration public int BatchSize { get; set; } Property Value Type Description System.Int32 MaxMemorySize Gets or sets the maximum allowed cache size in bytes. 0 for unlimited. Declaration public long MaxMemorySize { get; set; } Property Value Type Description System.Int64 MaxSize Gets or sets the maximum allowed cache size (entry count). 0 for unlimited. Declaration public int MaxSize { get; set; } Property Value Type Description System.Int32 Implements IEvictionPolicy"
  },
  "api/Apache.Ignite.Core.Cache.ICache-2.html": {
    "href": "api/Apache.Ignite.Core.Cache.ICache-2.html",
    "title": "Interface ICache<TK, TV> | Apache Ignite.NET",
    "keywords": "Interface ICache<TK, TV> Main entry point for Ignite cache APIs. You can get a named cache by calling GetCache<TK, TV>(String) method. Cache API supports distributed transactions. All Get(...) , Put(...) , Replace(...) , and Remove(...) operations are transactional and will participate in an ongoing transaction, if any. Other methods like Peek(...) or various Contains(...) methods may be transaction-aware, i.e. check in-transaction entries first, but will not affect the current state of transaction. See ITransaction documentation for more information about transactions. Neither null keys or values are allowed to be stored in cache. If a null value happens to be in cache (e.g. after invalidation or remove), then cache will treat this case as there is no value at all. Note that cache is generic and you can only work with provided key and value types. If cache also contains keys or values of other types, any attempt to retrieve them will result in System.InvalidCastException . Use ICache<TK, TV> in order to work with entries of arbitrary types. All members are thread-safe and may be used concurrently from multiple threads. Inherited Members System.Collections.Generic.IEnumerable<Apache.Ignite.Core.Cache.ICacheEntry<TK, TV>>.GetEnumerator() System.Collections.IEnumerable.GetEnumerator() Namespace : Apache.Ignite.Core.Cache Assembly : Apache.Ignite.Core.dll Syntax public interface ICache<TK, TV> : IEnumerable<ICacheEntry<TK, TV>>, IEnumerable Type Parameters Name Description TK Key type. TV Value type. Properties Ignite Ignite hosting this cache. Declaration IIgnite Ignite { get; } Property Value Type Description IIgnite IsAllowAtomicOpsInTx Gets a value indicating whether to allow use atomic operations in transactions. Declaration bool IsAllowAtomicOpsInTx { get; } Property Value Type Description System.Boolean IsKeepBinary Gets a value indicating whether to keep values in binary form. Declaration bool IsKeepBinary { get; } Property Value Type Description System.Boolean Item[TK] Gets or sets a cache value with the specified key. Shortcut to Get(TK) and Put(TK, TV) Declaration TV this[TK key] { get; set; } Parameters Type Name Description TK key Key. Property Value Type Description TV Cache value with the specified key. Exceptions Type Condition System.Collections.Generic.KeyNotFoundException If the key is not present in the cache. Name Name of this cache ( null for default cache). Declaration string Name { get; } Property Value Type Description System.String Methods Clear() Clears the contents of the cache, without notifying listeners or CacheWriters. Declaration void Clear() Clear(TK) Clear entry from the cache and swap storage, without notifying listeners or CacheWriters. Entry is cleared only if it is not currently locked, and is not participating in a transaction. Declaration void Clear(TK key) Parameters Type Name Description TK key Key to clear. ClearAll(IEnumerable<TK>) Clear entries from the cache and swap storage, without notifying listeners or CacheWriters. Entry is cleared only if it is not currently locked, and is not participating in a transaction. Declaration void ClearAll(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys to clear. ClearAllAsync(IEnumerable<TK>) Clear entries from the cache and swap storage, without notifying listeners or CacheWriters. Entry is cleared only if it is not currently locked, and is not participating in a transaction. Declaration Task ClearAllAsync(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys to clear. Returns Type Description System.Threading.Tasks.Task ClearAsync() Clears the contents of the cache, without notifying listeners or CacheWriters. Declaration Task ClearAsync() Returns Type Description System.Threading.Tasks.Task ClearAsync(TK) Clear entry from the cache and swap storage, without notifying listeners or CacheWriters. Entry is cleared only if it is not currently locked, and is not participating in a transaction. Declaration Task ClearAsync(TK key) Parameters Type Name Description TK key Key to clear. Returns Type Description System.Threading.Tasks.Task ContainsKey(TK) Check if cache contains mapping for this key. Declaration bool ContainsKey(TK key) Parameters Type Name Description TK key Key. Returns Type Description System.Boolean True if cache contains mapping for this key. ContainsKeyAsync(TK) Check if cache contains mapping for this key. Declaration Task<bool> ContainsKeyAsync(TK key) Parameters Type Name Description TK key Key. Returns Type Description System.Threading.Tasks.Task < System.Boolean > True if cache contains mapping for this key. ContainsKeys(IEnumerable<TK>) Check if cache contains mapping for these keys. Declaration bool ContainsKeys(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys. Returns Type Description System.Boolean True if cache contains mapping for all these keys. ContainsKeysAsync(IEnumerable<TK>) Check if cache contains mapping for these keys. Declaration Task<bool> ContainsKeysAsync(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys. Returns Type Description System.Threading.Tasks.Task < System.Boolean > True if cache contains mapping for all these keys. Get(TK) Retrieves value mapped to the specified key from cache. If the value is not present in cache, then it will be looked up from swap storage. If it's not present in swap, or if swap is disable, and if read-through is allowed, value will be loaded from persistent store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration TV Get(TK key) Parameters Type Name Description TK key Key. Returns Type Description TV Value. Exceptions Type Condition System.Collections.Generic.KeyNotFoundException If the key is not present in the cache. GetAll(IEnumerable<TK>) Retrieves values mapped to the specified keys from cache. If some value is not present in cache, then it will be looked up from swap storage. If it's not present in swap, or if swap is disabled, and if read-through is allowed, value will be loaded from persistent store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration ICollection<ICacheEntry<TK, TV>> GetAll(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys. Returns Type Description System.Collections.Generic.ICollection < ICacheEntry <TK, TV>> Map of key-value pairs. GetAllAsync(IEnumerable<TK>) Retrieves values mapped to the specified keys from cache. If some value is not present in cache, then it will be looked up from swap storage. If it's not present in swap, or if swap is disabled, and if read-through is allowed, value will be loaded from persistent store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration Task<ICollection<ICacheEntry<TK, TV>>> GetAllAsync(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys. Returns Type Description System.Threading.Tasks.Task < System.Collections.Generic.ICollection < ICacheEntry <TK, TV>>> Map of key-value pairs. GetAndPut(TK, TV) Associates the specified value with the specified key in this cache, returning an existing value if one existed. Declaration CacheResult<TV> GetAndPut(TK key, TV val) Parameters Type Name Description TK key Key with which the specified value is to be associated. TV val Value to be associated with the specified key. Returns Type Description CacheResult <TV> The value associated with the key at the start of the operation. GetAndPutAsync(TK, TV) Associates the specified value with the specified key in this cache, returning an existing value if one existed. Declaration Task<CacheResult<TV>> GetAndPutAsync(TK key, TV val) Parameters Type Name Description TK key Key with which the specified value is to be associated. TV val Value to be associated with the specified key. Returns Type Description System.Threading.Tasks.Task < CacheResult <TV>> The value associated with the key at the start of the operation. GetAndPutIfAbsent(TK, TV) Stores given key-value pair in cache only if cache had no previous mapping for it. If cache previously contained value for the given key, then this value is returned. In case of PARTITIONED or REPLICATED caches, the value will be loaded from the primary node, which in its turn may load the value from the swap storage, and consecutively, if it's not in swap, from the underlying persistent storage. If the returned value is not needed, method putxIfAbsent() should be used instead of this one to avoid the overhead associated with returning of the previous value. If write-through is enabled, the stored value will be persisted to store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration CacheResult<TV> GetAndPutIfAbsent(TK key, TV val) Parameters Type Name Description TK key Key to store in cache. TV val Value to be associated with the given key. Returns Type Description CacheResult <TV> Previously contained value regardless of whether put happened or not. GetAndPutIfAbsentAsync(TK, TV) Stores given key-value pair in cache only if cache had no previous mapping for it. If cache previously contained value for the given key, then this value is returned. In case of PARTITIONED or REPLICATED caches, the value will be loaded from the primary node, which in its turn may load the value from the swap storage, and consecutively, if it's not in swap, from the underlying persistent storage. If the returned value is not needed, method putxIfAbsent() should be used instead of this one to avoid the overhead associated with returning of the previous value. If write-through is enabled, the stored value will be persisted to store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration Task<CacheResult<TV>> GetAndPutIfAbsentAsync(TK key, TV val) Parameters Type Name Description TK key Key to store in cache. TV val Value to be associated with the given key. Returns Type Description System.Threading.Tasks.Task < CacheResult <TV>> Previously contained value regardless of whether put happened or not. GetAndRemove(TK) Atomically removes the entry for a key only if currently mapped to some value. Declaration CacheResult<TV> GetAndRemove(TK key) Parameters Type Name Description TK key Key with which the specified value is associated. Returns Type Description CacheResult <TV> The value if one existed. GetAndRemoveAsync(TK) Atomically removes the entry for a key only if currently mapped to some value. Declaration Task<CacheResult<TV>> GetAndRemoveAsync(TK key) Parameters Type Name Description TK key Key with which the specified value is associated. Returns Type Description System.Threading.Tasks.Task < CacheResult <TV>> The value if one existed. GetAndReplace(TK, TV) Atomically replaces the value for a given key if and only if there is a value currently mapped by the key. Declaration CacheResult<TV> GetAndReplace(TK key, TV val) Parameters Type Name Description TK key Key with which the specified value is to be associated. TV val Value to be associated with the specified key. Returns Type Description CacheResult <TV> The previous value associated with the specified key. GetAndReplaceAsync(TK, TV) Atomically replaces the value for a given key if and only if there is a value currently mapped by the key. Declaration Task<CacheResult<TV>> GetAndReplaceAsync(TK key, TV val) Parameters Type Name Description TK key Key with which the specified value is to be associated. TV val Value to be associated with the specified key. Returns Type Description System.Threading.Tasks.Task < CacheResult <TV>> The previous value associated with the specified key. GetAsync(TK) Retrieves value mapped to the specified key from cache. If the value is not present in cache, then it will be looked up from swap storage. If it's not present in swap, or if swap is disable, and if read-through is allowed, value will be loaded from persistent store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration Task<TV> GetAsync(TK key) Parameters Type Name Description TK key Key. Returns Type Description System.Threading.Tasks.Task <TV> Value. Exceptions Type Condition System.Collections.Generic.KeyNotFoundException If the key is not present in the cache. GetConfiguration() Gets the cache configuration. Declaration CacheConfiguration GetConfiguration() Returns Type Description CacheConfiguration GetLocalEntries(CachePeekMode[]) Get local cache entries. Declaration IEnumerable<ICacheEntry<TK, TV>> GetLocalEntries(params CachePeekMode[] peekModes) Parameters Type Name Description CachePeekMode [] peekModes Peek modes. Returns Type Description System.Collections.Generic.IEnumerable < ICacheEntry <TK, TV>> Enumerable instance. GetLocalMetrics() Gets local snapshot metrics (statistics) for this cache. Declaration ICacheMetrics GetLocalMetrics() Returns Type Description ICacheMetrics Cache metrics. GetLocalSize(CachePeekMode[]) Gets the number of all entries cached on this node. Declaration int GetLocalSize(params CachePeekMode[] modes) Parameters Type Name Description CachePeekMode [] modes Optional peek modes. If not provided, then total cache size is returned. Returns Type Description System.Int32 Cache size on this node. GetLostPartitions() Gets lost partitions IDs. See also PartitionLossPolicy and ResetLostPartitions(IEnumerable<String>) . Declaration ICollection<int> GetLostPartitions() Returns Type Description System.Collections.Generic.ICollection < System.Int32 > GetMetrics() Gets global (whole cluster) snapshot metrics (statistics) for this cache. Declaration ICacheMetrics GetMetrics() Returns Type Description ICacheMetrics Cache metrics. GetMetrics(IClusterGroup) Gets global (whole cluster group) snapshot metrics (statistics) for this cache. Declaration ICacheMetrics GetMetrics(IClusterGroup clusterGroup) Parameters Type Name Description IClusterGroup clusterGroup The cluster group to get metrics for. Returns Type Description ICacheMetrics GetQueryMetrics() Gets query metrics. Declaration IQueryMetrics GetQueryMetrics() Returns Type Description IQueryMetrics Query metrics. GetSize(CachePeekMode[]) Gets the number of all entries cached across all nodes. NOTE: this operation is distributed and will query all participating nodes for their cache sizes. Declaration int GetSize(params CachePeekMode[] modes) Parameters Type Name Description CachePeekMode [] modes Optional peek modes. If not provided, then total cache size is returned. Returns Type Description System.Int32 Cache size across all nodes. GetSizeAsync(CachePeekMode[]) Gets the number of all entries cached across all nodes. NOTE: this operation is distributed and will query all participating nodes for their cache sizes. Declaration Task<int> GetSizeAsync(params CachePeekMode[] modes) Parameters Type Name Description CachePeekMode [] modes Optional peek modes. If not provided, then total cache size is returned. Returns Type Description System.Threading.Tasks.Task < System.Int32 > Cache size across all nodes. Invoke<TArg, TRes>(TK, ICacheEntryProcessor<TK, TV, TArg, TRes>, TArg) Invokes an ICacheEntryProcessor<TK, TV, TArg, TRes> against the IMutableCacheEntry<TK, TV> specified by the provided key. If an entry does not exist for the specified key, an attempt is made to load it (if a loader is configured) or a surrogate entry, consisting of the key with a null value is used instead. Declaration TRes Invoke<TArg, TRes>(TK key, ICacheEntryProcessor<TK, TV, TArg, TRes> processor, TArg arg) Parameters Type Name Description TK key The key. ICacheEntryProcessor <TK, TV, TArg, TRes> processor The processor. TArg arg The argument. Returns Type Description TRes Result of the processing. Type Parameters Name Description TArg The type of the argument. TRes The type of the result. Exceptions Type Condition CacheEntryProcessorException If an exception has occured during processing. InvokeAll<TArg, TRes>(IEnumerable<TK>, ICacheEntryProcessor<TK, TV, TArg, TRes>, TArg) Invokes an ICacheEntryProcessor<TK, TV, TArg, TRes> against a set of keys. If an entry does not exist for the specified key, an attempt is made to load it (if a loader is configured) or a surrogate entry, consisting of the key with a null value is used instead. The order that the entries for the keys are processed is undefined. Implementations may choose to process the entries in any order, including concurrently. Furthermore there is no guarantee implementations will use the same processor instance to process each entry, as the case may be in a non-local cache topology. Declaration ICollection<ICacheEntryProcessorResult<TK, TRes>> InvokeAll<TArg, TRes>(IEnumerable<TK> keys, ICacheEntryProcessor<TK, TV, TArg, TRes> processor, TArg arg) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys The keys. ICacheEntryProcessor <TK, TV, TArg, TRes> processor The processor. TArg arg The argument. Returns Type Description System.Collections.Generic.ICollection < ICacheEntryProcessorResult <TK, TRes>> Map of ICacheEntryProcessorResult<TK, T> of the processing per key, if any, defined by the ICacheEntryProcessor<TK, TV, TArg, TRes> implementation. No mappings will be returned for processors that return a null value for a key. Type Parameters Name Description TArg The type of the argument. TRes The type of the result. Exceptions Type Condition CacheEntryProcessorException If an exception has occured during processing. InvokeAllAsync<TArg, TRes>(IEnumerable<TK>, ICacheEntryProcessor<TK, TV, TArg, TRes>, TArg) Invokes an ICacheEntryProcessor<TK, TV, TArg, TRes> against a set of keys. If an entry does not exist for the specified key, an attempt is made to load it (if a loader is configured) or a surrogate entry, consisting of the key with a null value is used instead. The order that the entries for the keys are processed is undefined. Implementations may choose to process the entries in any order, including concurrently. Furthermore there is no guarantee implementations will use the same processor instance to process each entry, as the case may be in a non-local cache topology. Declaration Task<ICollection<ICacheEntryProcessorResult<TK, TRes>>> InvokeAllAsync<TArg, TRes>(IEnumerable<TK> keys, ICacheEntryProcessor<TK, TV, TArg, TRes> processor, TArg arg) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys The keys. ICacheEntryProcessor <TK, TV, TArg, TRes> processor The processor. TArg arg The argument. Returns Type Description System.Threading.Tasks.Task < System.Collections.Generic.ICollection < ICacheEntryProcessorResult <TK, TRes>>> Map of ICacheEntryProcessorResult<TK, T> of the processing per key, if any, defined by the ICacheEntryProcessor<TK, TV, TArg, TRes> implementation. No mappings will be returned for processors that return a null value for a key. Type Parameters Name Description TArg The type of the argument. TRes The type of the result. Exceptions Type Condition CacheEntryProcessorException If an exception has occured during processing. InvokeAsync<TArg, TRes>(TK, ICacheEntryProcessor<TK, TV, TArg, TRes>, TArg) Invokes an ICacheEntryProcessor<TK, TV, TArg, TRes> against the IMutableCacheEntry<TK, TV> specified by the provided key. If an entry does not exist for the specified key, an attempt is made to load it (if a loader is configured) or a surrogate entry, consisting of the key with a null value is used instead. Declaration Task<TRes> InvokeAsync<TArg, TRes>(TK key, ICacheEntryProcessor<TK, TV, TArg, TRes> processor, TArg arg) Parameters Type Name Description TK key The key. ICacheEntryProcessor <TK, TV, TArg, TRes> processor The processor. TArg arg The argument. Returns Type Description System.Threading.Tasks.Task <TRes> Result of the processing. Type Parameters Name Description TArg The type of the argument. TRes The type of the result. Exceptions Type Condition CacheEntryProcessorException If an exception has occured during processing. IsEmpty() Checks whether this cache contains no key-value mappings. Semantically equals to ICache.Size(CachePeekMode.PRIMARY) == 0 . Declaration bool IsEmpty() Returns Type Description System.Boolean IsLocalLocked(TK, Boolean) Checks if specified key is locked. This is a local operation and does not involve any network trips or access to persistent storage in any way. Declaration bool IsLocalLocked(TK key, bool byCurrentThread) Parameters Type Name Description TK key Key to check. System.Boolean byCurrentThread If true, checks that current thread owns a lock on this key; otherwise, checks that any thread on any node owns a lock on this key. Returns Type Description System.Boolean True if specified key is locked; otherwise, false. LoadAll(IEnumerable<TK>, Boolean) Loads the specified entries into the cache using the configured ICacheStore > for the given keys. If an entry for a key already exists in the cache, a value will be loaded if and only if replaceExistingValues is true. If no loader is configured for the cache, no objects will be loaded. Declaration void LoadAll(IEnumerable<TK> keys, bool replaceExistingValues) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys The keys to load. System.Boolean replaceExistingValues if set to true , existing cache values will be replaced by those loaded from a cache store. LoadAllAsync(IEnumerable<TK>, Boolean) Asynchronously loads the specified entries into the cache using the configured ICacheStore > for the given keys. If an entry for a key already exists in the cache, a value will be loaded if and only if replaceExistingValues is true. If no loader is configured for the cache, no objects will be loaded. Declaration Task LoadAllAsync(IEnumerable<TK> keys, bool replaceExistingValues) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys The keys to load. System.Boolean replaceExistingValues if set to true , existing cache values will be replaced by those loaded from a cache store. Returns Type Description System.Threading.Tasks.Task LoadCache(ICacheEntryFilter<TK, TV>, Object[]) Executes LocalLoadCache(ICacheEntryFilter<TK, TV>, Object[]) on all cache nodes. Declaration void LoadCache(ICacheEntryFilter<TK, TV> p, params object[] args) Parameters Type Name Description ICacheEntryFilter <TK, TV> p Optional predicate. If provided, will be used to filter values to be put into cache. System.Object [] args Optional user arguments to be passed into LoadCache(Action<TK, TV>, Object[]) . LoadCacheAsync(ICacheEntryFilter<TK, TV>, Object[]) Executes LocalLoadCache(ICacheEntryFilter<TK, TV>, Object[]) on all cache nodes. Declaration Task LoadCacheAsync(ICacheEntryFilter<TK, TV> p, params object[] args) Parameters Type Name Description ICacheEntryFilter <TK, TV> p Optional predicate. If provided, will be used to filter values to be put into cache. System.Object [] args Optional user arguments to be passed into LoadCache(Action<TK, TV>, Object[]) . Returns Type Description System.Threading.Tasks.Task LocalClear(TK) Clear entry from the cache and swap storage, without notifying listeners or CacheWriters. Entry is cleared only if it is not currently locked, and is not participating in a transaction. Note that this operation is local as it merely clears an entry from local cache, it does not remove entries from remote caches. Declaration void LocalClear(TK key) Parameters Type Name Description TK key Key to clear. LocalClearAll(IEnumerable<TK>) Clear entries from the cache and swap storage, without notifying listeners or CacheWriters. Entry is cleared only if it is not currently locked, and is not participating in a transaction. Note that this operation is local as it merely clears entries from local cache, it does not remove entries from remote caches. Declaration void LocalClearAll(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys to clear. LocalEvict(IEnumerable<TK>) Attempts to evict all entries associated with keys. Note, that entry will be evicted only if it's not used (not participating in any locks or transactions). Declaration void LocalEvict(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys to evict from cache. LocalLoadCache(ICacheEntryFilter<TK, TV>, Object[]) Delegates to LoadCache(Action<TK, TV>, Object[]) method to load state from the underlying persistent storage. The loaded values will then be given to the optionally passed in predicate, and, if the predicate returns true, will be stored in cache. If predicate is null, then all loaded values will be stored in cache. Declaration void LocalLoadCache(ICacheEntryFilter<TK, TV> p, params object[] args) Parameters Type Name Description ICacheEntryFilter <TK, TV> p Optional predicate. If provided, will be used to filter values to be put into cache. System.Object [] args Optional user arguments to be passed into LoadCache(Action<TK, TV>, Object[]) . LocalLoadCacheAsync(ICacheEntryFilter<TK, TV>, Object[]) Delegates to LoadCache(Action<TK, TV>, Object[]) method to load state from the underlying persistent storage. The loaded values will then be given to the optionally passed in predicate, and, if the predicate returns true, will be stored in cache. If predicate is null, then all loaded values will be stored in cache. Declaration Task LocalLoadCacheAsync(ICacheEntryFilter<TK, TV> p, params object[] args) Parameters Type Name Description ICacheEntryFilter <TK, TV> p Optional predicate. If provided, will be used to filter values to be put into cache. System.Object [] args Optional user arguments to be passed into LoadCache(Action<TK, TV>, Object[]) . Returns Type Description System.Threading.Tasks.Task LocalPeek(TK, CachePeekMode[]) Peeks at cached value using optional set of peek modes. This method will sequentially iterate over given peek modes, and try to peek at value using each peek mode. Once a non-null value is found, it will be immediately returned. This method does not participate in any transactions, however, it may peek at transactional value depending on the peek modes used. If key is not present in cache, KeyNotFoundException will be thrown. Declaration TV LocalPeek(TK key, params CachePeekMode[] modes) Parameters Type Name Description TK key Key. CachePeekMode [] modes Peek modes. Returns Type Description TV Peeked value. Lock(TK) Creates an ICacheLock instance associated with passed key. This method does not acquire lock immediately, you have to call appropriate method on returned instance. Declaration ICacheLock Lock(TK key) Parameters Type Name Description TK key Key for lock. Returns Type Description ICacheLock New ICacheLock instance associated with passed key. LockAll(IEnumerable<TK>) Creates an ICacheLock instance associated with passed keys. This method does not acquire lock immediately, you have to call appropriate method on returned instance. Declaration ICacheLock LockAll(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys for lock. Returns Type Description ICacheLock New ICacheLock instance associated with passed keys. Put(TK, TV) Associates the specified value with the specified key in the cache. If the cache previously contained a mapping for the key, the old value is replaced by the specified value. Declaration void Put(TK key, TV val) Parameters Type Name Description TK key Key with which the specified value is to be associated. TV val Value to be associated with the specified key. PutAll(IEnumerable<KeyValuePair<TK, TV>>) Stores given key-value pairs in cache. If write-through is enabled, the stored values will be persisted to store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration void PutAll(IEnumerable<KeyValuePair<TK, TV>> vals) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair <TK, TV>> vals Key-value pairs to store in cache. PutAllAsync(IEnumerable<KeyValuePair<TK, TV>>) Stores given key-value pairs in cache. If write-through is enabled, the stored values will be persisted to store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration Task PutAllAsync(IEnumerable<KeyValuePair<TK, TV>> vals) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair <TK, TV>> vals Key-value pairs to store in cache. Returns Type Description System.Threading.Tasks.Task PutAsync(TK, TV) Associates the specified value with the specified key in the cache. If the cache previously contained a mapping for the key, the old value is replaced by the specified value. Declaration Task PutAsync(TK key, TV val) Parameters Type Name Description TK key Key with which the specified value is to be associated. TV val Value to be associated with the specified key. Returns Type Description System.Threading.Tasks.Task PutIfAbsent(TK, TV) Atomically associates the specified key with the given value if it is not already associated with a value. Declaration bool PutIfAbsent(TK key, TV val) Parameters Type Name Description TK key Key with which the specified value is to be associated. TV val Value to be associated with the specified key. Returns Type Description System.Boolean True if a value was set. PutIfAbsentAsync(TK, TV) Atomically associates the specified key with the given value if it is not already associated with a value. Declaration Task<bool> PutIfAbsentAsync(TK key, TV val) Parameters Type Name Description TK key Key with which the specified value is to be associated. TV val Value to be associated with the specified key. Returns Type Description System.Threading.Tasks.Task < System.Boolean > True if a value was set. Query(QueryBase) Queries cache. Declaration IQueryCursor<ICacheEntry<TK, TV>> Query(QueryBase qry) Parameters Type Name Description QueryBase qry Query. Returns Type Description IQueryCursor < ICacheEntry <TK, TV>> Cursor. Query(SqlFieldsQuery) Queries separate entry fields. Declaration IFieldsQueryCursor Query(SqlFieldsQuery qry) Parameters Type Name Description SqlFieldsQuery qry SQL fields query. Returns Type Description IFieldsQueryCursor Cursor. QueryContinuous(ContinuousQuery<TK, TV>) Start continuous query execution. Declaration IContinuousQueryHandle QueryContinuous(ContinuousQuery<TK, TV> qry) Parameters Type Name Description ContinuousQuery <TK, TV> qry Continuous query. Returns Type Description IContinuousQueryHandle Handle to stop query execution. QueryContinuous(ContinuousQuery<TK, TV>, QueryBase) Start continuous query execution. Declaration IContinuousQueryHandle<ICacheEntry<TK, TV>> QueryContinuous(ContinuousQuery<TK, TV> qry, QueryBase initialQry) Parameters Type Name Description ContinuousQuery <TK, TV> qry Continuous query. QueryBase initialQry The initial query. This query will be executed before continuous listener is registered which allows to iterate through entries which have already existed at the time continuous query is executed. Returns Type Description IContinuousQueryHandle < ICacheEntry <TK, TV>> Handle to get initial query cursor or stop query execution. QueryFields(SqlFieldsQuery) Queries separate entry fields. Declaration [Obsolete(\"Use Query(SqlFieldsQuery qry) instead.\")] IQueryCursor<IList> QueryFields(SqlFieldsQuery qry) Parameters Type Name Description SqlFieldsQuery qry SQL fields query. Returns Type Description IQueryCursor < System.Collections.IList > Cursor. Rebalance() Rebalances cache partitions. This method is usually used when rebalanceDelay configuration parameter has non-zero value. When many nodes are started or stopped almost concurrently, it is more efficient to delay rebalancing until the node topology is stable to make sure that no redundant re-partitioning happens. In case of partitioned caches, for better efficiency user should usually make sure that new nodes get placed on the same place of consistent hash ring as the left nodes, and that nodes are restarted before rebalanceDelay expires. Declaration Task Rebalance() Returns Type Description System.Threading.Tasks.Task Task that will be completed when rebalancing is finished. Remove(TK) Removes given key mapping from cache. If cache previously contained value for the given key, then this value is returned. In case of PARTITIONED or REPLICATED caches, the value will be loaded from the primary node, which in its turn may load the value from the disk-based swap storage, and consecutively, if it's not in swap, from the underlying persistent storage. If the returned value is not needed, method removex() should always be used instead of this one to avoid the overhead associated with returning of the previous value. If write-through is enabled, the value will be removed from store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration bool Remove(TK key) Parameters Type Name Description TK key Key whose mapping is to be removed from cache. Returns Type Description System.Boolean False if there was no matching key. Remove(TK, TV) Removes given key mapping from cache if one exists and value is equal to the passed in value. If write-through is enabled, the value will be removed from store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration bool Remove(TK key, TV val) Parameters Type Name Description TK key Key whose mapping is to be removed from cache. TV val Value to match against currently cached value. Returns Type Description System.Boolean True if entry was removed, false otherwise. RemoveAll() Removes all mappings from cache. If write-through is enabled, the value will be removed from store. This method is not transactional. Declaration void RemoveAll() RemoveAll(IEnumerable<TK>) Removes given key mappings from cache. If write-through is enabled, the value will be removed from store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration void RemoveAll(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys whose mappings are to be removed from cache. RemoveAllAsync() Removes all mappings from cache. If write-through is enabled, the value will be removed from store. This method is not transactional. Declaration Task RemoveAllAsync() Returns Type Description System.Threading.Tasks.Task RemoveAllAsync(IEnumerable<TK>) Removes given key mappings from cache. If write-through is enabled, the value will be removed from store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration Task RemoveAllAsync(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys whose mappings are to be removed from cache. Returns Type Description System.Threading.Tasks.Task RemoveAsync(TK) Removes given key mapping from cache. If cache previously contained value for the given key, then this value is returned. In case of PARTITIONED or REPLICATED caches, the value will be loaded from the primary node, which in its turn may load the value from the disk-based swap storage, and consecutively, if it's not in swap, from the underlying persistent storage. If the returned value is not needed, method removex() should always be used instead of this one to avoid the overhead associated with returning of the previous value. If write-through is enabled, the value will be removed from store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration Task<bool> RemoveAsync(TK key) Parameters Type Name Description TK key Key whose mapping is to be removed from cache. Returns Type Description System.Threading.Tasks.Task < System.Boolean > False if there was no matching key. RemoveAsync(TK, TV) Removes given key mapping from cache if one exists and value is equal to the passed in value. If write-through is enabled, the value will be removed from store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration Task<bool> RemoveAsync(TK key, TV val) Parameters Type Name Description TK key Key whose mapping is to be removed from cache. TV val Value to match against currently cached value. Returns Type Description System.Threading.Tasks.Task < System.Boolean > True if entry was removed, false otherwise. Replace(TK, TV) Stores given key-value pair in cache only if there is a previous mapping for it. If cache previously contained value for the given key, then this value is returned. In case of PARTITIONED or REPLICATED caches, the value will be loaded from the primary node, which in its turn may load the value from the swap storage, and consecutively, if it's not in swap, rom the underlying persistent storage. If write-through is enabled, the stored value will be persisted to store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration bool Replace(TK key, TV val) Parameters Type Name Description TK key Key to store in cache. TV val Value to be associated with the given key. Returns Type Description System.Boolean True if the value was replaced. Replace(TK, TV, TV) Stores given key-value pair in cache only if only if the previous value is equal to the old value passed as argument. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration bool Replace(TK key, TV oldVal, TV newVal) Parameters Type Name Description TK key Key to store in cache. TV oldVal Old value to match. TV newVal Value to be associated with the given key. Returns Type Description System.Boolean True if replace happened, false otherwise. ReplaceAsync(TK, TV) Stores given key-value pair in cache only if there is a previous mapping for it. If cache previously contained value for the given key, then this value is returned. In case of PARTITIONED or REPLICATED caches, the value will be loaded from the primary node, which in its turn may load the value from the swap storage, and consecutively, if it's not in swap, rom the underlying persistent storage. If write-through is enabled, the stored value will be persisted to store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration Task<bool> ReplaceAsync(TK key, TV val) Parameters Type Name Description TK key Key to store in cache. TV val Value to be associated with the given key. Returns Type Description System.Threading.Tasks.Task < System.Boolean > True if the value was replaced. ReplaceAsync(TK, TV, TV) Stores given key-value pair in cache only if only if the previous value is equal to the old value passed as argument. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration Task<bool> ReplaceAsync(TK key, TV oldVal, TV newVal) Parameters Type Name Description TK key Key to store in cache. TV oldVal Old value to match. TV newVal Value to be associated with the given key. Returns Type Description System.Threading.Tasks.Task < System.Boolean > True if replace happened, false otherwise. ResetQueryMetrics() Reset query metrics. Declaration void ResetQueryMetrics() TryGet(TK, out TV) Retrieves value mapped to the specified key from cache. If the value is not present in cache, then it will be looked up from swap storage. If it's not present in swap, or if swap is disable, and if read-through is allowed, value will be loaded from persistent store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration bool TryGet(TK key, out TV value) Parameters Type Name Description TK key Key. TV value When this method returns, the value associated with the specified key, if the key is found; otherwise, the default value for the type of the value parameter. This parameter is passed uninitialized. Returns Type Description System.Boolean true if the cache contains an element with the specified key; otherwise, false. TryGetAsync(TK) Retrieves value mapped to the specified key from cache. If the value is not present in cache, then it will be looked up from swap storage. If it's not present in swap, or if swap is disable, and if read-through is allowed, value will be loaded from persistent store. This method is transactional and will enlist the entry into ongoing transaction if there is one. Declaration Task<CacheResult<TV>> TryGetAsync(TK key) Parameters Type Name Description TK key Key. Returns Type Description System.Threading.Tasks.Task < CacheResult <TV>> CacheResult<T> containing a bool success flag and a value. TryLocalPeek(TK, out TV, CachePeekMode[]) Peeks at cached value using optional set of peek modes. This method will sequentially iterate over given peek modes, and try to peek at value using each peek mode. Once a non-null value is found, it will be immediately returned. This method does not participate in any transactions, however, it may peek at transactional value depending on the peek modes used. Declaration bool TryLocalPeek(TK key, out TV value, params CachePeekMode[] modes) Parameters Type Name Description TK key Key. TV value When this method returns, the value associated with the specified key, if the key is found; otherwise, the default value for the type of the value parameter. This parameter is passed uninitialized. CachePeekMode [] modes Peek modes. Returns Type Description System.Boolean true if the cache contains an element with the specified key; otherwise, false. WithAllowAtomicOpsInTx() Get another cache instance with operations allowed in transactions. Only atomic caches need this. Transactional caches already available for transactions. Declaration ICache<TK, TV> WithAllowAtomicOpsInTx() Returns Type Description ICache <TK, TV> Cache allowed to use in transactions. WithExpiryPolicy(IExpiryPolicy) Returns cache with the specified expired policy set. This policy will be used for each operation invoked on the returned cache. Expiry durations for each operation are calculated only once and then used as constants. Please consider this when implementing customg expiry policy implementations. Declaration ICache<TK, TV> WithExpiryPolicy(IExpiryPolicy plc) Parameters Type Name Description IExpiryPolicy plc Expiry policy to use. Returns Type Description ICache <TK, TV> Cache instance with the specified expiry policy set. WithKeepBinary<TK1, TV1>() Gets cache with KeepBinary mode enabled, changing key and/or value types if necessary. You can only change key/value types when transitioning from non-binary to binary cache; Changing type of binary cache is not allowed and will throw an System.InvalidOperationException Declaration ICache<TK1, TV1> WithKeepBinary<TK1, TV1>() Returns Type Description ICache <TK1, TV1> Cache instance with binary mode enabled. Type Parameters Name Description TK1 Key type in binary mode. TV1 Value type in binary mode. WithNoRetries() Get another cache instance with no-retries behavior enabled. Declaration ICache<TK, TV> WithNoRetries() Returns Type Description ICache <TK, TV> Cache with no-retries behavior enabled. WithPartitionRecover() Gets an instance of cache that will be allowed to execute cache operations (read, write) regardless of partition loss policy. Declaration ICache<TK, TV> WithPartitionRecover() Returns Type Description ICache <TK, TV> Cache without partition loss protection. WithSkipStore() Get another cache instance with read-through and write-through behavior disabled. Declaration ICache<TK, TV> WithSkipStore() Returns Type Description ICache <TK, TV> Cache with read-through and write-through behavior disabled. Extension Methods CacheLinqExtensions.AsCacheQueryable<TKey, TValue>(ICache<TKey, TValue>) CacheLinqExtensions.AsCacheQueryable<TKey, TValue>(ICache<TKey, TValue>, Boolean) CacheLinqExtensions.AsCacheQueryable<TKey, TValue>(ICache<TKey, TValue>, Boolean, String) CacheLinqExtensions.AsCacheQueryable<TKey, TValue>(ICache<TKey, TValue>, QueryOptions)"
  },
  "api/Apache.Ignite.Core.Cache.ICacheAffinity.html": {
    "href": "api/Apache.Ignite.Core.Cache.ICacheAffinity.html",
    "title": "Interface ICacheAffinity | Apache Ignite.NET",
    "keywords": "Interface ICacheAffinity Provides affinity information to detect which node is primary and which nodes are backups for a partitioned cache. You can get an instance of this interface by calling GetAffinity(String) method. Mapping of a key to a node is a three-step operation. First step will get an affinity key for given key using CacheAffinityKeyMapper . If mapper is not specified, the original key will be used. Second step will map affinity key to partition using CacheAffinityFunction.partition(Object) method. Third step will map obtained partition to nodes for current grid topology version. Interface provides various mapKeysToNodes(...) methods which provide node affinity mapping for given keys. All mapKeysToNodes(...) methods are not transactional and will not enlist keys into ongoing transaction. All members are thread-safe and may be used concurrently from multiple threads. Namespace : Apache.Ignite.Core.Cache Assembly : Apache.Ignite.Core.dll Syntax public interface ICacheAffinity Properties Partitions Gets number of partitions in cache according to configured affinity function. Declaration int Partitions { get; } Property Value Type Description System.Int32 Number of cache partitions. Methods GetAffinityKey<TK, TR>(TK) Maps passed in key to a key which will be used for node affinity. Declaration TR GetAffinityKey<TK, TR>(TK key) Parameters Type Name Description TK key Key to map. Returns Type Description TR Key to be used for node-to-affinity mapping (may be the same key as passed in). Type Parameters Name Description TK TR GetAllPartitions(IClusterNode) Gets partition ids for which nodes of the given projection has ownership (either primary or backup). Declaration int[] GetAllPartitions(IClusterNode n) Parameters Type Name Description IClusterNode n Node. Returns Type Description System.Int32 [] Partition ids for which given projection has ownership. GetBackupPartitions(IClusterNode) Gets partition ids for which nodes of the given projection has backup ownership. Declaration int[] GetBackupPartitions(IClusterNode n) Parameters Type Name Description IClusterNode n Node. Returns Type Description System.Int32 [] Partition ids for which given projection has backup ownership. GetPartition<TK>(TK) Gets partition id for the given key. Declaration int GetPartition<TK>(TK key) Parameters Type Name Description TK key Key to get partition id for. Returns Type Description System.Int32 Partition id. Type Parameters Name Description TK GetPrimaryPartitions(IClusterNode) Gets partition ids for which nodes of the given projection has primary ownership. Declaration int[] GetPrimaryPartitions(IClusterNode n) Parameters Type Name Description IClusterNode n Node. Returns Type Description System.Int32 [] Partition ids for which given projection has primary ownership. IsBackup<TK>(IClusterNode, TK) Returns 'true' if given node is the backup node for given key. Declaration bool IsBackup<TK>(IClusterNode n, TK key) Parameters Type Name Description IClusterNode n Node. TK key Key. Returns Type Description System.Boolean 'True' if given node is the backup node for given key. Type Parameters Name Description TK IsPrimary<TK>(IClusterNode, TK) Returns 'true' if given node is the primary node for given key. Declaration bool IsPrimary<TK>(IClusterNode n, TK key) Parameters Type Name Description IClusterNode n Node. TK key Key. Returns Type Description System.Boolean 'True' if given node is the primary node for given key. Type Parameters Name Description TK IsPrimaryOrBackup<TK>(IClusterNode, TK) Returns 'true' if given node is either primary or backup node for given key. Declaration bool IsPrimaryOrBackup<TK>(IClusterNode n, TK key) Parameters Type Name Description IClusterNode n Node. TK key Key. Returns Type Description System.Boolean 'True' if given node is either primary or backup node for given key. Type Parameters Name Description TK MapKeysToNodes<TK>(IEnumerable<TK>) This method provides ability to detect which keys are mapped to which nodes. Use it to determine which nodes are storing which keys prior to sending jobs that access these keys. Declaration IDictionary<IClusterNode, IList<TK>> MapKeysToNodes<TK>(IEnumerable<TK> keys) Parameters Type Name Description System.Collections.Generic.IEnumerable <TK> keys Keys to map to nodes. Returns Type Description System.Collections.Generic.IDictionary < IClusterNode , System.Collections.Generic.IList <TK>> Map of nodes to keys or empty map if there are no alive nodes for this cache. Type Parameters Name Description TK MapKeyToNode<TK>(TK) This method provides ability to detect to which primary node the given key is mapped. Use it to determine which nodes are storing which keys prior to sending jobs that access these keys. Declaration IClusterNode MapKeyToNode<TK>(TK key) Parameters Type Name Description TK key Keys to map to a node. Returns Type Description IClusterNode Primary node for the key or null if there are no alive nodes for this cache. Type Parameters Name Description TK MapKeyToPrimaryAndBackups<TK>(TK) Gets primary and backup nodes for the key. Note that primary node is always first in the returned collection. Declaration IList<IClusterNode> MapKeyToPrimaryAndBackups<TK>(TK key) Parameters Type Name Description TK key Returns Type Description System.Collections.Generic.IList < IClusterNode > Type Parameters Name Description TK MapPartitionsToNodes(IEnumerable<Int32>) Gets primary nodes for the given partitions. Declaration IDictionary<int, IClusterNode> MapPartitionsToNodes(IEnumerable<int> parts) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Int32 > parts Partition ids. Returns Type Description System.Collections.Generic.IDictionary < System.Int32 , IClusterNode > Mapping of given partitions to their primary nodes. MapPartitionToNode(Int32) Gets primary node for the given partition. Declaration IClusterNode MapPartitionToNode(int part) Parameters Type Name Description System.Int32 part Partition id. Returns Type Description IClusterNode Primary node for the given partition. MapPartitionToPrimaryAndBackups(Int32) Gets primary and backup nodes for partition. Note that primary node is always first in the returned collection. Declaration IList<IClusterNode> MapPartitionToPrimaryAndBackups(int part) Parameters Type Name Description System.Int32 part Partition to get affinity nodes for. Returns Type Description System.Collections.Generic.IList < IClusterNode > Collection of primary and backup nodes for partition with primary node always first"
  },
  "api/Apache.Ignite.Core.Cache.Query.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.Discovery.Tcp.TcpDiscoverySpi.html": {
    "href": "api/Apache.Ignite.Core.Discovery.Tcp.TcpDiscoverySpi.html",
    "title": "Class TcpDiscoverySpi | Apache Ignite.NET",
    "keywords": "Class TcpDiscoverySpi TCP discover service provider. Inheritance System.Object TcpDiscoverySpi Implements IDiscoverySpi Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Discovery.Tcp Assembly : Apache.Ignite.Core.dll Syntax public class TcpDiscoverySpi : IDiscoverySpi Constructors TcpDiscoverySpi() Initializes a new instance of the TcpDiscoverySpi class. Declaration public TcpDiscoverySpi() Fields DefaultAckTimeout Default acknowledgement timeout. Declaration public static readonly TimeSpan DefaultAckTimeout Field Value Type Description System.TimeSpan DefaultIpFinderCleanFrequency Default value for the IpFinderCleanFrequency property. Declaration public static readonly TimeSpan DefaultIpFinderCleanFrequency Field Value Type Description System.TimeSpan DefaultJoinTimeout Default join timeout. Declaration public static readonly TimeSpan DefaultJoinTimeout Field Value Type Description System.TimeSpan DefaultLocalPort Default value for the LocalPort property. Declaration public const int DefaultLocalPort = 47500 Field Value Type Description System.Int32 DefaultLocalPortRange Default value for the LocalPortRange property. Declaration public const int DefaultLocalPortRange = 100 Field Value Type Description System.Int32 DefaultMaxAckTimeout Default maximum acknowledgement timeout. Declaration public static readonly TimeSpan DefaultMaxAckTimeout Field Value Type Description System.TimeSpan DefaultNetworkTimeout Default network timeout. Declaration public static readonly TimeSpan DefaultNetworkTimeout Field Value Type Description System.TimeSpan DefaultReconnectCount Default value for the ReconnectCount property. Declaration public const int DefaultReconnectCount = 10 Field Value Type Description System.Int32 DefaultSocketTimeout Default socket timeout. Declaration public static readonly TimeSpan DefaultSocketTimeout Field Value Type Description System.TimeSpan DefaultThreadPriority Default value for the ThreadPriority property. Declaration public const int DefaultThreadPriority = 10 Field Value Type Description System.Int32 DefaultTopologyHistorySize Default value for the TopologyHistorySize property. Declaration public const int DefaultTopologyHistorySize = 1000 Field Value Type Description System.Int32 Properties AckTimeout Gets or sets the timeout for receiving acknowledgement for sent message. Declaration public TimeSpan AckTimeout { get; set; } Property Value Type Description System.TimeSpan ClientReconnectDisabled Gets or sets a value indicating whether client does not try to reconnect after server detected client node failure. Declaration public bool ClientReconnectDisabled { get; set; } Property Value Type Description System.Boolean ForceServerMode Gets or sets a value indicating whether TcpDiscoverySpi is started in server mode regardless of ClientMode setting. Declaration public bool ForceServerMode { get; set; } Property Value Type Description System.Boolean IpFinder Gets or sets the IP finder which defines how nodes will find each other on the network. Declaration public ITcpDiscoveryIpFinder IpFinder { get; set; } Property Value Type Description ITcpDiscoveryIpFinder IpFinderCleanFrequency Gets or sets the IP finder clean frequency. Declaration public TimeSpan IpFinderCleanFrequency { get; set; } Property Value Type Description System.TimeSpan JoinTimeout Gets or sets the join timeout. Declaration public TimeSpan JoinTimeout { get; set; } Property Value Type Description System.TimeSpan LocalAddress Gets or sets the local host IP address that discovery SPI uses. Declaration public string LocalAddress { get; set; } Property Value Type Description System.String LocalPort Gets or sets the local port to listen to. Declaration public int LocalPort { get; set; } Property Value Type Description System.Int32 LocalPortRange Gets or sets the range for local ports. Local node will try to bind on first available port starting from LocalPort up until ( LocalPort + LocalPortRange ). Declaration public int LocalPortRange { get; set; } Property Value Type Description System.Int32 MaxAckTimeout Gets or sets the maximum timeout for receiving acknowledgement for sent message. Declaration public TimeSpan MaxAckTimeout { get; set; } Property Value Type Description System.TimeSpan NetworkTimeout Gets or sets the network timeout. Declaration public TimeSpan NetworkTimeout { get; set; } Property Value Type Description System.TimeSpan ReconnectCount Gets or sets the number of times node tries to (re)establish connection to another node. Declaration public int ReconnectCount { get; set; } Property Value Type Description System.Int32 SocketTimeout Gets or sets the socket timeout. Declaration public TimeSpan SocketTimeout { get; set; } Property Value Type Description System.TimeSpan StatisticsPrintFrequency Gets or sets the statistics print frequency. System.TimeSpan.Zero for no statistics. Declaration public TimeSpan StatisticsPrintFrequency { get; set; } Property Value Type Description System.TimeSpan ThreadPriority Sets thread priority, 1 (lowest) to 10 (highest). All threads within SPI will be started with it. Declaration public int ThreadPriority { get; set; } Property Value Type Description System.Int32 TopologyHistorySize Gets or sets the size of topology snapshots history. Declaration public int TopologyHistorySize { get; set; } Property Value Type Description System.Int32 Implements IDiscoverySpi"
  },
  "api/Apache.Ignite.Core.Events.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.Failure.IFailureHandler.html": {
    "href": "api/Apache.Ignite.Core.Failure.IFailureHandler.html",
    "title": "Interface IFailureHandler | Apache Ignite.NET",
    "keywords": "Interface IFailureHandler Failure handler interface. Only predefined implementations are supported: NoOpFailureHandler , StopNodeFailureHandler , StopNodeOrHaltFailureHandler . Namespace : Apache.Ignite.Core.Failure Assembly : Apache.Ignite.Core.dll Syntax public interface IFailureHandler"
  },
  "api/Apache.Ignite.Core.Failure.NoOpFailureHandler.html": {
    "href": "api/Apache.Ignite.Core.Failure.NoOpFailureHandler.html",
    "title": "Class NoOpFailureHandler | Apache Ignite.NET",
    "keywords": "Class NoOpFailureHandler Just ignores any failure. It's useful for tests and debugging. Inheritance System.Object NoOpFailureHandler Implements IFailureHandler Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Failure Assembly : Apache.Ignite.Core.dll Syntax public class NoOpFailureHandler : IFailureHandler Implements IFailureHandler"
  },
  "api/Apache.Ignite.Core.Messaging.IMessaging.html": {
    "href": "api/Apache.Ignite.Core.Messaging.IMessaging.html",
    "title": "Interface IMessaging | Apache Ignite.NET",
    "keywords": "Interface IMessaging Provides functionality for topic-based message exchange among nodes defined by IClusterGroup . Users can send ordered and unordered messages to various topics. Note that same topic name cannot be reused between ordered and unordered messages. All members are thread-safe and may be used concurrently from multiple threads. Namespace : Apache.Ignite.Core.Messaging Assembly : Apache.Ignite.Core.dll Syntax public interface IMessaging Properties ClusterGroup Gets the cluster group to which this instance belongs. Declaration IClusterGroup ClusterGroup { get; } Property Value Type Description IClusterGroup Methods LocalListen<T>(IMessageListener<T>, Object) Adds local listener for given topic on local node only. This listener will be notified whenever any node within the cluster group will send a message for a given topic to this node. Local listen subscription will happen regardless of whether local node belongs to this cluster group or not. Declaration void LocalListen<T>(IMessageListener<T> listener, object topic = null) Parameters Type Name Description IMessageListener <T> listener Predicate that is called on each received message. If predicate returns false, then it will be unsubscribed from any further notifications. System.Object topic Topic to subscribe to. Type Parameters Name Description T RemoteListen<T>(IMessageListener<T>, Object) Adds a message listener for a given topic to all nodes in the cluster group (possibly including this node if it belongs to the cluster group as well). This means that any node within this cluster group can send a message for a given topic and all nodes within the cluster group will receive listener notifications. Declaration Guid RemoteListen<T>(IMessageListener<T> listener, object topic = null) Parameters Type Name Description IMessageListener <T> listener Predicate that is called on each received message. If predicate returns false, then it will be unsubscribed from any further notifications. System.Object topic Topic to unsubscribe from. Returns Type Description System.Guid Operation ID that can be passed to StopRemoteListen(Guid) method to stop listening. Type Parameters Name Description T RemoteListenAsync<T>(IMessageListener<T>, Object) Adds a message listener for a given topic to all nodes in the cluster group (possibly including this node if it belongs to the cluster group as well). This means that any node within this cluster group can send a message for a given topic and all nodes within the cluster group will receive listener notifications. Declaration Task<Guid> RemoteListenAsync<T>(IMessageListener<T> listener, object topic = null) Parameters Type Name Description IMessageListener <T> listener Predicate that is called on each received message. If predicate returns false, then it will be unsubscribed from any further notifications. System.Object topic Topic to unsubscribe from. Returns Type Description System.Threading.Tasks.Task < System.Guid > Operation ID that can be passed to StopRemoteListen(Guid) method to stop listening. Type Parameters Name Description T Send(Object, Object) Sends a message with specified topic to the nodes in the underlying cluster group. Declaration void Send(object message, object topic = null) Parameters Type Name Description System.Object message Message to send. System.Object topic Topic to send to, null for default topic. SendAll(IEnumerable, Object) Sends messages with specified topic to the nodes in the underlying cluster group. Declaration void SendAll(IEnumerable messages, object topic = null) Parameters Type Name Description System.Collections.IEnumerable messages Messages to send. System.Object topic Topic to send to, null for default topic. SendOrdered(Object, Object, Nullable<TimeSpan>) Sends a message with specified topic to the nodes in the underlying cluster group. Messages sent with this method will arrive in the same order they were sent. Note that if a topic is used for ordered messages, then it cannot be reused for non-ordered messages. Declaration void SendOrdered(object message, object topic = null, TimeSpan? timeout = default (TimeSpan? )) Parameters Type Name Description System.Object message Message to send. System.Object topic Topic to send to, null for default topic. System.Nullable < System.TimeSpan > timeout Message timeout, null for for default value from configuration (IgniteConfiguration.getNetworkTimeout). StopLocalListen<T>(IMessageListener<T>, Object) Unregisters local listener for given topic on local node only. Declaration void StopLocalListen<T>(IMessageListener<T> listener, object topic = null) Parameters Type Name Description IMessageListener <T> listener Listener predicate. System.Object topic Topic to unsubscribe from. Type Parameters Name Description T StopRemoteListen(Guid) Unregisters all listeners identified with provided operation ID on all nodes in the cluster group. Declaration void StopRemoteListen(Guid opId) Parameters Type Name Description System.Guid opId Operation ID that was returned from RemoteListen<T>(IMessageListener<T>, Object) method. StopRemoteListenAsync(Guid) Unregisters all listeners identified with provided operation ID on all nodes in the cluster group. Declaration Task StopRemoteListenAsync(Guid opId) Parameters Type Name Description System.Guid opId Operation ID that was returned from RemoteListen<T>(IMessageListener<T>, Object) method. Returns Type Description System.Threading.Tasks.Task"
  },
  "api/Apache.Ignite.Core.Messaging.html": {
    "href": "api/Apache.Ignite.Core.Messaging.html",
    "title": "Namespace Apache.Ignite.Core.Messaging | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Messaging Interfaces IMessageListener<T> Represents messaging filter predicate. IMessaging Provides functionality for topic-based message exchange among nodes defined by IClusterGroup . Users can send ordered and unordered messages to various topics. Note that same topic name cannot be reused between ordered and unordered messages. All members are thread-safe and may be used concurrently from multiple threads."
  },
  "api/Apache.Ignite.Core.PersistentStore.CheckpointWriteOrder.html": {
    "href": "api/Apache.Ignite.Core.PersistentStore.CheckpointWriteOrder.html",
    "title": "Enum CheckpointWriteOrder | Apache Ignite.NET",
    "keywords": "Enum CheckpointWriteOrder Defines checkpoint pages order on disk. Namespace : Apache.Ignite.Core.PersistentStore Assembly : Apache.Ignite.Core.dll Syntax [Obsolete(\"Use Apache.Ignite.Core.Data.CheckpointWriteOrder\")] public enum CheckpointWriteOrder Fields Name Description Random Pages are written in order provided by checkpoint pages collection iterator (which is basically a hashtable). Sequential All checkpoint pages are collected into single list and sorted by page index. Provides almost sequential disk writes, which can be much faster on some SSD models."
  },
  "api/Apache.Ignite.Core.PersistentStore.IPersistentStoreMetrics.html": {
    "href": "api/Apache.Ignite.Core.PersistentStore.IPersistentStoreMetrics.html",
    "title": "Interface IPersistentStoreMetrics | Apache Ignite.NET",
    "keywords": "Interface IPersistentStoreMetrics Persistent store metrics. Obsolete, see IDataStorageMetrics . Namespace : Apache.Ignite.Core.PersistentStore Assembly : Apache.Ignite.Core.dll Syntax [Obsolete(\"Use IDataStorageMetrics\")] public interface IPersistentStoreMetrics Properties LastCheckpointCopiedOnWritePagesNumber Gets the number of pages copied to a temporary checkpoint buffer during the last checkpoint. Declaration long LastCheckpointCopiedOnWritePagesNumber { get; } Property Value Type Description System.Int64 LastCheckpointDataPagesNumber Gets the number of data pages written during the last checkpoint. Declaration long LastCheckpointDataPagesNumber { get; } Property Value Type Description System.Int64 LastCheckpointFsyncDuration Gets the duration of the sync phase of the last checkpoint. Declaration TimeSpan LastCheckpointFsyncDuration { get; } Property Value Type Description System.TimeSpan LastCheckpointingDuration Gets the duration of the last checkpoint. Declaration TimeSpan LastCheckpointingDuration { get; } Property Value Type Description System.TimeSpan LastCheckpointLockWaitDuration Gets the duration of last checkpoint lock wait. Declaration TimeSpan LastCheckpointLockWaitDuration { get; } Property Value Type Description System.TimeSpan LastCheckpointMarkDuration Gets the duration of last checkpoint mark phase. Declaration TimeSpan LastCheckpointMarkDuration { get; } Property Value Type Description System.TimeSpan LastCheckpointPagesWriteDuration Gets the duration of last checkpoint pages write phase. Declaration TimeSpan LastCheckpointPagesWriteDuration { get; } Property Value Type Description System.TimeSpan LastCheckpointTotalPagesNumber Gets the total number of pages written during the last checkpoint. Declaration long LastCheckpointTotalPagesNumber { get; } Property Value Type Description System.Int64 WalArchiveSegments Gets the current number of WAL segments in the WAL archive. Declaration int WalArchiveSegments { get; } Property Value Type Description System.Int32 WalFsyncTimeAverage Gets the average WAL fsync duration in microseconds over the last time interval. Declaration float WalFsyncTimeAverage { get; } Property Value Type Description System.Single WalLoggingRate Gets the average number of WAL records per second written during the last time interval. Declaration float WalLoggingRate { get; } Property Value Type Description System.Single WalWritingRate Gets the average number of bytes per second written during the last time interval. Declaration float WalWritingRate { get; } Property Value Type Description System.Single"
  },
  "api/Apache.Ignite.Core.Ssl.SslContextFactory.html": {
    "href": "api/Apache.Ignite.Core.Ssl.SslContextFactory.html",
    "title": "Class SslContextFactory | Apache Ignite.NET",
    "keywords": "Class SslContextFactory This SSL context factory that provides ssl context configuration with specified key and trust stores. Inheritance System.Object SslContextFactory Implements ISslContextFactory Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Ssl Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class SslContextFactory : ISslContextFactory Constructors SslContextFactory() Default constructor. Declaration public SslContextFactory() SslContextFactory(String, String) Creates a new instance of the SslContextFactory class. Trust store file is not set that results in accepting any SSL Certificate. Declaration public SslContextFactory(string keyStoreFilePath, string keyStorePassword) Parameters Type Name Description System.String keyStoreFilePath Path to key store file. System.String keyStorePassword Key store password. SslContextFactory(String, String, String, String) Creates a new instance of the SslContextFactory class. Declaration public SslContextFactory(string keyStoreFilePath, string keyStorePassword, string trustStoreFilePath, string trustStorePassword) Parameters Type Name Description System.String keyStoreFilePath Path to key store file. System.String keyStorePassword Key store password. System.String trustStoreFilePath Path to trust store file. System.String trustStorePassword Trust store password. Fields DefaultKeyAlgorithm Default value for KeyAlgorithm . Declaration public const string DefaultKeyAlgorithm = \"SunX509\" Field Value Type Description System.String DefaultSslProtocol Default value for Protocol . Declaration public const string DefaultSslProtocol = \"TLS\" Field Value Type Description System.String DefaultStoreType Default value for KeyStoreType and TrustStoreType . Declaration public const string DefaultStoreType = \"JKS\" Field Value Type Description System.String Properties KeyAlgorithm Key manager algorithm that will be used to create a key manager. Notice that in most cased default value DefaultKeyAlgorithm suites well, however, on Android platform this value need to be set to X509. Declaration public string KeyAlgorithm { get; set; } Property Value Type Description System.String KeyStoreFilePath Key store file path. Declaration public string KeyStoreFilePath { get; set; } Property Value Type Description System.String KeyStorePassword Key store file password. Declaration public string KeyStorePassword { get; set; } Property Value Type Description System.String KeyStoreType Key store type used for context creation. DefaultStoreType by default. Declaration public string KeyStoreType { get; set; } Property Value Type Description System.String Protocol Protocol for secure transport. DefaultSslProtocol by default. Declaration public string Protocol { get; set; } Property Value Type Description System.String TrustStoreFilePath Path to trust store file. Could be null if any SSL Certificate should be accepted/succeed. Declaration public string TrustStoreFilePath { get; set; } Property Value Type Description System.String TrustStorePassword Trust store password. Declaration public string TrustStorePassword { get; set; } Property Value Type Description System.String TrustStoreType Trust store type used for context creation. DefaultStoreType by default. Declaration public string TrustStoreType { get; set; } Property Value Type Description System.String Implements ISslContextFactory"
  },
  "api/Apache.Ignite.Core.Ssl.html": {
    "href": "api/Apache.Ignite.Core.Ssl.html",
    "title": "Namespace Apache.Ignite.Core.Ssl | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Ssl Classes SslContextFactory This SSL context factory that provides ssl context configuration with specified key and trust stores. Interfaces ISslContextFactory Represents an SSL Context Factory. Only predefined implementation is supported for now: SslContextFactory ."
  },
  "api/Apache.Ignite.Core.Transactions.ITransaction.html": {
    "href": "api/Apache.Ignite.Core.Transactions.ITransaction.html",
    "title": "Interface ITransaction | Apache Ignite.NET",
    "keywords": "Interface ITransaction Grid cache transaction. Cache transactions support the following isolation levels: ReadCommitted isolation level means that always a committed value will be provided for read operations. With this isolation level values are always read from cache global memory or persistent store every time a value is accessed. In other words, if the same key is accessed more than once within the same transaction, it may have different value every time since global cache memory may be updated concurrently by other threads. RepeatableRead isolation level means that if a value was read once within transaction, then all consecutive reads will provide the same in-transaction value. With this isolation level accessed values are stored within in-transaction memory, so consecutive access to the same key within the same transaction will always return the value that was previously read or updated within this transaction. If concurrency is Pessimistic , then a lock on the key will be acquired prior to accessing the value. Serializable isolation level means that all transactions occur in a completely isolated fashion, as if all transactions in the system had executed serially, one after the other. Read access with this level happens the same way as with RepeatableRead level. However, in Optimistic mode, if some transactions cannot be serially isolated from each other, then one winner will be picked and the other transactions in conflict will result in TransactionOptimisticException being thrown on Java side. Cache transactions support the following concurrency models: Optimistic - in this mode all cache operations are not distributed to other nodes until Commit() . In this mode one PREPARE message will be sent to participating cache nodes to start acquiring per-transaction locks, and once all nodes reply OK (i.e. Phase 1 completes successfully), a one-way COMMIT message is sent without waiting for reply. If it is necessary to know whenever remote nodes have committed as well, synchronous commit or synchronous rollback should be enabled via CacheConfiguration.setWriteSynchronizationMode . Note that in this mode, optimistic failures are only possible in conjunction with Serializable isolation level. In all other cases, optimistic transactions will never fail optimistically and will always be identically ordered on all participating Ignite nodes. Pessimistic - in this mode a lock is acquired on all cache operations with exception of read operations in ReadCommitted mode. All optional filters passed into cache operations will be evaluated after successful lock acquisition. Whenever Commit() is called, a single one-way COMMIT message is sent to participating cache nodes without waiting for reply. Note that there is no reason for distributed PREPARE step, as all locks have been already acquired. Just like with optimistic mode, it is possible to configure synchronous commit or rollback and wait till transaction commits on all participating remote nodes. In addition to standard CacheAtomicityMode.TRANSACTIONAL behavior, Ignite also supports a lighter CacheAtomicityMode.ATOMIC mode as well. In this mode distributed transactions and distributed locking are not supported. Disabling transactions and locking allows to achieve much higher performance and throughput ratios. It is recommended that CacheAtomicityMode.TRANSACTIONAL mode is used whenever full ACID -compliant transactions are not needed. You can use cache transactions as follows: ICacheTx tx = cache.TxStart(); try { int v1 = cache<string, int>.Get(\"k1\"); // Check if v1 satisfies some condition before doing a put. if (v1 > 0) cache.Put<string, int>(\"k1\", 2); cache.Removex(\"k2); // Commit the transaction. tx.Commit(); } finally { tx.Dispose(); } Inherited Members System.IDisposable.Dispose() Namespace : Apache.Ignite.Core.Transactions Assembly : Apache.Ignite.Core.dll Syntax public interface ITransaction : IDisposable Properties Concurrency Transaction concurrency mode. Declaration TransactionConcurrency Concurrency { get; } Property Value Type Description TransactionConcurrency Isolation Transaction isolation level. Declaration TransactionIsolation Isolation { get; } Property Value Type Description TransactionIsolation IsRollbackOnly Gets a value indicating whether this transaction was marked as rollback-only. Declaration bool IsRollbackOnly { get; } Property Value Type Description System.Boolean NodeId ID of the node on which this transaction started. Declaration Guid NodeId { get; } Property Value Type Description System.Guid Originating node ID. StartTime Start time of this transaction on this node. Declaration DateTime StartTime { get; } Property Value Type Description System.DateTime State Current transaction state. Declaration TransactionState State { get; } Property Value Type Description TransactionState ThreadId ID of the thread in which this transaction started. Declaration long ThreadId { get; } Property Value Type Description System.Int64 Timeout Timeout for this transaction. If transaction times out prior to it's completion, an exception will be thrown. System.TimeSpan.Zero for infinite timeout. Declaration TimeSpan Timeout { get; } Property Value Type Description System.TimeSpan Methods AddMeta<TV>(String, TV) Adds a new metadata. Declaration void AddMeta<TV>(string name, TV val) Parameters Type Name Description System.String name Metadata name. TV val Metadata value. Type Parameters Name Description TV Commit() Commits this transaction. Declaration void Commit() CommitAsync() Commits this transaction. Declaration Task CommitAsync() Returns Type Description System.Threading.Tasks.Task Meta<TV>(String) Gets metadata by name. Declaration TV Meta<TV>(string name) Parameters Type Name Description System.String name Metadata name. Returns Type Description TV Metadata value. Type Parameters Name Description TV Exceptions Type Condition System.Collections.Generic.KeyNotFoundException If metadata key was not found. RemoveMeta<TV>(String) Removes metadata by name. Declaration TV RemoveMeta<TV>(string name) Parameters Type Name Description System.String name Metadata name. Returns Type Description TV Value of removed metadata or default value for V type. Type Parameters Name Description TV Rollback() Rolls back this transaction. Declaration void Rollback() RollbackAsync() Rolls back this transaction. Declaration Task RollbackAsync() Returns Type Description System.Threading.Tasks.Task SetRollbackonly() Modify the transaction associated with the current thread such that the only possible outcome of the transaction is to roll back the transaction. Declaration bool SetRollbackonly() Returns Type Description System.Boolean True if rollback-only flag was set as a result of this operation, false if it was already set prior to this call or could not be set because transaction is already finishing up committing or rolling back."
  },
  "api/Apache.Ignite.Core.Transactions.ITransactionCollection.html": {
    "href": "api/Apache.Ignite.Core.Transactions.ITransactionCollection.html",
    "title": "Interface ITransactionCollection | Apache Ignite.NET",
    "keywords": "Interface ITransactionCollection Disposable readonly collection of ITransaction Inherited Members System.Collections.Generic.ICollection<Apache.Ignite.Core.Transactions.ITransaction>.Add(Apache.Ignite.Core.Transactions.ITransaction) System.Collections.Generic.ICollection<Apache.Ignite.Core.Transactions.ITransaction>.Clear() System.Collections.Generic.ICollection<Apache.Ignite.Core.Transactions.ITransaction>.Contains(Apache.Ignite.Core.Transactions.ITransaction) System.Collections.Generic.ICollection<Apache.Ignite.Core.Transactions.ITransaction>.CopyTo(Apache.Ignite.Core.Transactions.ITransaction[], System.Int32) System.Collections.Generic.ICollection<Apache.Ignite.Core.Transactions.ITransaction>.Remove(Apache.Ignite.Core.Transactions.ITransaction) System.Collections.Generic.ICollection<Apache.Ignite.Core.Transactions.ITransaction>.Count System.Collections.Generic.ICollection<Apache.Ignite.Core.Transactions.ITransaction>.IsReadOnly System.Collections.Generic.IEnumerable<Apache.Ignite.Core.Transactions.ITransaction>.GetEnumerator() System.IDisposable.Dispose() Namespace : Apache.Ignite.Core.Transactions Assembly : Apache.Ignite.Core.dll Syntax public interface ITransactionCollection : ICollection<ITransaction>, IEnumerable<ITransaction>, IEnumerable, IDisposable"
  },
  "api/Apache.Ignite.Linq.IUpdateDescriptor-2.html": {
    "href": "api/Apache.Ignite.Linq.IUpdateDescriptor-2.html",
    "title": "Interface IUpdateDescriptor<TKey, TValue> | Apache Ignite.NET",
    "keywords": "Interface IUpdateDescriptor<TKey, TValue> Dummy interface to provide update description for UpdateAll<TKey, TValue>(IQueryable<ICacheEntry<TKey, TValue>>, Expression<Func<IUpdateDescriptor<TKey, TValue>, IUpdateDescriptor<TKey, TValue>>>) Namespace : Apache.Ignite.Linq Assembly : Apache.Ignite.Linq.dll Syntax public interface IUpdateDescriptor<out TKey, out TValue> Type Parameters Name Description TKey Key type. TValue Value type. Methods Set<TProp>(Func<TValue, TProp>, TProp) Specifies member update with constant Declaration IUpdateDescriptor<TKey, TValue> Set<TProp>(Func<TValue, TProp> selector, TProp value) Parameters Type Name Description System.Func <TValue, TProp> selector Member selector TProp value New value Returns Type Description IUpdateDescriptor <TKey, TValue> Type Parameters Name Description TProp Member type Set<TProp>(Func<TValue, TProp>, Func<ICacheEntry<TKey, TValue>, TProp>) Specifies member update with expression Declaration IUpdateDescriptor<TKey, TValue> Set<TProp>(Func<TValue, TProp> selector, Func<ICacheEntry<TKey, TValue>, TProp> valueBuilder) Parameters Type Name Description System.Func <TValue, TProp> selector Member selector System.Func < ICacheEntry <TKey, TValue>, TProp> valueBuilder New value generator Returns Type Description IUpdateDescriptor <TKey, TValue> Type Parameters Name Description TProp Member type"
  },
  "api/Apache.Ignite.Linq.QueryOptions.html": {
    "href": "api/Apache.Ignite.Linq.QueryOptions.html",
    "title": "Class QueryOptions | Apache Ignite.NET",
    "keywords": "Class QueryOptions Cache query options. Inheritance System.Object QueryOptions Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Linq Assembly : Apache.Ignite.Linq.dll Syntax public class QueryOptions Constructors QueryOptions() Initializes a new instance of the QueryOptions class. Declaration public QueryOptions() Fields DefaultPageSize Default page size. Declaration public const int DefaultPageSize = 1024 Field Value Type Description System.Int32 Properties Colocated Gets or sets a value indicating whether this query operates on colocated data. Whenever Ignite executes a distributed query, it sends sub-queries to individual cluster members. If you know in advance that the elements of your query selection are colocated together on the same node and you group by colocated key (primary or affinity key), then Ignite can make significant performance and network optimizations by grouping data on remote nodes. Declaration public bool Colocated { get; set; } Property Value Type Description System.Boolean EnableDistributedJoins Gets or sets a value indicating whether distributed joins should be enabled for this query. When disabled, join results will only contain colocated data (joins work locally). When enabled, joins work as expected, no matter how the data is distributed. Declaration public bool EnableDistributedJoins { get; set; } Property Value Type Description System.Boolean true if enable distributed joins should be enabled; otherwise, false . EnforceJoinOrder Gets or sets a value indicating whether join order of tables should be enforced. When true, query optimizer will not reorder tables in join. It is not recommended to enable this property until you are sure that your indexes and the query itself are correct and tuned as much as possible but query optimizer still produces wrong join order. Declaration public bool EnforceJoinOrder { get; set; } Property Value Type Description System.Boolean true if join order should be enforced; otherwise, false . Lazy Gets or sets a value indicating whether this query is lazy. By default Ignite attempts to fetch the whole query result set to memory and send it to the client. For small and medium result sets this provides optimal performance and minimize duration of internal database locks, thus increasing concurrency. If result set is too big to fit in available memory this could lead to excessive GC pauses and even OutOfMemoryError. Use this flag as a hint for Ignite to fetch result set lazily, thus minimizing memory consumption at the cost of moderate performance hit. Declaration public bool Lazy { get; set; } Property Value Type Description System.Boolean Local Local flag. When set query will be executed only on local node, so only local entries will be returned as query result. Defaults to false . Declaration public bool Local { get; set; } Property Value Type Description System.Boolean PageSize Page size, defaults to DefaultPageSize . Declaration public int PageSize { get; set; } Property Value Type Description System.Int32 ReplicatedOnly Gets or sets a value indicating whether this query contains only replicated tables. This is a hint for potentially more effective execution. Declaration public bool ReplicatedOnly { get; set; } Property Value Type Description System.Boolean TableName Gets or sets the name of the table. Table name is equal to short class name of a cache value. When a cache has only one type of values, or only one QueryEntity defined, table name will be inferred and can be omitted (null). Declaration public string TableName { get; set; } Property Value Type Description System.String The name of the table. Timeout Gets or sets the query timeout. Query will be automatically cancelled if the execution timeout is exceeded. Default is System.TimeSpan.Zero , which means no timeout. Declaration public TimeSpan Timeout { get; set; } Property Value Type Description System.TimeSpan"
  },
  "api/Apache.Ignite.Linq.html": {
    "href": "api/Apache.Ignite.Linq.html",
    "title": "Namespace Apache.Ignite.Linq | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Linq Classes CacheClientLinqExtensions Extensions methods for ICacheClient<TK, TV> . CacheLinqExtensions Extensions methods for ICache<TK, TV> . CompiledQuery Represents a compiled cache query. QueryOptions Cache query options. Interfaces ICacheQueryable Common interface for cache queryables. IUpdateDescriptor<TKey, TValue> Dummy interface to provide update description for UpdateAll<TKey, TValue>(IQueryable<ICacheEntry<TKey, TValue>>, Expression<Func<IUpdateDescriptor<TKey, TValue>, IUpdateDescriptor<TKey, TValue>>>) Delegates CompiledQueryFunc<T> Delegate for compiled query with arbitrary number of arguments."
  },
  "api/Apache.Ignite.Log4Net.IgniteLog4NetLogger.html": {
    "href": "api/Apache.Ignite.Log4Net.IgniteLog4NetLogger.html",
    "title": "Class IgniteLog4NetLogger | Apache Ignite.NET",
    "keywords": "Class IgniteLog4NetLogger Ignite log4net integration. Inheritance System.Object IgniteLog4NetLogger Implements ILogger Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Log4Net Assembly : Apache.Ignite.Log4Net.dll Syntax public class IgniteLog4NetLogger : ILogger Constructors IgniteLog4NetLogger() Initializes a new instance of the IgniteLog4NetLogger class. Declaration public IgniteLog4NetLogger() IgniteLog4NetLogger(ILog) Initializes a new instance of the IgniteLog4NetLogger class. Declaration public IgniteLog4NetLogger(ILog log) Parameters Type Name Description log4net.ILog log The log. Methods ConvertLogLevel(LogLevel) Converts the Ignite LogLevel to the log4net log level. Declaration public static Level ConvertLogLevel(LogLevel level) Parameters Type Name Description LogLevel level The Ignite log level. Returns Type Description log4net.Core.Level Corresponding log4net log level. IsEnabled(LogLevel) Determines whether the specified log level is enabled. Declaration public bool IsEnabled(LogLevel level) Parameters Type Name Description LogLevel level The level. Returns Type Description System.Boolean Value indicating whether the specified log level is enabled Log(LogLevel, String, Object[], IFormatProvider, String, String, Exception) Logs the specified message. Declaration public void Log(LogLevel level, string message, object[] args, IFormatProvider formatProvider, string category, string nativeErrorInfo, Exception ex) Parameters Type Name Description LogLevel level The level. System.String message The message. System.Object [] args The arguments to format message . Can be null (formatting will not occur). System.IFormatProvider formatProvider The format provider. Can be null if args is null. System.String category The logging category name. System.String nativeErrorInfo The native error information. System.Exception ex The exception. Can be null. Implements ILogger"
  },
  "api/Apache.Ignite.Core.Binary.BinaryObjectException.html": {
    "href": "api/Apache.Ignite.Core.Binary.BinaryObjectException.html",
    "title": "Class BinaryObjectException | Apache Ignite.NET",
    "keywords": "Class BinaryObjectException Indicates an error during binarization. Inheritance System.Object System.Exception IgniteException BinaryObjectException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Binary Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class BinaryObjectException : IgniteException, ISerializable, _Exception Constructors BinaryObjectException() Constructs an exception. Declaration public BinaryObjectException() BinaryObjectException(SerializationInfo, StreamingContext) Constructs an exception. Declaration protected BinaryObjectException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization info. System.Runtime.Serialization.StreamingContext ctx Streaming context. BinaryObjectException(String) Initializes a new instance of the BinaryObjectException class. Declaration public BinaryObjectException(string message) Parameters Type Name Description System.String message The message that describes the error. BinaryObjectException(String, Exception) Initializes a new instance of the BinaryObjectException class. Declaration public BinaryObjectException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Binary.IBinaryIdMapper.html": {
    "href": "api/Apache.Ignite.Core.Binary.IBinaryIdMapper.html",
    "title": "Interface IBinaryIdMapper | Apache Ignite.NET",
    "keywords": "Interface IBinaryIdMapper Maps class name and class field names to integer identifiers. Namespace : Apache.Ignite.Core.Binary Assembly : Apache.Ignite.Core.dll Syntax public interface IBinaryIdMapper Methods GetFieldId(Int32, String) Gets field ID for the given field of the given class. Declaration int GetFieldId(int typeId, string fieldName) Parameters Type Name Description System.Int32 typeId Type ID. System.String fieldName Field name. Returns Type Description System.Int32 ID of the field or null in case hash code is to be used. GetTypeId(String) Gets type ID for the given type. Declaration int GetTypeId(string typeName) Parameters Type Name Description System.String typeName Full type name. Returns Type Description System.Int32 ID of the class or 0 in case hash code is to be used."
  },
  "api/Apache.Ignite.Core.Binary.IBinaryWriter.html": {
    "href": "api/Apache.Ignite.Core.Binary.IBinaryWriter.html",
    "title": "Interface IBinaryWriter | Apache Ignite.NET",
    "keywords": "Interface IBinaryWriter Writer for binary objects. Namespace : Apache.Ignite.Core.Binary Assembly : Apache.Ignite.Core.dll Syntax public interface IBinaryWriter Methods GetRawWriter() Get raw writer. Declaration IBinaryRawWriter GetRawWriter() Returns Type Description IBinaryRawWriter Raw writer. WriteArray<T>(String, T[]) Write named object array. Declaration void WriteArray<T>(string fieldName, T[] val) Parameters Type Name Description System.String fieldName Field name. T[] val Object array. Type Parameters Name Description T WriteBoolean(String, Boolean) Write named boolean value. Declaration void WriteBoolean(string fieldName, bool val) Parameters Type Name Description System.String fieldName Field name. System.Boolean val Boolean value. WriteBooleanArray(String, Boolean[]) Write named boolean array. Declaration void WriteBooleanArray(string fieldName, bool[] val) Parameters Type Name Description System.String fieldName Field name. System.Boolean [] val Boolean array. WriteByte(String, Byte) Write named byte value. Declaration void WriteByte(string fieldName, byte val) Parameters Type Name Description System.String fieldName Field name. System.Byte val Byte value. WriteByteArray(String, Byte[]) Write named byte array. Declaration void WriteByteArray(string fieldName, byte[] val) Parameters Type Name Description System.String fieldName Field name. System.Byte [] val Byte array. WriteChar(String, Char) Write named char value. Declaration void WriteChar(string fieldName, char val) Parameters Type Name Description System.String fieldName Field name. System.Char val Char value. WriteCharArray(String, Char[]) Write named char array. Declaration void WriteCharArray(string fieldName, char[] val) Parameters Type Name Description System.String fieldName Field name. System.Char [] val Char array. WriteCollection(String, ICollection) Writes a named collection in interoperable form. Use this method to communicate with other platforms or with nodes that need to read collection elements in binary form. When there is no need for binarization or interoperability, please use WriteObject<T>(String, T) , which will properly preserve generic collection type. Declaration void WriteCollection(string fieldName, ICollection val) Parameters Type Name Description System.String fieldName Field name. System.Collections.ICollection val Collection. WriteDecimal(String, Nullable<Decimal>) Write named decimal value. Declaration void WriteDecimal(string fieldName, decimal ? val) Parameters Type Name Description System.String fieldName Field name. System.Nullable < System.Decimal > val Decimal value. WriteDecimalArray(String, Nullable<Decimal>[]) Write named decimal array. Declaration void WriteDecimalArray(string fieldName, decimal ? [] val) Parameters Type Name Description System.String fieldName Field name. System.Nullable < System.Decimal >[] val Decimal array. WriteDictionary(String, IDictionary) Writes a named dictionary in interoperable form. Use this method to communicate with other platforms or with nodes that need to read dictionary elements in binary form. When there is no need for binarization or interoperability, please use WriteObject<T>(String, T) , which will properly preserve generic dictionary type. Declaration void WriteDictionary(string fieldName, IDictionary val) Parameters Type Name Description System.String fieldName Field name. System.Collections.IDictionary val Dictionary. WriteDouble(String, Double) Write named double value. Declaration void WriteDouble(string fieldName, double val) Parameters Type Name Description System.String fieldName Field name. System.Double val Double value. WriteDoubleArray(String, Double[]) Write named double array. Declaration void WriteDoubleArray(string fieldName, double[] val) Parameters Type Name Description System.String fieldName Field name. System.Double [] val Double array. WriteEnum<T>(String, T) Write named enum value. Declaration void WriteEnum<T>(string fieldName, T val) Parameters Type Name Description System.String fieldName Field name. T val Enum value. Type Parameters Name Description T WriteEnumArray<T>(String, T[]) Write named enum array. Declaration void WriteEnumArray<T>(string fieldName, T[] val) Parameters Type Name Description System.String fieldName Field name. T[] val Enum array. Type Parameters Name Description T WriteFloat(String, Single) Write named float value. Declaration void WriteFloat(string fieldName, float val) Parameters Type Name Description System.String fieldName Field name. System.Single val Float value. WriteFloatArray(String, Single[]) Write named float array. Declaration void WriteFloatArray(string fieldName, float[] val) Parameters Type Name Description System.String fieldName Field name. System.Single [] val Float array. WriteGuid(String, Nullable<Guid>) Write named GUID value. Declaration void WriteGuid(string fieldName, Guid? val) Parameters Type Name Description System.String fieldName Field name. System.Nullable < System.Guid > val GUID value. WriteGuidArray(String, Nullable<Guid>[]) Write named GUID array. Declaration void WriteGuidArray(string fieldName, Guid? [] val) Parameters Type Name Description System.String fieldName Field name. System.Nullable < System.Guid >[] val GUID array. WriteInt(String, Int32) Write named int value. Declaration void WriteInt(string fieldName, int val) Parameters Type Name Description System.String fieldName Field name. System.Int32 val Int value. WriteIntArray(String, Int32[]) Write named int array. Declaration void WriteIntArray(string fieldName, int[] val) Parameters Type Name Description System.String fieldName Field name. System.Int32 [] val Int array. WriteLong(String, Int64) Write named long value. Declaration void WriteLong(string fieldName, long val) Parameters Type Name Description System.String fieldName Field name. System.Int64 val Long value. WriteLongArray(String, Int64[]) Write named long array. Declaration void WriteLongArray(string fieldName, long[] val) Parameters Type Name Description System.String fieldName Field name. System.Int64 [] val Long array. WriteObject<T>(String, T) Write named object value. Declaration void WriteObject<T>(string fieldName, T val) Parameters Type Name Description System.String fieldName Field name. T val Object value. Type Parameters Name Description T WriteShort(String, Int16) Write named short value. Declaration void WriteShort(string fieldName, short val) Parameters Type Name Description System.String fieldName Field name. System.Int16 val Short value. WriteShortArray(String, Int16[]) Write named short array. Declaration void WriteShortArray(string fieldName, short[] val) Parameters Type Name Description System.String fieldName Field name. System.Int16 [] val Short array. WriteString(String, String) Write named string value. Declaration void WriteString(string fieldName, string val) Parameters Type Name Description System.String fieldName Field name. System.String val String value. WriteStringArray(String, String[]) Write named string array. Declaration void WriteStringArray(string fieldName, string[] val) Parameters Type Name Description System.String fieldName Field name. System.String [] val String array. WriteTimestamp(String, Nullable<DateTime>) Write named date value. Declaration void WriteTimestamp(string fieldName, DateTime? val) Parameters Type Name Description System.String fieldName Field name. System.Nullable < System.DateTime > val Date value. WriteTimestampArray(String, Nullable<DateTime>[]) Write named date array. Declaration void WriteTimestampArray(string fieldName, DateTime? [] val) Parameters Type Name Description System.String fieldName Field name. System.Nullable < System.DateTime >[] val Date array."
  },
  "api/Apache.Ignite.Core.Cache.Affinity.IAffinityFunction.html": {
    "href": "api/Apache.Ignite.Core.Cache.Affinity.IAffinityFunction.html",
    "title": "Interface IAffinityFunction | Apache Ignite.NET",
    "keywords": "Interface IAffinityFunction Represents a function that maps cache keys to cluster nodes. Predefined implementations: RendezvousAffinityFunction . Namespace : Apache.Ignite.Core.Cache.Affinity Assembly : Apache.Ignite.Core.dll Syntax public interface IAffinityFunction Properties Partitions Gets the total number of partitions. All caches should always provide correct partition count which should be the same on all participating nodes. Note that partitions should always be numbered from 0 inclusively to N exclusively without any gaps. Declaration int Partitions { get; } Property Value Type Description System.Int32 Methods AssignPartitions(AffinityFunctionContext) Gets affinity nodes for a partition. In case of replicated cache, all returned nodes are updated in the same manner. In case of partitioned cache, the returned list should contain only the primary and back up nodes with primary node being always first. Note that partitioned affinity must obey the following contract: given that node N is primary for some key K , if any other node(s) leave grid and no node joins grid, node N will remain primary for key K . Declaration IEnumerable<IEnumerable<IClusterNode>> AssignPartitions(AffinityFunctionContext context) Parameters Type Name Description AffinityFunctionContext context The affinity function context. Returns Type Description System.Collections.Generic.IEnumerable < System.Collections.Generic.IEnumerable < IClusterNode >> A collection of partitions, where each partition is a collection of nodes, where first node is a primary node, and other nodes are backup nodes. GetPartition(Object) Gets partition number for a given key starting from 0. Partitioned caches should make sure that keys are about evenly distributed across all partitions from 0 to Partitions for best performance. Note that for fully replicated caches it is possible to segment key sets among different grid node groups. In that case each node group should return a unique partition number. However, unlike partitioned cache, mappings of keys to nodes in replicated caches are constant and a node cannot migrate from one partition to another. Declaration int GetPartition(object key) Parameters Type Name Description System.Object key Key to get partition for. Returns Type Description System.Int32 Partition number for a given key. RemoveNode(Guid) Removes node from affinity. This method is called when it is safe to remove disconnected node from affinity mapping. Declaration void RemoveNode(Guid nodeId) Parameters Type Name Description System.Guid nodeId The node identifier."
  },
  "api/Apache.Ignite.Core.Cache.Configuration.CacheAtomicityMode.html": {
    "href": "api/Apache.Ignite.Core.Cache.Configuration.CacheAtomicityMode.html",
    "title": "Enum CacheAtomicityMode | Apache Ignite.NET",
    "keywords": "Enum CacheAtomicityMode Cache atomicity mode. Namespace : Apache.Ignite.Core.Cache.Configuration Assembly : Apache.Ignite.Core.dll Syntax public enum CacheAtomicityMode Fields Name Description Atomic Specifies atomic-only cache behaviour. In this mode distributed transactions and distributed locking are not supported. Disabling transactions and locking allows to achieve much higher performance and throughput ratios. In addition to transactions and locking, one of the main differences to Atomic mode is that bulk writes, such as PutAll(IEnumerable<KeyValuePair<TK, TV>>) and RemoveAll(IEnumerable<TK>) methods, become simple batch operations which can partially fail. In case of partial failure, CachePartialUpdateException will be thrown which will contain a list of keys for which the update failed. It is recommended that bulk writes are used whenever multiple keys need to be inserted or updated in cache, as they reduce number of network trips and provide better performance. Note that even without locking and transactions, Atomic mode still provides full consistency guarantees across all cache nodes. Also note that all data modifications in Atomic mode are guaranteed to be atomic and consistent with writes to the underlying persistent store, if one is configured. Transactional Specifies fully ACID-compliant transactional cache behavior. Note! In this mode, transactional consistency is guaranteed for key-value API operations only. To enable ACID capabilities for SQL transactions, use TRANSACTIONAL_SNAPSHOT mode. Note! This atomicity mode is not compatible with the other atomicity modes within the same transaction. If a transaction is executed over multiple caches, all caches must have the same atomicity mode, either TRANSACTIONAL_SNAPSHOT or TRANSACTIONAL. TransactionalSnapshot Specifies fully ACID-compliant transactional cache behavior for both key-value API and SQL transactions. This atomicity mode enables multiversion concurrency control (MVCC) for the cache. In MVCC-enabled caches, when a transaction updates a row, it creates a new version of that row instead of overwriting it. Other users continue to see the old version of the row until the transaction is committed. In this way, readers and writers do not conflict with each other and always work with a consistent dataset. The old version of data is cleaned up when it's no longer accessed by anyone. With this mode enabled, one node is elected as an MVCC coordinator. This node tracks all in-flight transactions and queries executed in the cluster. Each transaction or query executed over the cache with TRANSACTIONAL_SNAPSHOT mode works with a current snapshot of data generated for this transaction or query by the coordinator. This snapshot ensures that the transaction works with a consistent database state during its execution period. Note! This atomicity mode is not compatible with the other atomicity modes within the same transaction. If a transaction is executed over multiple caches, all caches must have the same atomicity mode, either TRANSACTIONAL_SNAPSHOT or TRANSACTIONAL."
  },
  "api/Apache.Ignite.Core.Cache.Configuration.QueryAlias.html": {
    "href": "api/Apache.Ignite.Core.Cache.Configuration.QueryAlias.html",
    "title": "Class QueryAlias | Apache Ignite.NET",
    "keywords": "Class QueryAlias Represents cache query configuration alias. Inheritance System.Object QueryAlias Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Configuration Assembly : Apache.Ignite.Core.dll Syntax public class QueryAlias Constructors QueryAlias() Initializes a new instance of the QueryAlias class. Declaration public QueryAlias() QueryAlias(String, String) Initializes a new instance of the QueryAlias class. Declaration public QueryAlias(string fullName, string alias) Parameters Type Name Description System.String fullName The full name. System.String alias The alias. Properties Alias Gets or sets the alias for the full name. Declaration public string Alias { get; set; } Property Value Type Description System.String FullName Gets or sets the full name of the query field. Declaration public string FullName { get; set; } Property Value Type Description System.String"
  },
  "api/Apache.Ignite.Core.Cache.Event.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.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.IMutableCacheEntry-2.html": {
    "href": "api/Apache.Ignite.Core.Cache.IMutableCacheEntry-2.html",
    "title": "Interface IMutableCacheEntry<TK, TV> | Apache Ignite.NET",
    "keywords": "Interface IMutableCacheEntry<TK, TV> Mutable representation of ICacheEntry<TK, TV> Inherited Members ICacheEntry<TK, TV>.Key ICacheEntry<TK, TV>.Value Namespace : Apache.Ignite.Core.Cache Assembly : Apache.Ignite.Core.dll Syntax public interface IMutableCacheEntry<out TK, TV> : ICacheEntry<TK, TV> Type Parameters Name Description TK Key type. TV Value type. Properties Exists Gets a value indicating whether cache entry exists in cache. Declaration bool Exists { get; } Property Value Type Description System.Boolean Value Gets, sets or replaces the value associated with the key. If Exists is false and setter is called then a mapping is added to the cache visible once the EntryProcessor completes. After setter invocation Exists will return true. Declaration TV Value { get; set; } Property Value Type Description TV Methods Remove() Removes the entry from the Cache. Declaration void Remove()"
  },
  "api/Apache.Ignite.Core.Cache.IQueryMetrics.html": {
    "href": "api/Apache.Ignite.Core.Cache.IQueryMetrics.html",
    "title": "Interface IQueryMetrics | Apache Ignite.NET",
    "keywords": "Interface IQueryMetrics Cache query metrics used to obtain statistics on query. Namespace : Apache.Ignite.Core.Cache Assembly : Apache.Ignite.Core.dll Syntax public interface IQueryMetrics Properties AverageTime Gets average execution time of query. Declaration double AverageTime { get; } Property Value Type Description System.Double Average execution time of query. Executions Gets total number execution of query. Declaration int Executions { get; } Property Value Type Description System.Int32 Number of executions. Fails Gets total number of times a query execution failed. Declaration int Fails { get; } Property Value Type Description System.Int32 Total number of times a query execution failed. MaximumTime Gets maximum execution time of query. Declaration long MaximumTime { get; } Property Value Type Description System.Int64 Maximum execution time of query. MinimumTime Gets minimum execution time of query. Declaration long MinimumTime { get; } Property Value Type Description System.Int64 Minimum execution time of query."
  },
  "api/Apache.Ignite.Core.Cache.Store.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.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.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.Datastream.DataStreamerDefaults.html": {
    "href": "api/Apache.Ignite.Core.Datastream.DataStreamerDefaults.html",
    "title": "Class DataStreamerDefaults | Apache Ignite.NET",
    "keywords": "Class DataStreamerDefaults Data streamer configuration defaults. Inheritance System.Object DataStreamerDefaults Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Datastream Assembly : Apache.Ignite.Core.dll Syntax public static class DataStreamerDefaults Fields DefaultParallelOperationsMultiplier Default multiplier for parallel operations per node: PerNodeParallelOperations = DataStreamerThreadPoolSize * DefaultParallelOperationsMultiplier . Declaration public const int DefaultParallelOperationsMultiplier = 8 Field Value Type Description System.Int32 DefaultPerNodeBufferSize The default per node buffer size, see PerNodeBufferSize . Declaration public const int DefaultPerNodeBufferSize = 512 Field Value Type Description System.Int32 DefaultPerThreadBufferSize The default per thread buffer size, see PerThreadBufferSize . Declaration public const int DefaultPerThreadBufferSize = 4096 Field Value Type Description System.Int32 DefaultTimeout The default timeout (see Timeout ). Negative value means no timeout. Declaration public static readonly TimeSpan DefaultTimeout Field Value Type Description System.TimeSpan"
  },
  "api/Apache.Ignite.Core.Datastream.IDataStreamer-2.html": {
    "href": "api/Apache.Ignite.Core.Datastream.IDataStreamer-2.html",
    "title": "Interface IDataStreamer<TK, TV> | Apache Ignite.NET",
    "keywords": "Interface IDataStreamer<TK, TV> Data streamer is responsible for loading external data into cache. It achieves it by properly buffering updates and properly mapping keys to nodes responsible for the data to make sure that there is the least amount of data movement possible and optimal network and memory utilization. Note that streamer will load data concurrently by multiple internal threads, so the data may get to remote nodes in different order from which it was added to the streamer. Also note that IDataStreamer is not the only way to load data into cache. Alternatively you can use LoadCache(Action<TK, TV>, Object[]) method to load data from underlying data store. You can also use standard cache put and putAll operations as well, but they most likely will not perform as well as this class for loading data. And finally, data can be loaded from underlying data store on demand, whenever it is accessed - for this no explicit data loading step is needed. IDataStreamer supports the following configuration properties: PerNodeBufferSizeWhen entries are added to data streamer they are not sent to Ignite right away and are buffered internally for better performance and network utilization. This setting controls the size of internal per-node buffer before buffered data is sent to remote node. Default value is 1024. PerThreadBufferSizeWhen entries are added to data streamer they are not sent to Ignite right away and are buffered internally on per thread basis for better performance and network utilization. This setting controls the size of internal per-thread buffer before buffered data is sent to remote node. Default value is 4096. PerNodeParallelOperationsSometimes data may be added to the data streamer faster than it can be put in cache. In this case, new buffered load messages are sent to remote nodes before responses from previous ones are received. This could cause unlimited heap memory utilization growth on local and remote nodes. To control memory utilization, this setting limits maximum allowed number of parallel buffered load messages that are being processed on remote nodes. If this number is exceeded, then data streamer add/remove methods will block to control memory utilization. Default value is 16. AutoFlushFrequencyAutomatic flush frequency in milliseconds. Essentially, this is the time after which the streamer will make an attempt to submit all data added so far to remote nodes. Note that there is no guarantee that data will be delivered after this concrete attempt (e.g., it can fail when topology is changing), but it won't be lost anyway. Disabled by default (default value is 0 ). IsolatedDefines if data streamer will assume that there are no other concurrent updates and allow data streamer choose most optimal concurrent implementation. Default value is false . All members are thread-safe and may be used concurrently from multiple threads. Inherited Members System.IDisposable.Dispose() Namespace : Apache.Ignite.Core.Datastream Assembly : Apache.Ignite.Core.dll Syntax public interface IDataStreamer<TK, TV> : IDisposable Type Parameters Name Description TK TV Properties AllowOverwrite Gets or sets a value indicating whether existing values can be overwritten by the data streamer. Performance is better when this flag is false. NOTE: When false, cache updates won't be propagated to cache store (even if SkipStore is false). Default is false . Declaration bool AllowOverwrite { get; set; } Property Value Type Description System.Boolean AutoFlushFrequency Automatic flush frequency in milliseconds. Essentially, this is the time after which the streamer will make an attempt to submit all data added so far to remote nodes. Note that there is no guarantee that data will be delivered after this concrete attempt (e.g., it can fail when topology is changing), but it won't be lost anyway. If set to 0 , automatic flush is disabled. Default is 0 (disabled). Declaration long AutoFlushFrequency { get; set; } Property Value Type Description System.Int64 CacheName Name of the cache to load data to. Declaration string CacheName { get; } Property Value Type Description System.String PerNodeBufferSize Size of per node key-value pairs buffer. Setter must be called before any add/remove operation. Default is DefaultPerNodeBufferSize . Declaration int PerNodeBufferSize { get; set; } Property Value Type Description System.Int32 PerNodeParallelOperations Maximum number of parallel load operations for a single node. Setter must be called before any add/remove operation. Default is 0, which means Ignite calculates this automatically as DataStreamerThreadPoolSize * DefaultParallelOperationsMultiplier . Declaration int PerNodeParallelOperations { get; set; } Property Value Type Description System.Int32 PerThreadBufferSize Size of per thread key-value pairs buffer. Setter must be called before any add/remove operation. Default is DefaultPerThreadBufferSize . Declaration int PerThreadBufferSize { get; set; } Property Value Type Description System.Int32 Receiver Gets or sets custom stream receiver. Declaration IStreamReceiver<TK, TV> Receiver { get; set; } Property Value Type Description IStreamReceiver <TK, TV> SkipStore Flag indicating that write-through behavior should be disabled for data loading. AllowOverwrite must be true for write-through to work. Default is false . Declaration bool SkipStore { get; set; } Property Value Type Description System.Boolean Task Gets the task for this loading process. This task completes whenever method Close(Boolean) completes. Declaration Task Task { get; } Property Value Type Description System.Threading.Tasks.Task Timeout Gets or sets the timeout. Negative values mean no timeout. Default is DefaultTimeout . Timeout is used in the following cases: Any data addition method can be blocked when all per node parallel operations are exhausted. The timeout defines the max time you will be blocked waiting for a permit to add a chunk of data into the streamer; Total timeout time for Flush() operation; Total timeout time for Close(Boolean) operation. Declaration TimeSpan Timeout { get; set; } Property Value Type Description System.TimeSpan Methods AddData(TK, TV) Adds single key-value pair for loading. Passing null as value will be interpreted as removal. Declaration Task AddData(TK key, TV val) Parameters Type Name Description TK key Key. TV val Value. Returns Type Description System.Threading.Tasks.Task Task for this operation. AddData(ICollection<KeyValuePair<TK, TV>>) Adds collection of key-value pairs for loading. Declaration Task AddData(ICollection<KeyValuePair<TK, TV>> entries) Parameters Type Name Description System.Collections.Generic.ICollection < System.Collections.Generic.KeyValuePair <TK, TV>> entries Entries. Returns Type Description System.Threading.Tasks.Task Task for this operation. AddData(KeyValuePair<TK, TV>) Adds single key-value pair for loading. Passing null as pair's value will be interpreted as removal. Declaration Task AddData(KeyValuePair<TK, TV> pair) Parameters Type Name Description System.Collections.Generic.KeyValuePair <TK, TV> pair Key-value pair. Returns Type Description System.Threading.Tasks.Task Task for this operation. Close(Boolean) Closes this streamer optionally loading any remaining data. Declaration void Close(bool cancel) Parameters Type Name Description System.Boolean cancel Whether to cancel ongoing loading operations. When set to true there is not guarantees what data will be actually loaded to cache. Flush() Loads any remaining data, but doesn't close the streamer. Data can be still added after flush is finished. This method blocks and doesn't allow to add any data until all data is loaded. Declaration void Flush() RemoveData(TK) Adds key for removal. Declaration Task RemoveData(TK key) Parameters Type Name Description TK key Key. Returns Type Description System.Threading.Tasks.Task Task for this operation. TryFlush() Makes an attempt to load remaining data. This method is mostly similar to Flush() with the difference that it won't wait and will exit immediately. Declaration void TryFlush() WithKeepBinary<TK1, TV1>() Gets streamer instance with binary mode enabled, changing key and/or value types if necessary. In binary mode stream receiver gets data in binary format. You can only change key/value types when transitioning from non-binary to binary streamer; Changing type of binary streamer is not allowed and will throw an System.InvalidOperationException Declaration IDataStreamer<TK1, TV1> WithKeepBinary<TK1, TV1>() Returns Type Description IDataStreamer <TK1, TV1> Streamer instance with binary mode enabled. Type Parameters Name Description TK1 Key type in binary mode. TV1 Value type in binary mode."
  },
  "api/Apache.Ignite.Core.Discovery.Tcp.html": {
    "href": "api/Apache.Ignite.Core.Discovery.Tcp.html",
    "title": "Namespace Apache.Ignite.Core.Discovery.Tcp | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Discovery.Tcp Classes TcpDiscoveryIpFinderBase Base IpFinder class. TcpDiscoverySpi TCP discover service provider. Interfaces ITcpDiscoveryIpFinder Represents an IP finder for TcpDiscoverySpi . Only predefined implementations are supported now: TcpDiscoveryStaticIpFinder , TcpDiscoveryMulticastIpFinder ."
  },
  "api/Apache.Ignite.Core.Discovery.html": {
    "href": "api/Apache.Ignite.Core.Discovery.html",
    "title": "Namespace Apache.Ignite.Core.Discovery | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Discovery Interfaces IDiscoverySpi Represents a discovery service provider interface. Only predefined implementation is supported now: TcpDiscoverySpi ."
  },
  "api/Apache.Ignite.Core.Events.IEventListener-1.html": {
    "href": "api/Apache.Ignite.Core.Events.IEventListener-1.html",
    "title": "Interface IEventListener<T> | Apache Ignite.NET",
    "keywords": "Interface IEventListener<T> Represents an event listener. Namespace : Apache.Ignite.Core.Events Assembly : Apache.Ignite.Core.dll Syntax public interface IEventListener<in T> where T : IEvent Type Parameters Name Description T Event type. Methods Invoke(T) Invoked when event occurs. Declaration bool Invoke(T evt) Parameters Type Name Description T evt Event. Returns Type Description System.Boolean Value indicating whether this listener should be kept subscribed. Returning false unsubscribes this listener from future notifications."
  },
  "api/Apache.Ignite.Core.Events.IEvents.html": {
    "href": "api/Apache.Ignite.Core.Events.IEvents.html",
    "title": "Interface IEvents | Apache Ignite.NET",
    "keywords": "Interface IEvents Provides functionality for event notifications on nodes defined by ClusterGroup . All members are thread-safe and may be used concurrently from multiple threads. Namespace : Apache.Ignite.Core.Events Assembly : Apache.Ignite.Core.dll Syntax public interface IEvents Properties ClusterGroup Gets the cluster group to which this instance belongs. Declaration IClusterGroup ClusterGroup { get; } Property Value Type Description IClusterGroup Methods DisableLocal(IEnumerable<Int32>) Disables provided events. Allows to stop recording events that were enabled before. Note that specified events will be disabled regardless of whether local node is in this cluster group or not. Declaration void DisableLocal(IEnumerable<int> types) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Int32 > types Events to disable. DisableLocal(Int32[]) Disables provided events. Allows to stop recording events that were enabled before. Note that specified events will be disabled regardless of whether local node is in this cluster group or not. Declaration void DisableLocal(params int[] types) Parameters Type Name Description System.Int32 [] types Events to disable. EnableLocal(IEnumerable<Int32>) Enables provided events. Allows to start recording events that were disabled before. Note that provided events will be enabled regardless of whether local node is in this cluster group or not. Declaration void EnableLocal(IEnumerable<int> types) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Int32 > types Events to enable. EnableLocal(Int32[]) Enables provided events. Allows to start recording events that were disabled before. Note that provided events will be enabled regardless of whether local node is in this cluster group or not. Declaration void EnableLocal(params int[] types) Parameters Type Name Description System.Int32 [] types Events to enable. GetEnabledEvents() Gets types of enabled events. Declaration ICollection<int> GetEnabledEvents() Returns Type Description System.Collections.Generic.ICollection < System.Int32 > Types of enabled events. IsEnabled(Int32) Determines whether the specified event is enabled. Declaration bool IsEnabled(int type) Parameters Type Name Description System.Int32 type Event type. Returns Type Description System.Boolean Value indicating whether the specified event is enabled. LocalListen<T>(IEventListener<T>, IEnumerable<Int32>) Adds an event listener for local events. Note that listener will be added regardless of whether local node is in this cluster group or not. Declaration void LocalListen<T>(IEventListener<T> listener, IEnumerable<int> types)where T : IEvent Parameters Type Name Description IEventListener <T> listener Predicate that is called on each received event. If predicate returns false, it will be unregistered and will stop receiving events. System.Collections.Generic.IEnumerable < System.Int32 > types Event types for which this listener will be notified, should not be empty. Type Parameters Name Description T Type of events. LocalListen<T>(IEventListener<T>, Int32[]) Adds an event listener for local events. Note that listener will be added regardless of whether local node is in this cluster group or not. Declaration void LocalListen<T>(IEventListener<T> listener, params int[] types)where T : IEvent Parameters Type Name Description IEventListener <T> listener Predicate that is called on each received event. If predicate returns false, it will be unregistered and will stop receiving events. System.Int32 [] types Event types for which this listener will be notified, should not be empty. Type Parameters Name Description T Type of events. LocalQuery(IEnumerable<Int32>) Queries local node for events using of specified types. Declaration ICollection<IEvent> LocalQuery(IEnumerable<int> types) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Int32 > types Event types to be queried. Optional. Returns Type Description System.Collections.Generic.ICollection < IEvent > Collection of Ignite events found on local node. LocalQuery(Int32[]) Queries local node for events using of specified types. Declaration ICollection<IEvent> LocalQuery(params int[] types) Parameters Type Name Description System.Int32 [] types Event types to be queried. Optional. Returns Type Description System.Collections.Generic.ICollection < IEvent > Collection of Ignite events found on local node. RecordLocal(IEvent) Records customer user generated event. All registered local listeners will be notified. NOTE: all types in range from 1 to 1000 are reserved for internal Ignite events and should not be used by user-defined events. Attempt to record internal event with this method will cause System.ArgumentException to be thrown. Declaration void RecordLocal(IEvent evt) Parameters Type Name Description IEvent evt Locally generated event. Exceptions Type Condition System.ArgumentException If event type is within Ignite reserved range (1 to 1000) RemoteQuery<T>(IEventFilter<T>, Nullable<TimeSpan>, IEnumerable<Int32>) Queries nodes in this cluster group for events using passed in predicate filter for event selection. Declaration ICollection<T> RemoteQuery<T>(IEventFilter<T> filter, TimeSpan? timeout = default (TimeSpan? ), IEnumerable<int> types = null)where T : IEvent Parameters Type Name Description IEventFilter <T> filter Predicate filter used to query events on remote nodes. System.Nullable < System.TimeSpan > timeout Maximum time to wait for result, null or 0 to wait forever. System.Collections.Generic.IEnumerable < System.Int32 > types Event types to be queried. Returns Type Description System.Collections.Generic.ICollection <T> Collection of Ignite events returned from specified nodes. Type Parameters Name Description T Type of events. RemoteQuery<T>(IEventFilter<T>, Nullable<TimeSpan>, Int32[]) Queries nodes in this cluster group for events using passed in predicate filter for event selection. Declaration ICollection<T> RemoteQuery<T>(IEventFilter<T> filter, TimeSpan? timeout = default (TimeSpan? ), params int[] types)where T : IEvent Parameters Type Name Description IEventFilter <T> filter Predicate filter used to query events on remote nodes. System.Nullable < System.TimeSpan > timeout Maximum time to wait for result, null or 0 to wait forever. System.Int32 [] types Event types to be queried. Returns Type Description System.Collections.Generic.ICollection <T> Collection of Ignite events returned from specified nodes. Type Parameters Name Description T Type of events. RemoteQueryAsync<T>(IEventFilter<T>, Nullable<TimeSpan>, IEnumerable<Int32>) Queries nodes in this cluster group for events using passed in predicate filter for event selection. Declaration Task<ICollection<T>> RemoteQueryAsync<T>(IEventFilter<T> filter, TimeSpan? timeout = default (TimeSpan? ), IEnumerable<int> types = null)where T : IEvent Parameters Type Name Description IEventFilter <T> filter Predicate filter used to query events on remote nodes. System.Nullable < System.TimeSpan > timeout Maximum time to wait for result, null or 0 to wait forever. System.Collections.Generic.IEnumerable < System.Int32 > types Event types to be queried. Returns Type Description System.Threading.Tasks.Task < System.Collections.Generic.ICollection <T>> Collection of Ignite events returned from specified nodes. Type Parameters Name Description T Type of events. RemoteQueryAsync<T>(IEventFilter<T>, Nullable<TimeSpan>, Int32[]) Queries nodes in this cluster group for events using passed in predicate filter for event selection. Declaration Task<ICollection<T>> RemoteQueryAsync<T>(IEventFilter<T> filter, TimeSpan? timeout = default (TimeSpan? ), params int[] types)where T : IEvent Parameters Type Name Description IEventFilter <T> filter Predicate filter used to query events on remote nodes. System.Nullable < System.TimeSpan > timeout Maximum time to wait for result, null or 0 to wait forever. System.Int32 [] types Event types to be queried. Returns Type Description System.Threading.Tasks.Task < System.Collections.Generic.ICollection <T>> Collection of Ignite events returned from specified nodes. Type Parameters Name Description T Type of events. StopLocalListen<T>(IEventListener<T>, IEnumerable<Int32>) Removes local event listener. Declaration bool StopLocalListen<T>(IEventListener<T> listener, IEnumerable<int> types)where T : IEvent Parameters Type Name Description IEventListener <T> listener Local event listener to remove. System.Collections.Generic.IEnumerable < System.Int32 > types Types of events for which to remove listener. If not specified, then listener will be removed for all types it was registered for. Returns Type Description System.Boolean True if listener was removed, false otherwise. Type Parameters Name Description T Type of events. StopLocalListen<T>(IEventListener<T>, Int32[]) Removes local event listener. Declaration bool StopLocalListen<T>(IEventListener<T> listener, params int[] types)where T : IEvent Parameters Type Name Description IEventListener <T> listener Local event listener to remove. System.Int32 [] types Types of events for which to remove listener. If not specified, then listener will be removed for all types it was registered for. Returns Type Description System.Boolean True if listener was removed, false otherwise. Type Parameters Name Description T Type of events. WaitForLocal(IEnumerable<Int32>) Waits for the specified events. Declaration IEvent WaitForLocal(IEnumerable<int> types) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Int32 > types Types of the events to wait for. If not provided, all events will be passed to the filter. Returns Type Description IEvent Ignite event. WaitForLocal(Int32[]) Waits for the specified events. Declaration IEvent WaitForLocal(params int[] types) Parameters Type Name Description System.Int32 [] types Types of the events to wait for. If not provided, all events will be passed to the filter. Returns Type Description IEvent Ignite event. WaitForLocal<T>(IEventFilter<T>, IEnumerable<Int32>) Waits for the specified events. Declaration T WaitForLocal<T>(IEventFilter<T> filter, IEnumerable<int> types)where T : IEvent Parameters Type Name Description IEventFilter <T> filter Optional filtering predicate. Event wait will end as soon as it returns false. System.Collections.Generic.IEnumerable < System.Int32 > types Types of the events to wait for. If not provided, all events will be passed to the filter. Returns Type Description T Ignite event. Type Parameters Name Description T Type of events. WaitForLocal<T>(IEventFilter<T>, Int32[]) Waits for the specified events. Declaration T WaitForLocal<T>(IEventFilter<T> filter, params int[] types)where T : IEvent Parameters Type Name Description IEventFilter <T> filter Optional filtering predicate. Event wait will end as soon as it returns false. System.Int32 [] types Types of the events to wait for. If not provided, all events will be passed to the filter. Returns Type Description T Ignite event. Type Parameters Name Description T Type of events. WaitForLocalAsync(IEnumerable<Int32>) Waits for the specified events. Declaration Task<IEvent> WaitForLocalAsync(IEnumerable<int> types) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Int32 > types Types of the events to wait for. If not provided, all events will be passed to the filter. Returns Type Description System.Threading.Tasks.Task < IEvent > Ignite event. WaitForLocalAsync(Int32[]) Waits for the specified events. Declaration Task<IEvent> WaitForLocalAsync(params int[] types) Parameters Type Name Description System.Int32 [] types Types of the events to wait for. If not provided, all events will be passed to the filter. Returns Type Description System.Threading.Tasks.Task < IEvent > Ignite event. WaitForLocalAsync<T>(IEventFilter<T>, IEnumerable<Int32>) Waits for the specified events. Declaration Task<T> WaitForLocalAsync<T>(IEventFilter<T> filter, IEnumerable<int> types)where T : IEvent Parameters Type Name Description IEventFilter <T> filter Optional filtering predicate. Event wait will end as soon as it returns false. System.Collections.Generic.IEnumerable < System.Int32 > types Types of the events to wait for. If not provided, all events will be passed to the filter. Returns Type Description System.Threading.Tasks.Task <T> Ignite event. Type Parameters Name Description T Type of events. WaitForLocalAsync<T>(IEventFilter<T>, Int32[]) Waits for the specified events. Declaration Task<T> WaitForLocalAsync<T>(IEventFilter<T> filter, params int[] types)where T : IEvent Parameters Type Name Description IEventFilter <T> filter Optional filtering predicate. Event wait will end as soon as it returns false. System.Int32 [] types Types of the events to wait for. If not provided, all events will be passed to the filter. Returns Type Description System.Threading.Tasks.Task <T> Ignite event. Type Parameters Name Description T Type of events."
  },
  "api/Apache.Ignite.Core.Failure.StopNodeFailureHandler.html": {
    "href": "api/Apache.Ignite.Core.Failure.StopNodeFailureHandler.html",
    "title": "Class StopNodeFailureHandler | Apache Ignite.NET",
    "keywords": "Class StopNodeFailureHandler Handler will stop node in case of critical error. Inheritance System.Object StopNodeFailureHandler Implements IFailureHandler Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Failure Assembly : Apache.Ignite.Core.dll Syntax public class StopNodeFailureHandler : IFailureHandler Implements IFailureHandler"
  },
  "api/Apache.Ignite.Core.Failure.StopNodeOrHaltFailureHandler.html": {
    "href": "api/Apache.Ignite.Core.Failure.StopNodeOrHaltFailureHandler.html",
    "title": "Class StopNodeOrHaltFailureHandler | Apache Ignite.NET",
    "keywords": "Class StopNodeOrHaltFailureHandler Handler will try to stop node if TryStop value is true. If node can't be stopped during provided Timeout or TryStop value is false then JVM process will be terminated forcibly. Inheritance System.Object StopNodeOrHaltFailureHandler Implements IFailureHandler Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Failure Assembly : Apache.Ignite.Core.dll Syntax public class StopNodeOrHaltFailureHandler : IFailureHandler Constructors StopNodeOrHaltFailureHandler() Initialize a new instance of the StopNodeOrHaltFailureHandler Declaration public StopNodeOrHaltFailureHandler() Properties Timeout Stop node timeout. Defaults to 0. Declaration public TimeSpan Timeout { get; set; } Property Value Type Description System.TimeSpan TryStop Try stop flag. Defaults false. Declaration public bool TryStop { get; set; } Property Value Type Description System.Boolean Implements IFailureHandler"
  },
  "api/Apache.Ignite.Core.Lifecycle.LifecycleEventType.html": {
    "href": "api/Apache.Ignite.Core.Lifecycle.LifecycleEventType.html",
    "title": "Enum LifecycleEventType | Apache Ignite.NET",
    "keywords": "Enum LifecycleEventType Ignite lifecycle event types. These events are used to notify lifecycle beans about changes in Ignite lifecycle state. For more information and detailed examples refer to ILifecycleHandler documentation. Namespace : Apache.Ignite.Core.Lifecycle Assembly : Apache.Ignite.Core.dll Syntax public enum LifecycleEventType Fields Name Description AfterNodeStart Invoked after node startup is complete. Node is fully initialized and fully functional. AfterNodeStop Invoked after node had stopped. Node is stopped and cannot be used. BeforeNodeStart Invoked before node startup routine. Node is not initialized and cannot be used. BeforeNodeStop Invoked before node stopping routine. Node is fully functional at this point."
  },
  "api/Apache.Ignite.Core.Lifecycle.html": {
    "href": "api/Apache.Ignite.Core.Lifecycle.html",
    "title": "Namespace Apache.Ignite.Core.Lifecycle | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Lifecycle Classes ClientReconnectEventArgs Contains client reconnect event data. Interfaces ILifecycleHandler Handles lifecycle events defined in LifecycleEventType . Use this interface whenever you need to plug some custom logic before or after Ignite startup and stopping routines. There are four events you can react to: BeforeNodeStartInvoked before Ignite startup routine is initiated. Note that Ignite is not available during this event, therefore if you injected an Ignite instance via InstanceResourceAttribute attribute, you cannot use it yet. AfterNodeStartInvoked right after Ignite has started. At this point, if you injected an Ignite instance via InstanceResourceAttribute attribute, you can start using it. BeforeNodeStopInvoked right before Ignite stop routine is initiated. Ignite is still available at this stage, so if you injected an Ignite instance via InstanceResourceAttribute attribute, you can use it. AfterNodeStopInvoked right after Ignite has stopped. Note that Ignite is not available during this event. Enums LifecycleEventType Ignite lifecycle event types. These events are used to notify lifecycle beans about changes in Ignite lifecycle state. For more information and detailed examples refer to ILifecycleHandler documentation."
  },
  "api/Apache.Ignite.Core.Log.CategoryLogger.html": {
    "href": "api/Apache.Ignite.Core.Log.CategoryLogger.html",
    "title": "Class CategoryLogger | Apache Ignite.NET",
    "keywords": "Class CategoryLogger Wrapping logger with a predefined category. When Log(LogLevel, String, Object[], IFormatProvider, String, String, Exception) method is called, and category parameter is null, predefined category will be used. Inheritance System.Object CategoryLogger Implements ILogger Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Log Assembly : Apache.Ignite.Core.dll Syntax public class CategoryLogger : ILogger Constructors CategoryLogger(ILogger, String) Initializes a new instance of the CategoryLogger class. Declaration public CategoryLogger(ILogger logger, string category) Parameters Type Name Description ILogger logger The logger to wrap. System.String category The category. Methods IsEnabled(LogLevel) Determines whether the specified log level is enabled. Declaration public bool IsEnabled(LogLevel level) Parameters Type Name Description LogLevel level The level. Returns Type Description System.Boolean Value indicating whether the specified log level is enabled Log(LogLevel, String, Object[], IFormatProvider, String, String, Exception) Logs the specified message. Declaration public void Log(LogLevel level, string message, object[] args, IFormatProvider formatProvider, string category, string nativeErrorInfo, Exception ex) Parameters Type Name Description LogLevel level The level. System.String message The message. System.Object [] args The arguments to format message . Can be null (formatting will not occur). System.IFormatProvider formatProvider The format provider. Can be null if args is null. System.String category The logging category name. System.String nativeErrorInfo The native error information. System.Exception ex The exception. Can be null. Implements ILogger Extension Methods LoggerExtensions.Trace(ILogger, String) LoggerExtensions.Trace(ILogger, String, Object[]) LoggerExtensions.Trace(ILogger, Exception, String) LoggerExtensions.Trace(ILogger, Exception, String, Object[]) LoggerExtensions.Debug(ILogger, String) LoggerExtensions.Debug(ILogger, String, Object[]) LoggerExtensions.Debug(ILogger, Exception, String) LoggerExtensions.Debug(ILogger, Exception, String, Object[]) LoggerExtensions.Info(ILogger, String) LoggerExtensions.Info(ILogger, String, Object[]) LoggerExtensions.Info(ILogger, Exception, String) LoggerExtensions.Info(ILogger, Exception, String, Object[]) LoggerExtensions.Warn(ILogger, String) LoggerExtensions.Warn(ILogger, String, Object[]) LoggerExtensions.Warn(ILogger, Exception, String) LoggerExtensions.Warn(ILogger, Exception, String, Object[]) LoggerExtensions.Error(ILogger, String) LoggerExtensions.Error(ILogger, String, Object[]) LoggerExtensions.Error(ILogger, Exception, String) LoggerExtensions.Error(ILogger, Exception, String, Object[]) LoggerExtensions.Log(ILogger, LogLevel, String) LoggerExtensions.Log(ILogger, LogLevel, String, Object[]) LoggerExtensions.Log(ILogger, LogLevel, Exception, String) LoggerExtensions.Log(ILogger, LogLevel, Exception, String, Object[]) LoggerExtensions.GetLogger(ILogger, String)"
  },
  "api/Apache.Ignite.Core.Log.ILogger.html": {
    "href": "api/Apache.Ignite.Core.Log.ILogger.html",
    "title": "Interface ILogger | Apache Ignite.NET",
    "keywords": "Interface ILogger Defines Ignite logging interface. This interface only provides essential log methods. All convenience overloads are in LoggerExtensions . Namespace : Apache.Ignite.Core.Log Assembly : Apache.Ignite.Core.dll Syntax public interface ILogger Methods IsEnabled(LogLevel) Determines whether the specified log level is enabled. Declaration bool IsEnabled(LogLevel level) Parameters Type Name Description LogLevel level The level. Returns Type Description System.Boolean Value indicating whether the specified log level is enabled Log(LogLevel, String, Object[], IFormatProvider, String, String, Exception) Logs the specified message. Declaration void Log(LogLevel level, string message, object[] args, IFormatProvider formatProvider, string category, string nativeErrorInfo, Exception ex) Parameters Type Name Description LogLevel level The level. System.String message The message. System.Object [] args The arguments to format message . Can be null (formatting will not occur). System.IFormatProvider formatProvider The format provider. Can be null if args is null. System.String category The logging category name. System.String nativeErrorInfo The native error information. System.Exception ex The exception. Can be null. Extension Methods LoggerExtensions.Trace(ILogger, String) LoggerExtensions.Trace(ILogger, String, Object[]) LoggerExtensions.Trace(ILogger, Exception, String) LoggerExtensions.Trace(ILogger, Exception, String, Object[]) LoggerExtensions.Debug(ILogger, String) LoggerExtensions.Debug(ILogger, String, Object[]) LoggerExtensions.Debug(ILogger, Exception, String) LoggerExtensions.Debug(ILogger, Exception, String, Object[]) LoggerExtensions.Info(ILogger, String) LoggerExtensions.Info(ILogger, String, Object[]) LoggerExtensions.Info(ILogger, Exception, String) LoggerExtensions.Info(ILogger, Exception, String, Object[]) LoggerExtensions.Warn(ILogger, String) LoggerExtensions.Warn(ILogger, String, Object[]) LoggerExtensions.Warn(ILogger, Exception, String) LoggerExtensions.Warn(ILogger, Exception, String, Object[]) LoggerExtensions.Error(ILogger, String) LoggerExtensions.Error(ILogger, String, Object[]) LoggerExtensions.Error(ILogger, Exception, String) LoggerExtensions.Error(ILogger, Exception, String, Object[]) LoggerExtensions.Log(ILogger, LogLevel, String) LoggerExtensions.Log(ILogger, LogLevel, String, Object[]) LoggerExtensions.Log(ILogger, LogLevel, Exception, String) LoggerExtensions.Log(ILogger, LogLevel, Exception, String, Object[]) LoggerExtensions.GetLogger(ILogger, String)"
  },
  "api/Apache.Ignite.Core.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.Failure.html": {
    "href": "api/Apache.Ignite.Core.Failure.html",
    "title": "Namespace Apache.Ignite.Core.Failure | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Failure Classes NoOpFailureHandler Just ignores any failure. It's useful for tests and debugging. StopNodeFailureHandler Handler will stop node in case of critical error. StopNodeOrHaltFailureHandler Handler will try to stop node if TryStop value is true. If node can't be stopped during provided Timeout or TryStop value is false then JVM process will be terminated forcibly. Interfaces IFailureHandler Failure handler interface. Only predefined implementations are supported: NoOpFailureHandler , StopNodeFailureHandler , StopNodeOrHaltFailureHandler ."
  },
  "api/Apache.Ignite.Core.IDataRegionMetrics.html": {
    "href": "api/Apache.Ignite.Core.IDataRegionMetrics.html",
    "title": "Interface IDataRegionMetrics | Apache Ignite.NET",
    "keywords": "Interface IDataRegionMetrics Memory usage metrics. Namespace : Apache.Ignite.Core Assembly : Apache.Ignite.Core.dll Syntax public interface IDataRegionMetrics Properties AllocationRate Gets the allocation rate, in pages per second. Declaration float AllocationRate { get; } Property Value Type Description System.Single CheckpointBufferPages Gets checkpointing buffer size in pages. Declaration long CheckpointBufferPages { get; } Property Value Type Description System.Int64 CheckpointBufferSize Gets checkpointing buffer size in bytes. Declaration long CheckpointBufferSize { get; } Property Value Type Description System.Int64 DirtyPages Gets the number of dirty RAM pages. Declaration long DirtyPages { get; } Property Value Type Description System.Int64 EvictionRate Gets the eviction rate, in pages per second. Declaration float EvictionRate { get; } Property Value Type Description System.Single LargeEntriesPagesPercentage Gets the percentage of pages fully occupied by entries that are larger than page. Declaration float LargeEntriesPagesPercentage { get; } Property Value Type Description System.Single Name Gets the memory policy name. Declaration string Name { get; } Property Value Type Description System.String PageFillFactor Gets the page fill factor: free space to overall size ratio across all pages. Declaration float PageFillFactor { get; } Property Value Type Description System.Single PageReplaceAge Gets the average age (in milliseconds) for pages being replaced from persistent storage. Declaration float PageReplaceAge { get; } Property Value Type Description System.Single PageReplaceRate Gets the rate (pages per second) at which pages get replaced with other pages from persistent storage. Declaration float PageReplaceRate { get; } Property Value Type Description System.Single PageSize Gets memory page size in bytes. Declaration int PageSize { get; } Property Value Type Description System.Int32 PhysicalMemoryPages Gets the count of pages loaded to RAM. Declaration long PhysicalMemoryPages { get; } Property Value Type Description System.Int64 PhysicalMemorySize Gets the size of pages loaded to RAM in bytes. Declaration long PhysicalMemorySize { get; } Property Value Type Description System.Int64 TotalAllocatedPages Gets the count of allocated pages. Declaration long TotalAllocatedPages { get; } Property Value Type Description System.Int64 TotalAllocatedSize Gets the size of allocated pages in bytes. Declaration long TotalAllocatedSize { get; } Property Value Type Description System.Int64"
  },
  "api/Apache.Ignite.Core.IDataStorageMetrics.html": {
    "href": "api/Apache.Ignite.Core.IDataStorageMetrics.html",
    "title": "Interface IDataStorageMetrics | Apache Ignite.NET",
    "keywords": "Interface IDataStorageMetrics Persistent store metrics. Namespace : Apache.Ignite.Core Assembly : Apache.Ignite.Core.dll Syntax public interface IDataStorageMetrics Properties LastCheckpointCopiedOnWritePagesNumber Gets the number of pages copied to a temporary checkpoint buffer during the last checkpoint. Declaration long LastCheckpointCopiedOnWritePagesNumber { get; } Property Value Type Description System.Int64 LastCheckpointDataPagesNumber Gets the number of data pages written during the last checkpoint. Declaration long LastCheckpointDataPagesNumber { get; } Property Value Type Description System.Int64 LastCheckpointDuration Gets the duration of the last checkpoint. Declaration TimeSpan LastCheckpointDuration { get; } Property Value Type Description System.TimeSpan LastCheckpointFsyncDuration Gets the duration of the sync phase of the last checkpoint. Declaration TimeSpan LastCheckpointFsyncDuration { get; } Property Value Type Description System.TimeSpan LastCheckpointLockWaitDuration Gets the duration of last checkpoint lock wait. Declaration TimeSpan LastCheckpointLockWaitDuration { get; } Property Value Type Description System.TimeSpan LastCheckpointMarkDuration Gets the duration of last checkpoint mark phase. Declaration TimeSpan LastCheckpointMarkDuration { get; } Property Value Type Description System.TimeSpan LastCheckpointPagesWriteDuration Gets the duration of last checkpoint pages write phase. Declaration TimeSpan LastCheckpointPagesWriteDuration { get; } Property Value Type Description System.TimeSpan LastCheckpointTotalPagesNumber Gets the total number of pages written during the last checkpoint. Declaration long LastCheckpointTotalPagesNumber { get; } Property Value Type Description System.Int64 WalArchiveSegments Gets the current number of WAL segments in the WAL archive. Declaration int WalArchiveSegments { get; } Property Value Type Description System.Int32 WalFsyncTimeAverage Gets the average WAL fsync duration in microseconds over the last time interval. Declaration float WalFsyncTimeAverage { get; } Property Value Type Description System.Single WalLoggingRate Gets the average number of WAL records per second written during the last time interval. Declaration float WalLoggingRate { get; } Property Value Type Description System.Single WalWritingRate Gets the average number of bytes per second written during the last time interval. Declaration float WalWritingRate { get; } Property Value Type Description System.Single"
  },
  "api/Apache.Ignite.Core.IgniteConfiguration.html": {
    "href": "api/Apache.Ignite.Core.IgniteConfiguration.html",
    "title": "Class IgniteConfiguration | Apache Ignite.NET",
    "keywords": "Class IgniteConfiguration Grid configuration. Inheritance System.Object IgniteConfiguration Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core Assembly : Apache.Ignite.Core.dll Syntax public class IgniteConfiguration Constructors IgniteConfiguration() Initializes a new instance of the IgniteConfiguration class. Declaration public IgniteConfiguration() IgniteConfiguration(IgniteConfiguration) Initializes a new instance of the IgniteConfiguration class. Declaration public IgniteConfiguration(IgniteConfiguration configuration) Parameters Type Name Description IgniteConfiguration configuration The configuration to copy. Fields DefaultAuthenticationEnabled Default value for AuthenticationEnabled property. Declaration public const bool DefaultAuthenticationEnabled = false Field Value Type Description System.Boolean DefaultClientConnectorConfigurationEnabled Default value for ClientConnectorConfigurationEnabled . Declaration public const bool DefaultClientConnectorConfigurationEnabled = true Field Value Type Description System.Boolean DefaultClientFailureDetectionTimeout Default failure detection timeout. Declaration public static readonly TimeSpan DefaultClientFailureDetectionTimeout Field Value Type Description System.TimeSpan DefaultFailureDetectionTimeout Default failure detection timeout. Declaration public static readonly TimeSpan DefaultFailureDetectionTimeout Field Value Type Description System.TimeSpan DefaultIsActiveOnStart Default value for IsActiveOnStart property. Declaration public const bool DefaultIsActiveOnStart = true Field Value Type Description System.Boolean DefaultIsLateAffinityAssignment Default late affinity assignment mode. Declaration public const bool DefaultIsLateAffinityAssignment = true Field Value Type Description System.Boolean DefaultJvmInitMem Default initial JVM memory in megabytes. Declaration public const int DefaultJvmInitMem = -1 Field Value Type Description System.Int32 DefaultJvmMaxMem Default maximum JVM memory in megabytes. Declaration public const int DefaultJvmMaxMem = -1 Field Value Type Description System.Int32 DefaultLongQueryWarningTimeout Default timeout after which long query warning will be printed. Declaration public static readonly TimeSpan DefaultLongQueryWarningTimeout Field Value Type Description System.TimeSpan DefaultManagementThreadPoolSize Default management thread pool size. Declaration public const int DefaultManagementThreadPoolSize = 4 Field Value Type Description System.Int32 DefaultMetricsExpireTime Default metrics expire time. Declaration public static readonly TimeSpan DefaultMetricsExpireTime Field Value Type Description System.TimeSpan DefaultMetricsHistorySize Default metrics history size. Declaration public const int DefaultMetricsHistorySize = 10000 Field Value Type Description System.Int32 DefaultMetricsLogFrequency Default metrics log frequency. Declaration public static readonly TimeSpan DefaultMetricsLogFrequency Field Value Type Description System.TimeSpan DefaultMetricsUpdateFrequency Default metrics update frequency. Declaration public static readonly TimeSpan DefaultMetricsUpdateFrequency Field Value Type Description System.TimeSpan DefaultMvccVacuumFrequency Default value for MvccVacuumFrequency property. Declaration public const long DefaultMvccVacuumFrequency = 5000L Field Value Type Description System.Int64 DefaultMvccVacuumThreadCount Default value for MvccVacuumThreadCount property. Declaration public const int DefaultMvccVacuumThreadCount = 2 Field Value Type Description System.Int32 DefaultNetworkSendRetryCount Default network retry count. Declaration public const int DefaultNetworkSendRetryCount = 3 Field Value Type Description System.Int32 DefaultNetworkSendRetryDelay Default network retry delay. Declaration public static readonly TimeSpan DefaultNetworkSendRetryDelay Field Value Type Description System.TimeSpan DefaultNetworkTimeout Default network timeout. Declaration public static readonly TimeSpan DefaultNetworkTimeout Field Value Type Description System.TimeSpan DefaultRedirectJavaConsoleOutput Default value for RedirectJavaConsoleOutput property. Declaration public const bool DefaultRedirectJavaConsoleOutput = true Field Value Type Description System.Boolean DefaultThreadPoolSize Default thread pool size. Declaration public static readonly int DefaultThreadPoolSize Field Value Type Description System.Int32 Properties Assemblies List of additional .Net assemblies to load on Ignite start. Each item can be either fully qualified assembly name, path to assembly to DLL or path to a directory when assemblies reside. Declaration public ICollection<string> Assemblies { get; set; } Property Value Type Description System.Collections.Generic.ICollection < System.String > AsyncCallbackThreadPoolSize Gets or sets the size of the asynchronous callback thread pool. Declaration public int AsyncCallbackThreadPoolSize { get; set; } Property Value Type Description System.Int32 AtomicConfiguration Gets or sets the atomic data structures configuration. Declaration public AtomicConfiguration AtomicConfiguration { get; set; } Property Value Type Description AtomicConfiguration AuthenticationEnabled Gets or sets whether user authentication is enabled for the cluster. Default is false . Declaration public bool AuthenticationEnabled { get; set; } Property Value Type Description System.Boolean AutoGenerateIgniteInstanceName Gets or sets a value indicating whether unique IgniteInstanceName should be generated. Set this to true in scenarios where new node should be started regardless of other nodes present within current process. In particular, this setting is useful is ASP.NET and IIS environments, where AppDomains are loaded and unloaded within a single process during application restarts. Ignite stops all nodes on System.AppDomain unload, however, IIS does not wait for previous AppDomain to unload before starting up a new one, which may cause \"Ignite instance with this name has already been started\" errors. This setting solves the issue. Declaration public bool AutoGenerateIgniteInstanceName { get; set; } Property Value Type Description System.Boolean BinaryConfiguration Gets or sets the binary configuration. Declaration public BinaryConfiguration BinaryConfiguration { get; set; } Property Value Type Description BinaryConfiguration The binary configuration. CacheConfiguration Gets or sets the cache configuration. Declaration public ICollection<CacheConfiguration> CacheConfiguration { get; set; } Property Value Type Description System.Collections.Generic.ICollection < CacheConfiguration > The cache configuration. ClientConnectorConfiguration Gets or sets the client connector configuration (for JDBC, ODBC, and thin clients). Declaration public ClientConnectorConfiguration ClientConnectorConfiguration { get; set; } Property Value Type Description ClientConnectorConfiguration ClientConnectorConfigurationEnabled Gets or sets a value indicating whether client connector is enabled: allow thin clients, ODBC and JDBC drivers to work with Ignite (see ClientConnectorConfiguration ). Default is DefaultClientConnectorConfigurationEnabled . Declaration public bool ClientConnectorConfigurationEnabled { get; set; } Property Value Type Description System.Boolean ClientFailureDetectionTimeout Gets or sets the failure detection timeout used by TcpDiscoverySpi and TcpCommunicationSpi for client nodes. Declaration public TimeSpan ClientFailureDetectionTimeout { get; set; } Property Value Type Description System.TimeSpan ClientMode Gets or sets a value indicating whether node should start in client mode. Client node cannot hold data in the caches. Declaration public bool ClientMode { get; set; } Property Value Type Description System.Boolean CommunicationSpi Gets or sets the communication service provider. Null for default communication. Declaration public ICommunicationSpi CommunicationSpi { get; set; } Property Value Type Description ICommunicationSpi ConsistentId Gets or sets consistent globally unique node identifier which survives node restarts. Declaration public object ConsistentId { get; set; } Property Value Type Description System.Object DataStorageConfiguration Gets or sets the data storage configuration. Declaration public DataStorageConfiguration DataStorageConfiguration { get; set; } Property Value Type Description DataStorageConfiguration DataStreamerThreadPoolSize Gets or sets the size of the data streamer thread pool. Declaration public int DataStreamerThreadPoolSize { get; set; } Property Value Type Description System.Int32 DiscoverySpi Gets or sets the discovery service provider. Null for default discovery. Declaration public IDiscoverySpi DiscoverySpi { get; set; } Property Value Type Description IDiscoverySpi EncryptionSpi Gets or sets the encryption service provider. Null for disabled encryption. Declaration public IEncryptionSpi EncryptionSpi { get; set; } Property Value Type Description IEncryptionSpi EventStorageSpi Gets or sets the event storage interface. Only predefined implementations are supported: NoopEventStorageSpi , MemoryEventStorageSpi . Declaration public IEventStorageSpi EventStorageSpi { get; set; } Property Value Type Description IEventStorageSpi FailureDetectionTimeout Gets or sets the failure detection timeout used by TcpDiscoverySpi and TcpCommunicationSpi . Declaration public TimeSpan FailureDetectionTimeout { get; set; } Property Value Type Description System.TimeSpan FailureHandler Gets or sets predefined failure handlers implementation. A failure handler handles critical failures of Ignite instance accordingly: NoOpFailureHandler -- do nothing. StopNodeFailureHandler -- stop node. StopNodeOrHaltFailureHandler -- try to stop node if tryStop value is true. If node can't be stopped during provided timeout or tryStop value is false then JVM process will be terminated forcibly. Only these implementations are supported: NoOpFailureHandler , StopNodeOrHaltFailureHandler , StopNodeFailureHandler . Declaration public IFailureHandler FailureHandler { get; set; } Property Value Type Description IFailureHandler GridName Gets or sets optional local instance name. This name only works locally and has no effect on topology. This property is used to when there are multiple Ignite nodes in one process to distinguish them. Declaration [Obsolete(\"Use IgniteInstanceName instead.\")] public string GridName { get; set; } Property Value Type Description System.String IgniteHome Path to Ignite home. If not set environment variable IGNITE_HOME will be used. Declaration public string IgniteHome { get; set; } Property Value Type Description System.String IgniteInstanceName Gets or sets optional local instance name. This name only works locally and has no effect on topology. This property is used to when there are multiple Ignite nodes in one process to distinguish them. Declaration public string IgniteInstanceName { get; set; } Property Value Type Description System.String IncludedEventTypes Gets or sets a set of event types ( EventType ) to be recorded by Ignite. Declaration public ICollection<int> IncludedEventTypes { get; set; } Property Value Type Description System.Collections.Generic.ICollection < System.Int32 > IsActiveOnStart Gets or sets a value indicating whether grid should be active on start. See also IsActive() and SetActive(Boolean) . This property is ignored when DataStorageConfiguration is present: cluster is always inactive on start when Ignite Persistence is enabled. Declaration public bool IsActiveOnStart { get; set; } Property Value Type Description System.Boolean IsDaemon Gets or sets a value indicating whether this node should be a daemon node. Daemon nodes are the usual grid nodes that participate in topology but not visible on the main APIs, i.e. they are not part of any cluster groups. Daemon nodes are used primarily for management and monitoring functionality that is built on Ignite and needs to participate in the topology, but also needs to be excluded from the \"normal\" topology, so that it won't participate in the task execution or in-memory data grid storage. Declaration public bool IsDaemon { get; set; } Property Value Type Description System.Boolean IsLateAffinityAssignment Gets or sets a value indicating whether late affinity assignment mode should be used. On each topology change, for each started cache, partition-to-node mapping is calculated using AffinityFunction for cache. When late affinity assignment mode is disabled then new affinity mapping is applied immediately. With late affinity assignment mode, if primary node was changed for some partition, but data for this partition is not rebalanced yet on this node, then current primary is not changed and new primary is temporary assigned as backup. This nodes becomes primary only when rebalancing for all assigned primary partitions is finished. This mode can show better performance for cache operations, since when cache primary node executes some operation and data is not rebalanced yet, then it sends additional message to force rebalancing from other nodes. Note, that ICacheAffinity interface provides assignment information taking late assignment into account, so while rebalancing for new primary nodes is not finished it can return assignment which differs from assignment calculated by AffinityFunction. This property should have the same value for all nodes in cluster. If not provided, default value is DefaultIsLateAffinityAssignment . Declaration [Obsolete(\"No longer supported, always true.\")] public bool IsLateAffinityAssignment { get; set; } Property Value Type Description System.Boolean JvmClasspath Classpath used by JVM on Ignite start. Declaration public string JvmClasspath { get; set; } Property Value Type Description System.String JvmDllPath Path to jvm.dll (libjvm.so on Linux, libjvm.dylib on Mac) file. If not set, it's location will be determined using JAVA_HOME environment variable. If path is neither set nor determined automatically, an exception will be thrown. Declaration public string JvmDllPath { get; set; } Property Value Type Description System.String JvmInitialMemoryMb Initial amount of memory in megabytes given to JVM. Maps to -Xms Java option. -1 maps to JVM defaults. Defaults to DefaultJvmInitMem . Declaration public int JvmInitialMemoryMb { get; set; } Property Value Type Description System.Int32 JvmMaxMemoryMb Maximum amount of memory in megabytes given to JVM. Maps to -Xmx Java option. -1 maps to JVM defaults. Defaults to DefaultJvmMaxMem . Declaration public int JvmMaxMemoryMb { get; set; } Property Value Type Description System.Int32 JvmOptions Collection of options passed to JVM on Ignite start. Declaration public ICollection<string> JvmOptions { get; set; } Property Value Type Description System.Collections.Generic.ICollection < System.String > LifecycleHandlers Lifecycle handlers. Declaration public ICollection<ILifecycleHandler> LifecycleHandlers { get; set; } Property Value Type Description System.Collections.Generic.ICollection < ILifecycleHandler > LocalEventListeners Gets or sets pre-configured local event listeners. This is similar to calling LocalListen<T>(IEventListener<T>, Int32[]) , but important difference is that some events occur during startup and can be only received this way. Declaration public ICollection<LocalEventListener> LocalEventListeners { get; set; } Property Value Type Description System.Collections.Generic.ICollection < LocalEventListener > Localhost Gets or sets system-wide local address or host for all Ignite components to bind to. If provided it will override all default local bind settings within Ignite. If null then Ignite tries to use local wildcard address.That means that all services will be available on all network interfaces of the host machine. It is strongly recommended to set this parameter for all production environments. Declaration public string Localhost { get; set; } Property Value Type Description System.String Logger Gets or sets the logger. If no logger is set, logging is delegated to Java, which uses the logger defined in Spring XML (if present) or logs to console otherwise. Declaration public ILogger Logger { get; set; } Property Value Type Description ILogger LongQueryWarningTimeout Gets or sets the timeout after which long query warning will be printed. Declaration public TimeSpan LongQueryWarningTimeout { get; set; } Property Value Type Description System.TimeSpan ManagementThreadPoolSize Gets or sets the size of the management thread pool, which processes internal Ignite jobs. Declaration public int ManagementThreadPoolSize { get; set; } Property Value Type Description System.Int32 MemoryConfiguration Gets or sets the page memory configuration. MemoryConfiguration for more details. Obsolete, use DataStorageConfiguration . Declaration [Obsolete(\"Use DataStorageConfiguration.\")] public MemoryConfiguration MemoryConfiguration { get; set; } Property Value Type Description MemoryConfiguration MetricsExpireTime Gets or sets the time after which a certain metric value is considered expired. Declaration public TimeSpan MetricsExpireTime { get; set; } Property Value Type Description System.TimeSpan MetricsHistorySize Gets or sets the number of metrics kept in history to compute totals and averages. Declaration public int MetricsHistorySize { get; set; } Property Value Type Description System.Int32 MetricsLogFrequency Gets or sets the frequency of metrics log print out. System.TimeSpan.Zero to disable metrics print out. Declaration public TimeSpan MetricsLogFrequency { get; set; } Property Value Type Description System.TimeSpan MetricsUpdateFrequency Gets or sets the job metrics update frequency. System.TimeSpan.Zero to update metrics on job start/finish. Negative value to never update metrics. Declaration public TimeSpan MetricsUpdateFrequency { get; set; } Property Value Type Description System.TimeSpan MvccVacuumFrequency Time interval between MVCC vacuum runs in milliseconds. Declaration public long MvccVacuumFrequency { get; set; } Property Value Type Description System.Int64 MvccVacuumThreadCount Number of MVCC vacuum threads. Declaration public int MvccVacuumThreadCount { get; set; } Property Value Type Description System.Int32 NetworkSendRetryCount Gets or sets the network send retry count. Declaration public int NetworkSendRetryCount { get; set; } Property Value Type Description System.Int32 NetworkSendRetryDelay Gets or sets the network send retry delay. Declaration public TimeSpan NetworkSendRetryDelay { get; set; } Property Value Type Description System.TimeSpan NetworkTimeout Gets or sets the network timeout. Declaration public TimeSpan NetworkTimeout { get; set; } Property Value Type Description System.TimeSpan PeerAssemblyLoadingMode Gets or sets a value indicating how user assemblies should be loaded on remote nodes. For example, when executing Call<TRes>(IComputeFunc<TRes>) , the assembly with corresponding IComputeFunc<TRes> should be loaded on remote nodes. With this option enabled, Ignite will attempt to send the assembly to remote nodes and load it there automatically. Default is Disabled . Peer loading is enabled for ICompute functionality. Declaration public PeerAssemblyLoadingMode PeerAssemblyLoadingMode { get; set; } Property Value Type Description PeerAssemblyLoadingMode PersistentStoreConfiguration Gets or sets the persistent store configuration. Obsolete, use DataStorageConfiguration . Declaration [Obsolete(\"Use DataStorageConfiguration.\")] public PersistentStoreConfiguration PersistentStoreConfiguration { get; set; } Property Value Type Description PersistentStoreConfiguration PluginConfigurations Gets or sets the configurations for plugins to be started. Declaration public ICollection<IPluginConfiguration> PluginConfigurations { get; set; } Property Value Type Description System.Collections.Generic.ICollection < IPluginConfiguration > PublicThreadPoolSize Gets or sets the size of the public thread pool, which processes compute jobs and user messages. Declaration public int PublicThreadPoolSize { get; set; } Property Value Type Description System.Int32 QueryThreadPoolSize Gets or sets the size of the query thread pool. Declaration public int QueryThreadPoolSize { get; set; } Property Value Type Description System.Int32 RedirectJavaConsoleOutput Gets or sets a value indicating whether Java console output should be redirected to System.Console.Out and System.Console.Error , respectively. Default is DefaultRedirectJavaConsoleOutput . Java code outputs valuable information to console. However, since that is Java console, it is not possible to capture that output with standard .NET APIs ( System.Console.SetOut(System.IO.TextWriter) ). As a result, many tools (IDEs, test runners) are not able to display Ignite console output in UI. This property is enabled by default and redirects Java console output to standard .NET console. It is recommended to disable this in production. Declaration public bool RedirectJavaConsoleOutput { get; set; } Property Value Type Description System.Boolean ServiceThreadPoolSize Gets or sets the size of the service thread pool, which processes Ignite services. Declaration public int ServiceThreadPoolSize { get; set; } Property Value Type Description System.Int32 SpringConfigUrl URL to Spring configuration file. Spring configuration is loaded first, then IgniteConfiguration properties are applied. Null property values do not override Spring values. Value-typed properties are tracked internally: if setter was not called, Spring value won't be overwritten. This merging happens on the top level only; e. g. if there are cache configurations defined in Spring and in .NET, .NET caches will overwrite Spring caches. Declaration public string SpringConfigUrl { get; set; } Property Value Type Description System.String SqlConnectorConfiguration Gets or sets the SQL connector configuration (for JDBC and ODBC). Declaration [Obsolete(\"Use ClientConnectorConfiguration instead.\")] public SqlConnectorConfiguration SqlConnectorConfiguration { get; set; } Property Value Type Description SqlConnectorConfiguration SqlSchemas Gets or sets SQL schemas to be created on node startup. Schemas are created on local node only and are not propagated. to other cluster nodes. Created schemas cannot be dropped. By default schema names are case-insensitive. Use quotes to enforce case sensitivity. Declaration public ICollection<string> SqlSchemas { get; set; } Property Value Type Description System.Collections.Generic.ICollection < System.String > SslContextFactory Gets or sets the SSL context factory that will be used for creating a secure socket layer b/w nodes. Default is null (no SSL). Declaration public ISslContextFactory SslContextFactory { get; set; } Property Value Type Description ISslContextFactory StripedThreadPoolSize Gets or sets the size of the striped thread pool, which processes cache requests. Declaration public int StripedThreadPoolSize { get; set; } Property Value Type Description System.Int32 SuppressWarnings Whether to suppress warnings. Declaration public bool SuppressWarnings { get; set; } Property Value Type Description System.Boolean SystemThreadPoolSize Gets or sets the size of the system thread pool, which processes internal system messages. Declaration public int SystemThreadPoolSize { get; set; } Property Value Type Description System.Int32 SystemWorkerBlockedTimeout Gets or sets the timeout for blocked system workers detection. Declaration public TimeSpan? SystemWorkerBlockedTimeout { get; set; } Property Value Type Description System.Nullable < System.TimeSpan > TransactionConfiguration Gets or sets the transaction configuration. Declaration public TransactionConfiguration TransactionConfiguration { get; set; } Property Value Type Description TransactionConfiguration UserAttributes Gets or sets the user attributes for this node. These attributes can be retrieved later via Attributes . Environment variables are added to node attributes automatically. NOTE: attribute names starting with \"org.apache.ignite\" are reserved for internal use. Declaration public IDictionary<string, object> UserAttributes { get; set; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.Object > UtilityCacheThreadPoolSize Gets or sets the size of the utility cache thread pool. Declaration public int UtilityCacheThreadPoolSize { get; set; } Property Value Type Description System.Int32 WorkDirectory Gets or sets the work directory. If not provided, a folder under IgniteHome will be used. Declaration public string WorkDirectory { get; set; } Property Value Type Description System.String Methods FromXml(String) Deserializes IgniteConfiguration from the XML string. Declaration public static IgniteConfiguration FromXml(string xml) Parameters Type Name Description System.String xml Xml string. Returns Type Description IgniteConfiguration Deserialized instance. FromXml(XmlReader) Deserializes IgniteConfiguration from the XML reader. Declaration public static IgniteConfiguration FromXml(XmlReader reader) Parameters Type Name Description System.Xml.XmlReader reader The reader. Returns Type Description IgniteConfiguration Deserialized instance. ToXml() Serializes this instance to an XML string. Declaration public string ToXml() Returns Type Description System.String ToXml(XmlWriter, String) Serializes this instance to the specified XML writer. Declaration public void ToXml(XmlWriter writer, string rootElementName) Parameters Type Name Description System.Xml.XmlWriter writer The writer. System.String rootElementName Name of the root element."
  },
  "api/Apache.Ignite.Core.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.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.Core.Transactions.TransactionState.html": {
    "href": "api/Apache.Ignite.Core.Transactions.TransactionState.html",
    "title": "Enum TransactionState | Apache Ignite.NET",
    "keywords": "Enum TransactionState Cache transaction state. Namespace : Apache.Ignite.Core.Transactions Assembly : Apache.Ignite.Core.dll Syntax public enum TransactionState Fields Name Description Active Transaction started. Committed Transaction commit succeeded. Committing Transaction commit started (validating finished). MarkedRollback Transaction is marked for rollback. Prepared Transaction validation succeeded. Preparing Transaction validating. RolledBack Transaction rollback succeeded. RollingBack Transaction rollback started (validation failed). Unknown Transaction rollback failed or is otherwise unknown state."
  },
  "api/Apache.Ignite.Core.Transactions.TransactionTimeoutException.html": {
    "href": "api/Apache.Ignite.Core.Transactions.TransactionTimeoutException.html",
    "title": "Class TransactionTimeoutException | Apache Ignite.NET",
    "keywords": "Class TransactionTimeoutException Exception thrown whenever Ignite transactions time out. Inheritance System.Object System.Exception IgniteException TransactionTimeoutException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Transactions Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class TransactionTimeoutException : IgniteException, ISerializable, _Exception Constructors TransactionTimeoutException() Initializes a new instance of the TransactionTimeoutException class. Declaration public TransactionTimeoutException() TransactionTimeoutException(SerializationInfo, StreamingContext) Initializes a new instance of the TransactionTimeoutException class. Declaration protected TransactionTimeoutException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. TransactionTimeoutException(String) Initializes a new instance of the TransactionTimeoutException class. Declaration public TransactionTimeoutException(string message) Parameters Type Name Description System.String message The message that describes the error. TransactionTimeoutException(String, Exception) Initializes a new instance of the TransactionTimeoutException class. Declaration public TransactionTimeoutException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Transactions.html": {
    "href": "api/Apache.Ignite.Core.Transactions.html",
    "title": "Namespace Apache.Ignite.Core.Transactions | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Transactions Classes TransactionConfiguration Transactions configuration. TransactionDeadlockException Indicates a deadlock within Ignite transaction. This exception can be thrown from any cache method that modifies or reads data within a transaction with timeout (see TxStart(TransactionConcurrency, TransactionIsolation, TimeSpan, Int32) overload). TransactionHeuristicException Exception thrown whenever Ignite transaction enters an unknown state. This exception is usually thrown whenever commit partially succeeds. Cache will still resolve this situation automatically to ensure data integrity, by invalidating all values participating in this transaction on remote nodes. TransactionOptimisticException Exception thrown whenever Ignite transactions fail optimistically. TransactionRollbackException Exception thrown whenever Ignite transactions has been automatically rolled back. TransactionTimeoutException Exception thrown whenever Ignite transactions time out. Interfaces ITransaction Grid cache transaction. Cache transactions support the following isolation levels: ReadCommitted isolation level means that always a committed value will be provided for read operations. With this isolation level values are always read from cache global memory or persistent store every time a value is accessed. In other words, if the same key is accessed more than once within the same transaction, it may have different value every time since global cache memory may be updated concurrently by other threads. RepeatableRead isolation level means that if a value was read once within transaction, then all consecutive reads will provide the same in-transaction value. With this isolation level accessed values are stored within in-transaction memory, so consecutive access to the same key within the same transaction will always return the value that was previously read or updated within this transaction. If concurrency is Pessimistic , then a lock on the key will be acquired prior to accessing the value. Serializable isolation level means that all transactions occur in a completely isolated fashion, as if all transactions in the system had executed serially, one after the other. Read access with this level happens the same way as with RepeatableRead level. However, in Optimistic mode, if some transactions cannot be serially isolated from each other, then one winner will be picked and the other transactions in conflict will result in TransactionOptimisticException being thrown on Java side. Cache transactions support the following concurrency models: Optimistic - in this mode all cache operations are not distributed to other nodes until Commit() . In this mode one PREPARE message will be sent to participating cache nodes to start acquiring per-transaction locks, and once all nodes reply OK (i.e. Phase 1 completes successfully), a one-way COMMIT message is sent without waiting for reply. If it is necessary to know whenever remote nodes have committed as well, synchronous commit or synchronous rollback should be enabled via CacheConfiguration.setWriteSynchronizationMode . Note that in this mode, optimistic failures are only possible in conjunction with Serializable isolation level. In all other cases, optimistic transactions will never fail optimistically and will always be identically ordered on all participating Ignite nodes. Pessimistic - in this mode a lock is acquired on all cache operations with exception of read operations in ReadCommitted mode. All optional filters passed into cache operations will be evaluated after successful lock acquisition. Whenever Commit() is called, a single one-way COMMIT message is sent to participating cache nodes without waiting for reply. Note that there is no reason for distributed PREPARE step, as all locks have been already acquired. Just like with optimistic mode, it is possible to configure synchronous commit or rollback and wait till transaction commits on all participating remote nodes. In addition to standard CacheAtomicityMode.TRANSACTIONAL behavior, Ignite also supports a lighter CacheAtomicityMode.ATOMIC mode as well. In this mode distributed transactions and distributed locking are not supported. Disabling transactions and locking allows to achieve much higher performance and throughput ratios. It is recommended that CacheAtomicityMode.TRANSACTIONAL mode is used whenever full ACID -compliant transactions are not needed. You can use cache transactions as follows: ICacheTx tx = cache.TxStart(); try { int v1 = cache<string, int>.Get(\"k1\"); // Check if v1 satisfies some condition before doing a put. if (v1 > 0) cache.Put<string, int>(\"k1\", 2); cache.Removex(\"k2); // Commit the transaction. tx.Commit(); } finally { tx.Dispose(); } ITransactionCollection Disposable readonly collection of ITransaction ITransactionMetrics Transaction metrics, shared across all caches. ITransactions Transactions facade. All members are thread-safe and may be used concurrently from multiple threads. Enums TransactionConcurrency Transaction concurrency control. See ITransaction for more information on transaction concurrency controls. TransactionIsolation Defines different cache transaction isolation levels. See ITransaction documentation for more information about cache transaction isolation levels. TransactionState Cache transaction state."
  },
  "api/Apache.Ignite.AspNet.IgniteWebUtils.html": {
    "href": "api/Apache.Ignite.AspNet.IgniteWebUtils.html",
    "title": "Class IgniteWebUtils | Apache Ignite.NET",
    "keywords": "Class IgniteWebUtils Ignite web utilities. Inheritance System.Object IgniteWebUtils Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.AspNet Assembly : Apache.Ignite.AspNet.dll Syntax public static class IgniteWebUtils Methods GetWebIgniteHome() Gets the Ignite home directory from default location in web deployment (application_root\\bin). Ignite can not detect home directory in a standard way because IIS uses temporary folders for dlls. Declaration public static string GetWebIgniteHome() Returns Type Description System.String"
  },
  "api/Apache.Ignite.Core.Binary.IBinary.html": {
    "href": "api/Apache.Ignite.Core.Binary.IBinary.html",
    "title": "Interface IBinary | Apache Ignite.NET",
    "keywords": "Interface IBinary Defines binary objects functionality. With binary objects you are able to: Seamlessly interoperate between Java, .NET, and C++. Make any object binary with zero code change to your existing code. Nest binary objects within each other. Automatically handle circular or null references. Automatically convert collections and maps between Java, .NET, and C++. Optionally avoid deserialization of objects on the server side. Avoid need to have concrete class definitions on the server side. Dynamically change structure of the classes without having to restart the cluster. Index into binary objects for querying purposes. Namespace : Apache.Ignite.Core.Binary Assembly : Apache.Ignite.Core.dll Syntax public interface IBinary Methods BuildEnum(String, Int32) Converts enum to a binary form. Declaration IBinaryObject BuildEnum(string typeName, int value) Parameters Type Name Description System.String typeName Enum type name. System.Int32 value Enum int value. Returns Type Description IBinaryObject Binary representation of the specified enum value. BuildEnum(String, String) Converts enum to a binary form. Declaration IBinaryObject BuildEnum(string typeName, string valueName) Parameters Type Name Description System.String typeName Enum type name. System.String valueName Enum value name. Returns Type Description IBinaryObject Binary representation of the specified enum value. BuildEnum(Type, Int32) Converts enum to a binary form. Declaration IBinaryObject BuildEnum(Type type, int value) Parameters Type Name Description System.Type type Enum type. System.Int32 value Enum int value. Returns Type Description IBinaryObject Binary representation of the specified enum value. BuildEnum(Type, String) Converts enum to a binary form. Declaration IBinaryObject BuildEnum(Type type, string valueName) Parameters Type Name Description System.Type type Enum type. System.String valueName Enum value name. Returns Type Description IBinaryObject Binary representation of the specified enum value. GetBinaryType(Int32) Gets metadata for specified type id. Declaration IBinaryType GetBinaryType(int typeId) Parameters Type Name Description System.Int32 typeId Returns Type Description IBinaryType Metadata. GetBinaryType(String) Gets metadata for specified type name. Declaration IBinaryType GetBinaryType(string typeName) Parameters Type Name Description System.String typeName Returns Type Description IBinaryType Metadata. GetBinaryType(Type) Gets metadata for specified type. Declaration IBinaryType GetBinaryType(Type type) Parameters Type Name Description System.Type type Returns Type Description IBinaryType Metadata. GetBinaryTypes() Gets metadata for all known types. Declaration ICollection<IBinaryType> GetBinaryTypes() Returns Type Description System.Collections.Generic.ICollection < IBinaryType > Metadata. GetBuilder(IBinaryObject) Create builder over existing binary object. Declaration IBinaryObjectBuilder GetBuilder(IBinaryObject obj) Parameters Type Name Description IBinaryObject obj Returns Type Description IBinaryObjectBuilder Builder. GetBuilder(String) Create builder for the given binary object type name. Declaration IBinaryObjectBuilder GetBuilder(string typeName) Parameters Type Name Description System.String typeName Type name. Returns Type Description IBinaryObjectBuilder Builder. GetBuilder(Type) Create builder for the given binary object type. Note that this type must be specified in BinaryConfiguration . Declaration IBinaryObjectBuilder GetBuilder(Type type) Parameters Type Name Description System.Type type Returns Type Description IBinaryObjectBuilder Builder. GetTypeId(String) Gets type id for the given type name. Declaration int GetTypeId(string typeName) Parameters Type Name Description System.String typeName Type name. Returns Type Description System.Int32 Type id. RegisterEnum(String, IEnumerable<KeyValuePair<String, Int32>>) Registers enum type. Declaration IBinaryType RegisterEnum(string typeName, IEnumerable<KeyValuePair<string, int>> values) Parameters Type Name Description System.String typeName Name of the type. System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair < System.String , System.Int32 >> values Mapping of enum value names to int values. Returns Type Description IBinaryType Binary type for registered enum. ToBinary<T>(Object) Converts provided object to binary form. Note that object's type needs to be configured in BinaryConfiguration . Declaration T ToBinary<T>(object obj) Parameters Type Name Description System.Object obj Object to convert. Returns Type Description T Converted object. Type Parameters Name Description T"
  },
  "api/Apache.Ignite.Core.Binary.IBinaryObjectBuilder.html": {
    "href": "api/Apache.Ignite.Core.Binary.IBinaryObjectBuilder.html",
    "title": "Interface IBinaryObjectBuilder | Apache Ignite.NET",
    "keywords": "Interface IBinaryObjectBuilder binary object builder. Provides ability to build binary objects dynamically without having class definitions. Note that type ID is required in order to build binary object. Usually it is enough to provide a simple type name and Ignite will generate the type ID automatically. Namespace : Apache.Ignite.Core.Binary Assembly : Apache.Ignite.Core.dll Syntax public interface IBinaryObjectBuilder Methods Build() Build the object. Declaration IBinaryObject Build() Returns Type Description IBinaryObject Resulting binary object. GetField<T>(String) Get object field value. If value is another binary object, then builder for this object will be returned. If value is a container for other objects (array, ICollection, IDictionary), then container will be returned with primitive types in deserialized form and binary objects as builders. Any change in builder or collection returned through this method will be reflected in the resulting binary object after build. Declaration T GetField<T>(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description T Field value. Type Parameters Name Description T RemoveField(String) Remove object field. Declaration IBinaryObjectBuilder RemoveField(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description IBinaryObjectBuilder Current builder instance. SetArrayField<T>(String, T[]) Sets the array field. Declaration IBinaryObjectBuilder SetArrayField<T>(string fieldName, T[] val) Parameters Type Name Description System.String fieldName Name of the field. T[] val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. Type Parameters Name Description T SetBooleanArrayField(String, Boolean[]) Sets the boolean array field. Declaration IBinaryObjectBuilder SetBooleanArrayField(string fieldName, bool[] val) Parameters Type Name Description System.String fieldName Name of the field. System.Boolean [] val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetBooleanField(String, Boolean) Sets the boolean field. Declaration IBinaryObjectBuilder SetBooleanField(string fieldName, bool val) Parameters Type Name Description System.String fieldName Name of the field. System.Boolean val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetByteArrayField(String, Byte[]) Sets the byte array field. Declaration IBinaryObjectBuilder SetByteArrayField(string fieldName, byte[] val) Parameters Type Name Description System.String fieldName Name of the field. System.Byte [] val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetByteField(String, Byte) Sets the byte field. Declaration IBinaryObjectBuilder SetByteField(string fieldName, byte val) Parameters Type Name Description System.String fieldName Name of the field. System.Byte val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetCharArrayField(String, Char[]) Sets the char array field. Declaration IBinaryObjectBuilder SetCharArrayField(string fieldName, char[] val) Parameters Type Name Description System.String fieldName Name of the field. System.Char [] val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetCharField(String, Char) Sets the char field. Declaration IBinaryObjectBuilder SetCharField(string fieldName, char val) Parameters Type Name Description System.String fieldName Name of the field. System.Char val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetCollectionField(String, ICollection) Sets the collection field. Declaration IBinaryObjectBuilder SetCollectionField(string fieldName, ICollection val) Parameters Type Name Description System.String fieldName Name of the field. System.Collections.ICollection val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetDecimalArrayField(String, Nullable<Decimal>[]) Sets the decimal array field. Declaration IBinaryObjectBuilder SetDecimalArrayField(string fieldName, decimal ? [] val) Parameters Type Name Description System.String fieldName Name of the field. System.Nullable < System.Decimal >[] val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetDecimalField(String, Nullable<Decimal>) Sets the decimal field. Declaration IBinaryObjectBuilder SetDecimalField(string fieldName, decimal ? val) Parameters Type Name Description System.String fieldName Name of the field. System.Nullable < System.Decimal > val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetDictionaryField(String, IDictionary) Sets the dictionary field. Declaration IBinaryObjectBuilder SetDictionaryField(string fieldName, IDictionary val) Parameters Type Name Description System.String fieldName Name of the field. System.Collections.IDictionary val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetDoubleArrayField(String, Double[]) Sets the double array field. Declaration IBinaryObjectBuilder SetDoubleArrayField(string fieldName, double[] val) Parameters Type Name Description System.String fieldName Name of the field. System.Double [] val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetDoubleField(String, Double) Sets the double field. Declaration IBinaryObjectBuilder SetDoubleField(string fieldName, double val) Parameters Type Name Description System.String fieldName Name of the field. System.Double val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. SetEnumArrayField<T>(String, T[]) Sets the enum array field. Declaration IBinaryObjectBuilder SetEnumArrayField<T>(string fieldName, T[] val) Parameters Type Name Description System.String fieldName Name of the field. T[] val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. Type Parameters Name Description T SetEnumField<T>(String, T) Sets the enum field. Declaration IBinaryObjectBuilder SetEnumField<T>(string fieldName, T val) Parameters Type Name Description System.String fieldName Name of the field. T val The value. Returns Type Description IBinaryObjectBuilder Current builder instance. Type Parameters Name Description T SetField<T>(String, T) Set object field value. Value can be of any type including other IBinaryObject and other builders. 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.AffinityKey.html": {
    "href": "api/Apache.Ignite.Core.Cache.Affinity.AffinityKey.html",
    "title": "Struct AffinityKey | Apache Ignite.NET",
    "keywords": "Struct AffinityKey Optional wrapper for cache keys to provide support for custom affinity mapping. The value returned by Affinity will be used for key-to-node affinity. Implements System.IEquatable < AffinityKey > Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() Namespace : Apache.Ignite.Core.Cache.Affinity Assembly : Apache.Ignite.Core.dll Syntax public struct AffinityKey : IEquatable<AffinityKey>, IBinaryWriteAware Constructors AffinityKey(Object) Initializes a new instance of the AffinityKey struct. Declaration public AffinityKey(object key) Parameters Type Name Description System.Object key The key. AffinityKey(Object, Object) Initializes a new instance of the AffinityKey struct. Declaration public AffinityKey(object key, object affinity) Parameters Type Name Description System.Object key The key. System.Object affinity The affinity key. Properties Affinity Gets the affinity key. Declaration public object Affinity { get; } Property Value Type Description System.Object Key Gets the key. Declaration public object Key { get; } Property Value Type Description System.Object Methods Equals(AffinityKey) Indicates whether the current object is equal to another object of the same type. Declaration public bool Equals(AffinityKey other) Parameters Type Name Description AffinityKey other An object to compare with this object. Returns Type Description System.Boolean true if the current object is equal to the other parameter; otherwise, false. Equals(Object) Determines whether the specified System.Object , is equal to this instance. Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj The System.Object to compare with this instance. Returns Type Description System.Boolean true if the specified System.Object is equal to this instance; otherwise, false . Overrides System.ValueType.Equals(System.Object) GetHashCode() Returns a hash code for this instance. Declaration public override int GetHashCode() Returns Type Description System.Int32 A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Overrides System.ValueType.GetHashCode() ToString() Returns a System.String that represents this instance. Declaration public override string ToString() Returns Type Description System.String A System.String that represents this instance. Overrides System.ValueType.ToString() WriteBinary(IBinaryWriter) Writes this object to the given writer. Declaration public void WriteBinary(IBinaryWriter writer) Parameters Type Name Description IBinaryWriter writer Writer. Operators Equality(AffinityKey, AffinityKey) Implements the operator ==. Declaration public static bool operator ==(AffinityKey left, AffinityKey right) Parameters Type Name Description AffinityKey left The left. AffinityKey right The right. Returns Type Description System.Boolean The result of the operator. Inequality(AffinityKey, AffinityKey) Implements the operator !=. Declaration public static bool operator !=(AffinityKey left, AffinityKey right) Parameters Type Name Description AffinityKey left The left. AffinityKey right The right. Returns Type Description System.Boolean The result of the operator. Implements System.IEquatable<T>"
  },
  "api/Apache.Ignite.Core.Cache.Affinity.html": {
    "href": "api/Apache.Ignite.Core.Cache.Affinity.html",
    "title": "Namespace Apache.Ignite.Core.Cache.Affinity | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Cache.Affinity Classes AffinityFunctionBase Base class for predefined affinity functions. AffinityFunctionContext Affinity function context. AffinityKeyMappedAttribute Specifies cache key field to be used to determine a node on which given cache key will be stored. Only one field or property can be marked with this attribute. This attribute is an alternative to AffinityKeyFieldName setting. This attribute has lower priority than AffinityKeyFieldName setting. One of the major use cases for this attribute is the routing of grid computations to the nodes where the data for this computation is cached, the concept otherwise known as Colocation Of Computations And Data. For example, if a Person object is always accessed together with a Company object for which this person is an employee, then for better performance and scalability it makes sense to colocate Person objects together with their Company object when storing them in cache. To achieve that, cache key used to cache Person objects should have a field or property marked with AffinityKeyMappedAttribute attribute, which will provide the value of the company key for which that person works. Structs AffinityKey Optional wrapper for cache keys to provide support for custom affinity mapping. The value returned by Affinity will be used for key-to-node affinity. AffinityTopologyVersion Affinity topology version. Interfaces IAffinityFunction Represents a function that maps cache keys to cluster nodes. Predefined implementations: RendezvousAffinityFunction ."
  },
  "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.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.QueryEntity.html": {
    "href": "api/Apache.Ignite.Core.Cache.Configuration.QueryEntity.html",
    "title": "Class QueryEntity | Apache Ignite.NET",
    "keywords": "Class QueryEntity Query entity is a description of cache entry (composed of key and value) in a way of how it must be indexed and can be queried. Inheritance System.Object QueryEntity Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Configuration Assembly : Apache.Ignite.Core.dll Syntax public sealed class QueryEntity : IQueryEntityInternal, IBinaryRawWriteAwareEx, IBinaryRawWriteAwareEx<IBinaryRawWriter> Constructors QueryEntity() Initializes a new instance of the QueryEntity class. Declaration public QueryEntity() QueryEntity(Type) Initializes a new instance of the QueryEntity class. Declaration public QueryEntity(Type valueType) Parameters Type Name Description System.Type valueType Type of the cache entry value. QueryEntity(Type, Type) Initializes a new instance of the QueryEntity class. Declaration public QueryEntity(Type keyType, Type valueType) Parameters Type Name Description System.Type keyType Type of the key. System.Type valueType Type of the value. Properties Aliases Gets or sets field name aliases: mapping from full name in dot notation to an alias that will be used as SQL column name. Example: {\"parent.name\" -> \"parentName\"}. Declaration public ICollection<QueryAlias> Aliases { get; set; } Property Value Type Description System.Collections.Generic.ICollection < QueryAlias > Fields Gets or sets query fields, a map from field name to Java type name. The order of fields defines the order of columns returned by the 'select *' queries. Declaration public ICollection<QueryField> Fields { get; set; } Property Value Type Description System.Collections.Generic.ICollection < QueryField > Indexes Gets or sets the query indexes. Declaration public ICollection<QueryIndex> Indexes { get; set; } Property Value Type Description System.Collections.Generic.ICollection < QueryIndex > KeyFieldName Gets or sets the name of the field that is used to denote the entire key. By default, entite key can be accessed with a special \"_key\" field name. Declaration public string KeyFieldName { get; set; } Property Value Type Description System.String KeyType Gets or sets the type of the key. This is a shortcut for KeyTypeName . Getter will return null for non-primitive types. Setting this property will overwrite Fields and Indexes according to QuerySqlFieldAttribute , if any. Declaration public Type KeyType { get; set; } Property Value Type Description System.Type KeyTypeName Gets or sets key Java type name. Declaration public string KeyTypeName { get; set; } Property Value Type Description System.String TableName Gets or sets the name of the SQL table. When not set, value type name is used. Declaration public string TableName { get; set; } Property Value Type Description System.String ValueFieldName Gets or sets the name of the field that is used to denote the entire value. By default, entite value can be accessed with a special \"_val\" field name. Declaration public string ValueFieldName { get; set; } Property Value Type Description System.String ValueType Gets or sets the type of the value. This is a shortcut for ValueTypeName . Getter will return null for non-primitive types. Setting this property will overwrite Fields and Indexes according to QuerySqlFieldAttribute , if any. Declaration public Type ValueType { get; set; } Property Value Type Description System.Type ValueTypeName Gets or sets value Java type name. Declaration public string ValueTypeName { get; set; } Property Value Type Description System.String"
  },
  "api/Apache.Ignite.Core.Cache.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.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.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.Cluster.ClusterTopologyException.html": {
    "href": "api/Apache.Ignite.Core.Cluster.ClusterTopologyException.html",
    "title": "Class ClusterTopologyException | Apache Ignite.NET",
    "keywords": "Class ClusterTopologyException Indicates an error with grid topology (e.g., crashed node, etc.) Inheritance System.Object System.Exception IgniteException ClusterTopologyException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cluster Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class ClusterTopologyException : IgniteException, ISerializable, _Exception Constructors ClusterTopologyException() Initializes a new instance of the ClusterTopologyException class. Declaration public ClusterTopologyException() ClusterTopologyException(SerializationInfo, StreamingContext) Initializes a new instance of the ClusterTopologyException class. Declaration protected ClusterTopologyException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization info. System.Runtime.Serialization.StreamingContext ctx Streaming context. ClusterTopologyException(String) Initializes a new instance of the ClusterTopologyException class. Declaration public ClusterTopologyException(string msg) Parameters Type Name Description System.String msg Exception message. ClusterTopologyException(String, Exception) Initializes a new instance of the ClusterTopologyException class. Declaration public ClusterTopologyException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Cluster.IBaselineNode.html": {
    "href": "api/Apache.Ignite.Core.Cluster.IBaselineNode.html",
    "title": "Interface IBaselineNode | Apache Ignite.NET",
    "keywords": "Interface IBaselineNode Baseline topology node (see GetBaselineTopology() ). Namespace : Apache.Ignite.Core.Cluster Assembly : Apache.Ignite.Core.dll Syntax public interface IBaselineNode Properties Attributes Gets all node attributes. Attributes are assigned to nodes at startup. Declaration IDictionary<string, object> Attributes { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.Object > ConsistentId Gets the consistent ID from ConsistentId . Declaration object ConsistentId { get; } Property Value Type Description System.Object"
  },
  "api/Apache.Ignite.Core.Communication.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.IComputeTask-3.html": {
    "href": "api/Apache.Ignite.Core.Compute.IComputeTask-3.html",
    "title": "Interface IComputeTask<TArg, TJobRes, TRes> | Apache Ignite.NET",
    "keywords": "Interface IComputeTask<TArg, TJobRes, TRes> Ignite task interface defines a task that can be executed on the grid. Ignite task is responsible for splitting business logic into multiple Ignite jobs, receiving results from individual Ignite jobs executing on remote nodes, and reducing (aggregating) received jobs' results into final Ignite task result. Upon request to execute a task, the system will do the following: Inject annotated resources into task instance. Apply Map(IList<IClusterNode>, TArg) . This method is responsible for splitting business logic into multiple jobs (units of execution) and mapping them to Ignite nodes. System will send mapped Ignite jobs to their respective nodes. Once job execution results become available, OnResult(IComputeJobResult<TJobRes>, IList<IComputeJobResult<TJobRes>>) method will be called for ech received job result. The policy returned by this method will determine the way task reacts to every job result. If Wait is returned, task will continue to wait for other job results. If this result is the last job result, then reduce phase will be started. If Reduce is returned, reduce phase will be started right away without waiting for other jobs completion (all remaining jobs will receive cancel request). If Failover is returned, job will be failed over to another node for execution. Note that if you use ComputeTaskAdapter<TArg, TJobRes, TTaskRes> , it will automatically fail jobs to another node for 2 well-known failure cases: 1) job has failed to due to node crash (in this case Exception will return ClusterTopologyException ); 2) job execution was rejected, i.e. remote node has cancelled job before it got a chance to execute, while it still was on the waiting list. (in this case Exception will return ComputeExecutionRejectedException ). Once all results are received or OnResult(IComputeJobResult<TJobRes>, IList<IComputeJobResult<TJobRes>>) method returned Reduce policy, method Reduce(IList<IComputeJobResult<TJobRes>>) is called to aggregate received results into one final result. Once this method is finished the execution of the Ignite task is complete. This result will be returned to the user through future. Namespace : Apache.Ignite.Core.Compute Assembly : Apache.Ignite.Core.dll Syntax public interface IComputeTask<in TArg, TJobRes, out TRes> Type Parameters Name Description TArg Argument type. TJobRes Type of job result. TRes Type of final task result after reduce. Methods Map(IList<IClusterNode>, TArg) This method is called to map or split Ignite task into multiple Ignite jobs. This is the first method that gets called when task execution starts. Declaration IDictionary<IComputeJob<TJobRes>, IClusterNode> Map(IList<IClusterNode> subgrid, TArg arg) Parameters Type Name Description System.Collections.Generic.IList < IClusterNode > subgrid Nodes available for this task execution. Note that order of nodes is guaranteed to be randomized by container. This ensures that every time you simply iterate through Ignite nodes, the order of nodes will be random which over time should result into all nodes being used equally. TArg arg Task execution argument. Can be null . This is the same argument as the one passed into ICompute.Execute() methods. Returns Type Description System.Collections.Generic.IDictionary < IComputeJob <TJobRes>, IClusterNode > Map of Ignite jobs assigned to subgrid node. If null or empty map is returned, exception will be thrown. OnResult(IComputeJobResult<TJobRes>, IList<IComputeJobResult<TJobRes>>) Asynchronous callback invoked every time a result from remote execution is received. It is ultimately upto this method to return a policy based on which the system will either wait for more results, reduce results received so far, or failover this job to another node. See ComputeJobResultPolicy for more information. Declaration ComputeJobResultPolicy OnResult(IComputeJobResult<TJobRes> res, IList<IComputeJobResult<TJobRes>> rcvd) Parameters Type Name Description IComputeJobResult <TJobRes> res Received remote Ignite executable result. System.Collections.Generic.IList < IComputeJobResult <TJobRes>> rcvd All previously received results. Note that if task class has ComputeTaskNoResultCacheAttribute attribute, then this list will be empty. Returns Type Description ComputeJobResultPolicy Result policy that dictates how to process further upcoming job results. Reduce(IList<IComputeJobResult<TJobRes>>) Reduces (or aggregates) results received so far into one compound result to be returned to caller via future. Note, that if some jobs did not succeed and could not be failed over then the list of results passed into this method will include the failed results. Otherwise, failed results will not be in the list. Declaration TRes Reduce(IList<IComputeJobResult<TJobRes>> results) Parameters Type Name Description System.Collections.Generic.IList < IComputeJobResult <TJobRes>> results Received job results. Note that if task class has ComputeTaskNoResultCacheAttribute attribute, then this list will be empty. Returns Type Description TRes Task result constructed from results of remote executions."
  },
  "api/Apache.Ignite.Core.Compute.html": {
    "href": "api/Apache.Ignite.Core.Compute.html",
    "title": "Namespace Apache.Ignite.Core.Compute | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Compute Classes ComputeExecutionRejectedException Indicates a situation when execution service provided by the user in configuration rejects execution. ComputeJobAdapter<T> Convenience adapter for IComputeJob<TRes> implementations. It provides the following functionality: Default implementation of Cancel() method and ability to check whether cancellation occurred with IsCancelled() method. Ability to set and get job arguments via SetArguments(Object[]) and GetArgument<TArg>(Int32) methods. ComputeJobFailoverException This runtime exception can be thrown from Execute() method to force job failover to another node within task topology. IComputeFunc<TArg, TRes> or IComputeFunc<TRes> passed into any of the ICompute methods can also throw this exception to force failover. ComputeTaskAdapter<TArg, TJobRes, TTaskRes> Convenience adapter for IComputeTask<TArg, TJobRes, TRes> interface ComputeTaskCancelledException This exception indicates that Ignite task was cancelled. ComputeTaskNoResultCacheAttribute This attribute disables caching of task results when attached to IComputeTask<TArg, TJobRes, TRes> instance. Use it when number of jobs within task grows too big, or jobs themselves are too large to keep in memory throughout task execution. By default all results are cached and passed into OnResult(IComputeJobResult<TJobRes>, IList<IComputeJobResult<TJobRes>>) and Reduce(IList<IComputeJobResult<TJobRes>>) methods. When this attribute is attached to a task class, then this list of job results will always be empty. ComputeTaskSplitAdapter<TArg, TJobRes, TTaskRes> This class defines simplified adapter for IComputeTask<TArg, TJobRes, TRes> . This adapter can be used when jobs can be randomly assigned to available Ignite nodes. This adapter is sufficient in most homogeneous environments where all nodes are equally suitable for executing grid job, see Split(Int32, TArg) method for more details. ComputeTaskTimeoutException Indicates that task execution timed out. ComputeUserUndeclaredException This exception is thrown when user's code throws undeclared runtime exception. By user core it is assumed the code in Ignite task, Ignite job or SPI. In most cases it should be an indication of unrecoverable error condition such as assertion, out of memory error, etc. Interfaces ICompute Defines Ignite functionality for executing tasks and closures over nodes in the IClusterGroup . Instance of ICompute is obtained from grid projection using GetCompute() method. Note that if attempt is made to execute a computation over an empty projection (i.e. projection that does not have any alive nodes), ClusterGroupEmptyException will be thrown out of result task. Ignite must select a node for a computation to be executed. The node will be selected based on the underlying GridLoadBalancingSpi , which by default sequentially picks next available node from grid projection. Other load balancing policies, such as random or adaptive , can be configured as well by selecting different load balancing SPI in Ignite configuration. If your logic requires some custom load balancing behavior, consider implementing ComputeTask in Java directly. Ignite guarantees that as long as there is at least one Ignite node standing, every job will be executed. Jobs will automatically failover to another node if a remote node crashed or has rejected execution due to lack of resources. By default, in case of failover, next load balanced node will be picked for job execution. Also jobs will never be re-routed to the nodes they have failed on. This behavior can be changed by configuring any of the existing or a custom FailoverSpi in Ignite configuration. All members are thread-safe and may be used concurrently from multiple threads. IComputeAction Defines a void function having no arguments. IComputeFunc<TRes> Defines function having no arguments. IComputeFunc<TArg, TRes> Defines function having a single argument. IComputeJob<TRes> Defines executable unit for IComputeTask<TArg, TJobRes, TRes> . Ignite task gets split into jobs when Map(IList<IClusterNode>, TArg) method is called. This method returns all jobs for the task mapped to their corresponding Ignite nodes for execution. Grid will then serialize this jobs and send them to requested nodes for execution. Once job execution is complete, the return value will be sent back to parent task and will be passed into OnResult(IComputeJobResult<TJobRes>, IList<IComputeJobResult<TJobRes>>) method via IComputeJobResult<TRes> instance. Ignite job implementation can be injected with IIgnite using InstanceResourceAttribute attribute. IComputeJobResult<TRes> Job execution result which gets passed to OnResult(IComputeJobResult<TJobRes>, IList<IComputeJobResult<TJobRes>>) method. IComputeReducer<TRes, TReduceRes> Compute reducer which is capable of result collecting and reducing. IComputeTask<TJobRes, TReduceRes> IComputeTask without an argument. IComputeTask<TArg, TJobRes, TRes> Ignite task interface defines a task that can be executed on the grid. Ignite task is responsible for splitting business logic into multiple Ignite jobs, receiving results from individual Ignite jobs executing on remote nodes, and reducing (aggregating) received jobs' results into final Ignite task result. Upon request to execute a task, the system will do the following: Inject annotated resources into task instance. Apply Map(IList<IClusterNode>, TArg) . This method is responsible for splitting business logic into multiple jobs (units of execution) and mapping them to Ignite nodes. System will send mapped Ignite jobs to their respective nodes. Once job execution results become available, OnResult(IComputeJobResult<TJobRes>, IList<IComputeJobResult<TJobRes>>) method will be called for ech received job result. The policy returned by this method will determine the way task reacts to every job result. If Wait is returned, task will continue to wait for other job results. If this result is the last job result, then reduce phase will be started. If Reduce is returned, reduce phase will be started right away without waiting for other jobs completion (all remaining jobs will receive cancel request). If Failover is returned, job will be failed over to another node for execution. Note that if you use ComputeTaskAdapter<TArg, TJobRes, TTaskRes> , it will automatically fail jobs to another node for 2 well-known failure cases: 1) job has failed to due to node crash (in this case Exception will return ClusterTopologyException ); 2) job execution was rejected, i.e. remote node has cancelled job before it got a chance to execute, while it still was on the waiting list. (in this case Exception will return ComputeExecutionRejectedException ). Once all results are received or OnResult(IComputeJobResult<TJobRes>, IList<IComputeJobResult<TJobRes>>) method returned Reduce policy, method Reduce(IList<IComputeJobResult<TJobRes>>) is called to aggregate received results into one final result. Once this method is finished the execution of the Ignite task is complete. This result will be returned to the user through future. Enums ComputeJobResultPolicy This enumeration provides different types of actions following the last received job result. See OnResult(IComputeJobResult<TJobRes>, IList<IComputeJobResult<TJobRes>>) for more details."
  },
  "api/Apache.Ignite.Core.DataStructures.IAtomicLong.html": {
    "href": "api/Apache.Ignite.Core.DataStructures.IAtomicLong.html",
    "title": "Interface IAtomicLong | Apache Ignite.NET",
    "keywords": "Interface IAtomicLong Represents a distributed atomic long value. Namespace : Apache.Ignite.Core.DataStructures Assembly : Apache.Ignite.Core.dll Syntax public interface IAtomicLong Properties Name Gets the name of this atomic long. Declaration string Name { get; } Property Value Type Description System.String Name of this atomic long. Methods Add(Int64) Adds specified value to the current value and returns result. Declaration long Add(long value) Parameters Type Name Description System.Int64 value The value to add. Returns Type Description System.Int64 Current value of the atomic long. Close() Closes this instance. Declaration void Close() CompareExchange(Int64, Int64) Compares current value with specified value for equality and, if they are equal, replaces current value. Declaration long CompareExchange(long value, long comparand) Parameters Type Name Description System.Int64 value The value to set. System.Int64 comparand The value that is compared to the current value. Returns Type Description System.Int64 Original value of the atomic long. Decrement() Decrements current value and returns result. Declaration long Decrement() Returns Type Description System.Int64 Current value of the atomic long. Exchange(Int64) Sets current value to a specified value and returns the original value. Declaration long Exchange(long value) Parameters Type Name Description System.Int64 value The value to set. Returns Type Description System.Int64 Original value of the atomic long. Increment() Increments current value and returns result. Declaration long Increment() Returns Type Description System.Int64 Current value of the atomic long. IsClosed() Determines whether this instance was removed from cache. Declaration bool IsClosed() Returns Type Description System.Boolean True if this atomic was removed from cache; otherwise, false. Read() Returns current value. Declaration long Read() Returns Type Description System.Int64 Current value of the atomic long."
  },
  "api/Apache.Ignite.Core.DataStructures.IAtomicReference-1.html": {
    "href": "api/Apache.Ignite.Core.DataStructures.IAtomicReference-1.html",
    "title": "Interface IAtomicReference<T> | Apache Ignite.NET",
    "keywords": "Interface IAtomicReference<T> Represents a named value in the distributed cache. Namespace : Apache.Ignite.Core.DataStructures Assembly : Apache.Ignite.Core.dll Syntax public interface IAtomicReference<T> Type Parameters Name Description T Properties IsClosed Determines whether this instance was removed from cache. Declaration bool IsClosed { get; } Property Value Type Description System.Boolean True if this atomic was removed from cache; otherwise, false. Name Gets the name of this atomic reference. Declaration string Name { get; } Property Value Type Description System.String Name of this atomic reference. Methods Close() Closes this instance. Declaration void Close() CompareExchange(T, T) Compares current value with specified value for equality and, if they are equal, replaces current value. Declaration T CompareExchange(T value, T comparand) Parameters Type Name Description T value The value to set. T comparand The value that is compared to the current value. Returns Type Description T Original value of the atomic reference. Read() Reads current value of an atomic reference. Declaration T Read() Returns Type Description T Current value of an atomic reference. Write(T) Writes current value of an atomic reference. Declaration void Write(T value) Parameters Type Name Description T value The value to set."
  },
  "api/Apache.Ignite.Core.Events.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.Lifecycle.ClientReconnectEventArgs.html": {
    "href": "api/Apache.Ignite.Core.Lifecycle.ClientReconnectEventArgs.html",
    "title": "Class ClientReconnectEventArgs | Apache Ignite.NET",
    "keywords": "Class ClientReconnectEventArgs Contains client reconnect event data. Inheritance System.Object System.EventArgs ClientReconnectEventArgs Inherited Members System.EventArgs.Empty System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Lifecycle Assembly : Apache.Ignite.Core.dll Syntax public class ClientReconnectEventArgs : EventArgs Constructors ClientReconnectEventArgs(Boolean) Initializes a new instance of the ClientReconnectEventArgs class. Declaration public ClientReconnectEventArgs(bool hasClusterRestarted) Parameters Type Name Description System.Boolean hasClusterRestarted Cluster restarted flag. Properties HasClusterRestarted Gets a value indicating whether this cluster has been restarted during reconnect. Declaration public bool HasClusterRestarted { get; } Property Value Type Description System.Boolean"
  },
  "api/Apache.Ignite.Core.Lifecycle.ILifecycleHandler.html": {
    "href": "api/Apache.Ignite.Core.Lifecycle.ILifecycleHandler.html",
    "title": "Interface ILifecycleHandler | Apache Ignite.NET",
    "keywords": "Interface ILifecycleHandler Handles lifecycle events defined in LifecycleEventType . Use this interface whenever you need to plug some custom logic before or after Ignite startup and stopping routines. There are four events you can react to: BeforeNodeStartInvoked before Ignite startup routine is initiated. Note that Ignite is not available during this event, therefore if you injected an Ignite instance via InstanceResourceAttribute attribute, you cannot use it yet. AfterNodeStartInvoked right after Ignite has started. At this point, if you injected an Ignite instance via InstanceResourceAttribute attribute, you can start using it. BeforeNodeStopInvoked right before Ignite stop routine is initiated. Ignite is still available at this stage, so if you injected an Ignite instance via InstanceResourceAttribute attribute, you can use it. AfterNodeStopInvoked right after Ignite has stopped. Note that Ignite is not available during this event. Namespace : Apache.Ignite.Core.Lifecycle Assembly : Apache.Ignite.Core.dll Syntax public interface ILifecycleHandler Methods OnLifecycleEvent(LifecycleEventType) This method is called when lifecycle event occurs. Declaration void OnLifecycleEvent(LifecycleEventType evt) Parameters Type Name Description LifecycleEventType evt Lifecycle event."
  },
  "api/Apache.Ignite.Core.Services.IServiceContext.html": {
    "href": "api/Apache.Ignite.Core.Services.IServiceContext.html",
    "title": "Interface IServiceContext | Apache Ignite.NET",
    "keywords": "Interface IServiceContext Represents service execution context. Namespace : Apache.Ignite.Core.Services Assembly : Apache.Ignite.Core.dll Syntax public interface IServiceContext Properties AffinityKey Gets affinity key used for key-to-node affinity calculation. This parameter is optional and is set only when key-affinity service was deployed. Declaration object AffinityKey { get; } Property Value Type Description System.Object Affinity key, possibly null. CacheName Gets cache name used for key-to-node affinity calculation. This parameter is optional and is set only when key-affinity service was deployed. Declaration string CacheName { get; } Property Value Type Description System.String Cache name, possibly null. ExecutionId Gets service execution ID. Execution ID is guaranteed to be unique across all service deployments. Declaration Guid ExecutionId { get; } Property Value Type Description System.Guid Service execution ID. IsCancelled Get flag indicating whether service has been cancelled or not. Declaration bool IsCancelled { get; } Property Value Type Description System.Boolean Flag indicating whether service has been cancelled or not. Name Gets service name. Declaration string Name { get; } Property Value Type Description System.String Service name."
  },
  "api/Apache.Ignite.Core.Services.IServiceDescriptor.html": {
    "href": "api/Apache.Ignite.Core.Services.IServiceDescriptor.html",
    "title": "Interface IServiceDescriptor | Apache Ignite.NET",
    "keywords": "Interface IServiceDescriptor Service deployment descriptor. Namespace : Apache.Ignite.Core.Services Assembly : Apache.Ignite.Core.dll Syntax public interface IServiceDescriptor Properties AffinityKey Gets affinity key used for key-to-node affinity calculation. This parameter is optional and is set only when key-affinity service was deployed. Declaration object AffinityKey { get; } Property Value Type Description System.Object Affinity key, possibly null. CacheName Gets cache name used for key-to-node affinity calculation. This parameter is optional and is set only when key-affinity service was deployed. Declaration string CacheName { get; } Property Value Type Description System.String Cache name, possibly null. MaxPerNodeCount Gets maximum allowed number of deployed services on each node, 0 for unlimited. Declaration int MaxPerNodeCount { get; } Property Value Type Description System.Int32 Maximum allowed total number of deployed services on each node, 0 for unlimited. Name Gets service name. Declaration string Name { get; } Property Value Type Description System.String Service name. OriginNodeId Gets affinity key used for key-to-node affinity calculation. This parameter is optional and is set only when key-affinity service was deployed. Declaration Guid OriginNodeId { get; } Property Value Type Description System.Guid Affinity key, possibly null. TopologySnapshot Gets service deployment topology snapshot. Service topology snapshot is represented by number of service instances deployed on a node mapped to node ID. Declaration IDictionary<Guid, int> TopologySnapshot { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.Guid , System.Int32 > Map of number of service instances per node ID. TotalCount Gets maximum allowed total number of deployed services in the grid, 0 for unlimited. Declaration int TotalCount { get; } Property Value Type Description System.Int32 Maximum allowed total number of deployed services in the grid, 0 for unlimited. Type Gets the service type. Declaration Type Type { get; } Property Value Type Description System.Type Service type."
  },
  "api/Apache.Ignite.Core.Services.IServices.html": {
    "href": "api/Apache.Ignite.Core.Services.IServices.html",
    "title": "Interface IServices | Apache Ignite.NET",
    "keywords": "Interface IServices Defines functionality to deploy distributed services in the Ignite. Namespace : Apache.Ignite.Core.Services Assembly : Apache.Ignite.Core.dll Syntax public interface IServices Properties ClusterGroup Gets the cluster group to which this instance belongs. Declaration IClusterGroup ClusterGroup { get; } Property Value Type Description IClusterGroup The cluster group to which this instance belongs. Methods Cancel(String) Cancels service deployment. If a service with specified name was deployed on the grid, then Cancel(IServiceContext) method will be called on it. Note that Ignite cannot guarantee that the service exits from Execute(IServiceContext) method whenever Cancel(IServiceContext) is called. It is up to the user to make sure that the service code properly reacts to cancellations. Declaration void Cancel(string name) Parameters Type Name Description System.String name Name of the service to cancel. CancelAll() Cancels all deployed services. Note that depending on user logic, it may still take extra time for a service to finish execution, even after it was cancelled. Declaration void CancelAll() CancelAllAsync() Cancels all deployed services. Note that depending on user logic, it may still take extra time for a service to finish execution, even after it was cancelled. Declaration Task CancelAllAsync() Returns Type Description System.Threading.Tasks.Task CancelAsync(String) Cancels service deployment. If a service with specified name was deployed on the grid, then Cancel(IServiceContext) method will be called on it. Note that Ignite cannot guarantee that the service exits from Execute(IServiceContext) method whenever Cancel(IServiceContext) is called. It is up to the user to make sure that the service code properly reacts to cancellations. Declaration Task CancelAsync(string name) Parameters Type Name Description System.String name Name of the service to cancel. Returns Type Description System.Threading.Tasks.Task Deploy(ServiceConfiguration) Deploys instances of the service in the Ignite according to provided configuration. Declaration void Deploy(ServiceConfiguration configuration) Parameters Type Name Description ServiceConfiguration configuration Service configuration. DeployAll(IEnumerable<ServiceConfiguration>) Deploys multiple services described by provided configurations. Depending on specified parameters, multiple instances of the same service may be deployed. Whenever topology changes, Ignite will automatically rebalance the deployed services within cluster to make sure that each node will end up with about equal number of deployed instances whenever possible. If deployment of some of the provided services fails, then ServiceDeploymentException containing a list of failed service configurations ( FailedConfigurations ) will be thrown. It is guaranteed that all services that were provided to this method and are not present in the list of failed services are successfully deployed by the moment of the exception being thrown. Note that if exception is thrown, then partial deployment may have occurred. Declaration void DeployAll(IEnumerable<ServiceConfiguration> configurations) Parameters Type Name Description System.Collections.Generic.IEnumerable < ServiceConfiguration > configurations Collection of service configurations to be deployed. DeployAllAsync(IEnumerable<ServiceConfiguration>) Asynchronously deploys multiple services described by provided configurations. Depending on specified parameters, multiple instances of the same service may be deployed ( ServiceConfiguration ). Whenever topology changes, Ignite will automatically rebalance the deployed services within cluster to make sure that each node will end up with about equal number of deployed instances whenever possible. If deployment of some of the provided services fails, then ServiceDeploymentException containing a list of failed service configurations ( FailedConfigurations ) will be thrown. It is guaranteed that all services, that were provided to this method and are not present in the list of failed services, are successfully deployed by the moment of the exception being thrown. Note that if exception is thrown, then partial deployment may have occurred. Declaration Task DeployAllAsync(IEnumerable<ServiceConfiguration> configurations) Parameters Type Name Description System.Collections.Generic.IEnumerable < ServiceConfiguration > configurations Collection of service configurations to be deployed. Returns Type Description System.Threading.Tasks.Task DeployAsync(ServiceConfiguration) Deploys instances of the service in the Ignite according to provided configuration. Declaration Task DeployAsync(ServiceConfiguration configuration) Parameters Type Name Description ServiceConfiguration configuration Service configuration. Returns Type Description System.Threading.Tasks.Task DeployClusterSingleton(String, IService) Deploys a cluster-wide singleton service. Ignite guarantees that there is always one instance of the service in the cluster. In case if Ignite node on which the service was deployed crashes or stops, Ignite will automatically redeploy it on another node. However, if the node on which the service is deployed remains in topology, then the service will always be deployed on that node only, regardless of topology changes. Note that in case of topology changes, due to network delays, there may be a temporary situation when a singleton service instance will be active on more than one node (e.g. crash detection delay). Declaration void DeployClusterSingleton(string name, IService service) Parameters Type Name Description System.String name Service name. IService service Service instance. DeployClusterSingletonAsync(String, IService) Deploys a cluster-wide singleton service. Ignite guarantees that there is always one instance of the service in the cluster. In case if Ignite node on which the service was deployed crashes or stops, Ignite will automatically redeploy it on another node. However, if the node on which the service is deployed remains in topology, then the service will always be deployed on that node only, regardless of topology changes. Note that in case of topology changes, due to network delays, there may be a temporary situation when a singleton service instance will be active on more than one node (e.g. crash detection delay). Declaration Task DeployClusterSingletonAsync(string name, IService service) Parameters Type Name Description System.String name Service name. IService service Service instance. Returns Type Description System.Threading.Tasks.Task DeployKeyAffinitySingleton<TK>(String, IService, String, TK) Deploys one instance of this service on the primary node for a given affinity key. Whenever topology changes and primary node assignment changes, Ignite will always make sure that the service is undeployed on the previous primary node and deployed on the new primary node. Note that in case of topology changes, due to network delays, there may be a temporary situation when a service instance will be active on more than one node (e.g. crash detection delay). Declaration void DeployKeyAffinitySingleton<TK>(string name, IService service, string cacheName, TK affinityKey) Parameters Type Name Description System.String name Service name. IService service Service instance. System.String cacheName Name of the cache on which affinity for key should be calculated, null for default cache. TK affinityKey Affinity cache key. Type Parameters Name Description TK DeployKeyAffinitySingletonAsync<TK>(String, IService, String, TK) Deploys one instance of this service on the primary node for a given affinity key. Whenever topology changes and primary node assignment changes, Ignite will always make sure that the service is undeployed on the previous primary node and deployed on the new primary node. Note that in case of topology changes, due to network delays, there may be a temporary situation when a service instance will be active on more than one node (e.g. crash detection delay). Declaration Task DeployKeyAffinitySingletonAsync<TK>(string name, IService service, string cacheName, TK affinityKey) Parameters Type Name Description System.String name Service name. IService service Service instance. System.String cacheName Name of the cache on which affinity for key should be calculated, null for default cache. TK affinityKey Affinity cache key. Returns Type Description System.Threading.Tasks.Task Type Parameters Name Description TK DeployMultiple(String, IService, Int32, Int32) Deploys multiple instances of the service on the grid. Ignite will deploy a maximum amount of services equal to totalCount parameter making sure that there are no more than maxPerNodeCount service instances running on each node. Whenever topology changes, Ignite will automatically rebalance the deployed services within cluster to make sure that each node will end up with about equal number of deployed instances whenever possible. Declaration void DeployMultiple(string name, IService service, int totalCount, int maxPerNodeCount) Parameters Type Name Description System.String name Service name. IService service Service instance. System.Int32 totalCount Maximum number of deployed services in the grid, 0 for unlimited. System.Int32 maxPerNodeCount Maximum number of deployed services on each node, 0 for unlimited. DeployMultipleAsync(String, IService, Int32, Int32) Deploys multiple instances of the service on the grid. Ignite will deploy a maximum amount of services equal to totalCount parameter making sure that there are no more than maxPerNodeCount service instances running on each node. Whenever topology changes, Ignite will automatically rebalance the deployed services within cluster to make sure that each node will end up with about equal number of deployed instances whenever possible. Declaration Task DeployMultipleAsync(string name, IService service, int totalCount, int maxPerNodeCount) Parameters Type Name Description System.String name Service name. IService service Service instance. System.Int32 totalCount Maximum number of deployed services in the grid, 0 for unlimited. System.Int32 maxPerNodeCount Maximum number of deployed services on each node, 0 for unlimited. Returns Type Description System.Threading.Tasks.Task DeployNodeSingleton(String, IService) Deploys a per-node singleton service. Ignite guarantees that there is always one instance of the service running on each node. Whenever new nodes are started within the underlying cluster group, Ignite will automatically deploy one instance of the service on every new node. Declaration void DeployNodeSingleton(string name, IService service) Parameters Type Name Description System.String name Service name. IService service Service instance. DeployNodeSingletonAsync(String, IService) Deploys a per-node singleton service. Ignite guarantees that there is always one instance of the service running on each node. Whenever new nodes are started within the underlying cluster group, Ignite will automatically deploy one instance of the service on every new node. Declaration Task DeployNodeSingletonAsync(string name, IService service) Parameters Type Name Description System.String name Service name. IService service Service instance. Returns Type Description System.Threading.Tasks.Task GetDynamicServiceProxy(String) Gets a remote handle on the service as a dynamic object. If service is available locally, then local instance is returned, otherwise, a remote proxy is dynamically created and provided for the specified service. This method utilizes dynamic feature of the language and does not require any service interfaces or classes. Java services can be accessed as well as .NET services. Declaration dynamic GetDynamicServiceProxy(string name) Parameters Type Name Description System.String name Service name. Returns Type Description System.Object Either proxy over remote service or local service if it is deployed locally. GetDynamicServiceProxy(String, Boolean) Gets a remote handle on the service as a dynamic object. If service is available locally, then local instance is returned, otherwise, a remote proxy is dynamically created and provided for the specified service. This method utilizes dynamic feature of the language and does not require any service interfaces or classes. Java services can be accessed as well as .NET services. Declaration dynamic GetDynamicServiceProxy(string name, bool sticky) Parameters Type Name Description System.String name Service name. System.Boolean sticky Whether or not Ignite should always contact the same remote service or try to load-balance between services. Returns Type Description System.Object Either proxy over remote service or local service if it is deployed locally. GetService<T>(String) Gets deployed service with specified name. Declaration T GetService<T>(string name) Parameters Type Name Description System.String name Service name. Returns Type Description T Deployed service with specified name. Type Parameters Name Description T Service type. GetServiceDescriptors() Gets metadata about all deployed services. Declaration ICollection<IServiceDescriptor> GetServiceDescriptors() Returns Type Description System.Collections.Generic.ICollection < IServiceDescriptor > Metadata about all deployed services. GetServiceProxy<T>(String) Gets a remote handle on the service. If service is available locally, then local instance is returned, otherwise, a remote proxy is dynamically created and provided for the specified service. Declaration T GetServiceProxy<T>(string name)where T : class Parameters Type Name Description System.String name Service name. Returns Type Description T Either proxy over remote service or local service if it is deployed locally. Type Parameters Name Description T Service type. GetServiceProxy<T>(String, Boolean) Gets a remote handle on the service. If service is available locally, then local instance is returned, otherwise, a remote proxy is dynamically created and provided for the specified service. Declaration T GetServiceProxy<T>(string name, bool sticky)where T : class Parameters Type Name Description System.String name Service name. System.Boolean sticky Whether or not Ignite should always contact the same remote service or try to load-balance between services. Returns Type Description T Either proxy over remote service or local service if it is deployed locally. Type Parameters Name Description T Service type. GetServices<T>(String) Gets all deployed services with specified name. Declaration ICollection<T> GetServices<T>(string name) Parameters Type Name Description System.String name Service name. Returns Type Description System.Collections.Generic.ICollection <T> All deployed services with specified name. Type Parameters Name Description T Service type. WithKeepBinary() Returns an instance with binary mode enabled. Service method results will be kept in binary form. Declaration IServices WithKeepBinary() Returns Type Description IServices Instance with binary mode enabled. WithServerKeepBinary() Returns an instance with server-side binary mode enabled. Service method arguments will be kept in binary form. Declaration IServices WithServerKeepBinary() Returns Type Description IServices Instance with server-side binary mode enabled."
  },
  "api/Apache.Ignite.Core.Services.ServiceConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Services.ServiceConfiguration.html",
    "title": "Class ServiceConfiguration | Apache Ignite.NET",
    "keywords": "Class ServiceConfiguration Service configuration. Inheritance System.Object ServiceConfiguration Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Services Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class ServiceConfiguration Constructors ServiceConfiguration() Default constructor Declaration public ServiceConfiguration() Properties AffinityKey Gets or sets affinity key used for key-to-node affinity calculation. Declaration public object AffinityKey { get; set; } Property Value Type Description System.Object CacheName Gets or sets cache name used for key-to-node affinity calculation. Declaration public string CacheName { get; set; } Property Value Type Description System.String MaxPerNodeCount Gets or sets maximum number of deployed service instances on each node, 0 for unlimited. Declaration public int MaxPerNodeCount { get; set; } Property Value Type Description System.Int32 Name Gets or sets the service name. Declaration public string Name { get; set; } Property Value Type Description System.String NodeFilter Gets or sets node filter used to filter nodes on which the service will be deployed. Declaration public IClusterNodeFilter NodeFilter { get; set; } Property Value Type Description IClusterNodeFilter Service Gets or sets the service instance. Declaration public IService Service { get; set; } Property Value Type Description IService TotalCount Gets or sets the total number of deployed service instances in the cluster, 0 for unlimited. Declaration public int TotalCount { get; set; } Property Value Type Description System.Int32"
  },
  "api/Apache.Ignite.Core.IgniteConfigurationSection.html": {
    "href": "api/Apache.Ignite.Core.IgniteConfigurationSection.html",
    "title": "Class IgniteConfigurationSection | Apache Ignite.NET",
    "keywords": "Class IgniteConfigurationSection Ignite configuration section for app.config and web.config files. Inheritance System.Object System.Configuration.ConfigurationElement System.Configuration.ConfigurationSection IgniteConfigurationSection Inherited Members System.Configuration.ConfigurationSection.GetRuntimeObject() System.Configuration.ConfigurationSection.IsModified() System.Configuration.ConfigurationSection.ResetModified() System.Configuration.ConfigurationSection.ShouldSerializePropertyInTargetVersion(System.Configuration.ConfigurationProperty, System.String, System.Runtime.Versioning.FrameworkName, System.Configuration.ConfigurationElement) System.Configuration.ConfigurationSection.ShouldSerializeElementInTargetVersion(System.Configuration.ConfigurationElement, System.String, System.Runtime.Versioning.FrameworkName) System.Configuration.ConfigurationSection.ShouldSerializeSectionInTargetVersion(System.Runtime.Versioning.FrameworkName) System.Configuration.ConfigurationSection.SectionInformation System.Configuration.ConfigurationElement.Init() System.Configuration.ConfigurationElement.IsReadOnly() System.Configuration.ConfigurationElement.SetReadOnly() System.Configuration.ConfigurationElement.ListErrors(System.Collections.IList) System.Configuration.ConfigurationElement.InitializeDefault() System.Configuration.ConfigurationElement.Reset(System.Configuration.ConfigurationElement) System.Configuration.ConfigurationElement.Equals(System.Object) System.Configuration.ConfigurationElement.GetHashCode() System.Configuration.ConfigurationElement.SetPropertyValue(System.Configuration.ConfigurationProperty, System.Object, System.Boolean) System.Configuration.ConfigurationElement.Unmerge(System.Configuration.ConfigurationElement, System.Configuration.ConfigurationElement, System.Configuration.ConfigurationSaveMode) System.Configuration.ConfigurationElement.SerializeToXmlElement(System.Xml.XmlWriter, System.String) System.Configuration.ConfigurationElement.SerializeElement(System.Xml.XmlWriter, System.Boolean) System.Configuration.ConfigurationElement.DeserializeElement(System.Xml.XmlReader, System.Boolean) System.Configuration.ConfigurationElement.OnRequiredPropertyNotFound(System.String) System.Configuration.ConfigurationElement.PostDeserialize() System.Configuration.ConfigurationElement.PreSerialize(System.Xml.XmlWriter) System.Configuration.ConfigurationElement.OnDeserializeUnrecognizedAttribute(System.String, System.String) System.Configuration.ConfigurationElement.OnDeserializeUnrecognizedElement(System.String, System.Xml.XmlReader) System.Configuration.ConfigurationElement.GetTransformedTypeString(System.String) System.Configuration.ConfigurationElement.GetTransformedAssemblyString(System.String) System.Configuration.ConfigurationElement.LockAttributes System.Configuration.ConfigurationElement.LockAllAttributesExcept System.Configuration.ConfigurationElement.LockElements System.Configuration.ConfigurationElement.LockAllElementsExcept System.Configuration.ConfigurationElement.LockItem System.Configuration.ConfigurationElement.Item[System.Configuration.ConfigurationProperty] System.Configuration.ConfigurationElement.Item[System.String] System.Configuration.ConfigurationElement.Properties System.Configuration.ConfigurationElement.ElementInformation System.Configuration.ConfigurationElement.EvaluationContext System.Configuration.ConfigurationElement.ElementProperty System.Configuration.ConfigurationElement.CurrentConfiguration System.Object.ToString() System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core Assembly : Apache.Ignite.Core.dll Syntax public class IgniteConfigurationSection : ConfigurationSection Properties IgniteConfiguration Gets or sets the ignite configuration. Declaration public IgniteConfiguration IgniteConfiguration { get; } Property Value Type Description IgniteConfiguration The ignite configuration. Methods DeserializeSection(XmlReader) Reads XML from the configuration file. Declaration protected override void DeserializeSection(XmlReader reader) Parameters Type Name Description System.Xml.XmlReader reader The reader object, which reads from the configuration file. Overrides System.Configuration.ConfigurationSection.DeserializeSection(System.Xml.XmlReader) SerializeSection(ConfigurationElement, String, ConfigurationSaveMode) Creates an XML string containing an unmerged view of the System.Configuration.ConfigurationSection object as a single section to write to a file. Declaration protected override string SerializeSection(ConfigurationElement parentElement, string name, ConfigurationSaveMode saveMode) Parameters Type Name Description System.Configuration.ConfigurationElement parentElement The System.Configuration.ConfigurationElement instance to use as the parent when performing the un-merge. System.String name The name of the section to create. System.Configuration.ConfigurationSaveMode saveMode The System.Configuration.ConfigurationSaveMode instance to use when writing to a string. Returns Type Description System.String An XML string containing an unmerged view of the System.Configuration.ConfigurationSection object. Overrides System.Configuration.ConfigurationSection.SerializeSection(System.Configuration.ConfigurationElement, System.String, System.Configuration.ConfigurationSaveMode)"
  },
  "api/Apache.Ignite.Core.Ignition.html": {
    "href": "api/Apache.Ignite.Core.Ignition.html",
    "title": "Class Ignition | Apache Ignite.NET",
    "keywords": "Class Ignition This class defines a factory for the main Ignite API. Use Start() method to start Ignite with default configuration. All members are thread-safe and may be used concurrently from multiple threads. Inheritance System.Object Ignition Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core Assembly : Apache.Ignite.Core.dll Syntax public static class Ignition Fields ClientConfigurationSectionName Default configuration section name. Declaration public const string ClientConfigurationSectionName = \"igniteClientConfiguration\" Field Value Type Description System.String ConfigurationSectionName Default configuration section name. Declaration public const string ConfigurationSectionName = \"igniteConfiguration\" Field Value Type Description System.String Properties ClientMode Gets or sets a value indicating whether Ignite should be started in client mode. Client nodes cannot hold data in caches. Declaration public static bool ClientMode { get; set; } Property Value Type Description System.Boolean Methods GetAll() Gets all started Ignite instances. Declaration public static ICollection<IIgnite> GetAll() Returns Type Description System.Collections.Generic.ICollection < IIgnite > All Ignite instances. GetIgnite() Gets the default Ignite instance with null name, or an instance with any name when there is only one. Note that caller of this method should not assume that it will return the same instance every time. Declaration public static IIgnite GetIgnite() Returns Type Description IIgnite Default Ignite instance. Exceptions Type Condition IgniteException When there is no matching Ignite instance. GetIgnite(String) Gets a named Ignite instance. If Ignite name is null or empty string, then default no-name Ignite will be returned. Note that caller of this method should not assume that it will return the same instance every time. Note that single process can run multiple Ignite instances and every Ignite instance (and its node) can belong to a different grid. Ignite name defines what grid a particular Ignite instance (and correspondingly its node) belongs to. Declaration public static IIgnite GetIgnite(string name) Parameters Type Name Description System.String name Ignite name to which requested Ignite instance belongs. If null , then Ignite instance belonging to a default no-name Ignite will be returned. Returns Type Description IIgnite An instance of named grid. Exceptions Type Condition IgniteException When there is no Ignite instance with specified name. Start() Starts Ignite with default configuration. By default this method will use Ignite configuration defined in {IGNITE_HOME}/config/default-config.xml configuration file. If such file is not found, then all system defaults will be used. Declaration public static IIgnite Start() Returns Type Description IIgnite Started Ignite. Start(IgniteConfiguration) Starts Ignite with given configuration. Declaration public static IIgnite Start(IgniteConfiguration cfg) Parameters Type Name Description IgniteConfiguration cfg Returns Type Description IIgnite Started Ignite. Start(String) Starts all grids specified within given Spring XML configuration file. If Ignite with given name is already started, then exception is thrown. In this case all instances that may have been started so far will be stopped too. Declaration public static IIgnite Start(string springCfgPath) Parameters Type Name Description System.String springCfgPath Spring XML configuration file path or URL. Note, that the path can be absolute or relative to IGNITE_HOME. Returns Type Description IIgnite Started Ignite. If Spring configuration contains multiple Ignite instances, then the 1st found instance is returned. StartClient() Reads IgniteClientConfiguration from application configuration IgniteClientConfigurationSection with ClientConfigurationSectionName name and connects Ignite lightweight (thin) client to an Ignite node. Thin client connects to an existing Ignite node with a socket and does not start JVM in process. Declaration public static IIgniteClient StartClient() Returns Type Description IIgniteClient Ignite client instance. StartClient(IgniteClientConfiguration) Connects Ignite lightweight (thin) client to an Ignite node. Thin client connects to an existing Ignite node with a socket and does not start JVM in process. Declaration public static IIgniteClient StartClient(IgniteClientConfiguration clientConfiguration) Parameters Type Name Description IgniteClientConfiguration clientConfiguration The client configuration. Returns Type Description IIgniteClient Ignite client instance. StartClient(String) Reads IgniteClientConfiguration from application configuration IgniteClientConfigurationSection with specified name and connects Ignite lightweight (thin) client to an Ignite node. Thin client connects to an existing Ignite node with a socket and does not start JVM in process. Declaration public static IIgniteClient StartClient(string sectionName) Parameters Type Name Description System.String sectionName Name of the configuration section. Returns Type Description IIgniteClient Ignite client instance. StartClient(String, String) Reads IgniteConfiguration from application configuration IgniteConfigurationSection with specified name and starts Ignite. Declaration public static IIgniteClient StartClient(string sectionName, string configPath) Parameters Type Name Description System.String sectionName Name of the section. System.String configPath Path to the configuration file. Returns Type Description IIgniteClient Started Ignite. StartFromApplicationConfiguration() Reads IgniteConfiguration from application configuration IgniteConfigurationSection with ConfigurationSectionName name and starts Ignite. Declaration public static IIgnite StartFromApplicationConfiguration() Returns Type Description IIgnite Started Ignite. StartFromApplicationConfiguration(String) Reads IgniteConfiguration from application configuration IgniteConfigurationSection with specified name and starts Ignite. Declaration public static IIgnite StartFromApplicationConfiguration(string sectionName) Parameters Type Name Description System.String sectionName Name of the section. Returns Type Description IIgnite Started Ignite. StartFromApplicationConfiguration(String, String) Reads IgniteConfiguration from application configuration IgniteConfigurationSection with specified name and starts Ignite. Declaration public static IIgnite StartFromApplicationConfiguration(string sectionName, string configPath) Parameters Type Name Description System.String sectionName Name of the section. System.String configPath Path to the configuration file. Returns Type Description IIgnite Started Ignite. Stop(String, Boolean) Stops named grid. If cancel flag is set to true then all jobs currently executing on local node will be interrupted. If grid name is null , then default no-name Ignite will be stopped. Declaration public static bool Stop(string name, bool cancel) Parameters Type Name Description System.String name Grid name. If null , then default no-name Ignite will be stopped. System.Boolean cancel If true then all jobs currently executing will be cancelled by calling ComputeJob.cancel method. Returns Type Description System.Boolean true if named Ignite instance was indeed found and stopped, false othwerwise (the instance with given name was not found). StopAll(Boolean) Stops all started grids. If cancel flag is set to true then all jobs currently executing on local node will be interrupted. Declaration public static void StopAll(bool cancel) Parameters Type Name Description System.Boolean cancel If true then all jobs currently executing will be cancelled by calling ComputeJob.Cancel() method. TryGetIgnite() Gets the default Ignite instance with null name, or an instance with any name when there is only one. Returns null when there are no Ignite instances started, or when there are more than one, and none of them has null name. Declaration public static IIgnite TryGetIgnite() Returns Type Description IIgnite An instance of default no-name grid, or null. TryGetIgnite(String) Gets a named Ignite instance, or null if none found. If Ignite name is null or empty string, then default no-name Ignite will be returned. Note that caller of this method should not assume that it will return the same instance every time. Note that single process can run multiple Ignite instances and every Ignite instance (and its node) can belong to a different grid. Ignite name defines what grid a particular Ignite instance (and correspondingly its node) belongs to. Declaration public static IIgnite TryGetIgnite(string name) Parameters Type Name Description System.String name Ignite name to which requested Ignite instance belongs. If null , then Ignite instance belonging to a default no-name Ignite will be returned. Returns Type Description IIgnite An instance of named grid, or null."
  },
  "api/Apache.Ignite.Core.IIgnite.html": {
    "href": "api/Apache.Ignite.Core.IIgnite.html",
    "title": "Interface IIgnite | Apache Ignite.NET",
    "keywords": "Interface IIgnite Main entry point for all Ignite APIs. You can obtain an instance of IIgnite through GetIgnite() , or for named grids you can use GetIgnite(String) . Note that you can have multiple instances of IIgnite running in the same process by giving each instance a different name. All members are thread-safe and may be used concurrently from multiple threads. Inherited Members System.IDisposable.Dispose() Namespace : Apache.Ignite.Core Assembly : Apache.Ignite.Core.dll Syntax public interface IIgnite : IDisposable Properties Logger Gets the logger. See Logger for customization. Declaration ILogger Logger { get; } Property Value Type Description ILogger Name Gets the name of the grid this Ignite instance (and correspondingly its local node) belongs to. Note that single process can have multiple Ignite instances all belonging to different grids. Grid name allows to indicate to what grid this particular Ignite instance (i.e. Ignite runtime and its local node) belongs to. If default Ignite instance is used, then null is returned. Refer to Ignition documentation for information on how to start named grids. Declaration string Name { get; } Property Value Type Description System.String Name of the grid, or null for default grid. Methods AddCacheConfiguration(CacheConfiguration) Adds cache configuration template. Name should contain *. Template 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.Resource.InstanceResourceAttribute.html": {
    "href": "api/Apache.Ignite.Core.Resource.InstanceResourceAttribute.html",
    "title": "Class InstanceResourceAttribute | Apache Ignite.NET",
    "keywords": "Class InstanceResourceAttribute Attribute which injects IIgnite instance. Can be defined inside implementors of IComputeTask<TArg, TJobRes, TRes> and IComputeJob<TRes> interfaces. Can be applied to non-static fields, properties and methods returning void and accepting a single parameter. Inheritance System.Object System.Attribute InstanceResourceAttribute Implements System.Runtime.InteropServices._Attribute Inherited Members System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Boolean) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Boolean) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Module) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.IsDefined(System.Reflection.Module, System.Type) System.Attribute.IsDefined(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Boolean) System.Attribute.IsDefined(System.Reflection.Assembly, System.Type) System.Attribute.IsDefined(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.Equals(System.Object) System.Attribute.GetHashCode() System.Attribute.Match(System.Object) System.Attribute.IsDefaultAttribute() System.Attribute.System.Runtime.InteropServices._Attribute.GetTypeInfoCount(System.UInt32) System.Attribute.System.Runtime.InteropServices._Attribute.GetTypeInfo(System.UInt32, System.UInt32, System.IntPtr) System.Attribute.System.Runtime.InteropServices._Attribute.GetIDsOfNames(System.Guid, System.IntPtr, System.UInt32, System.UInt32, System.IntPtr) System.Attribute.System.Runtime.InteropServices._Attribute.Invoke(System.UInt32, System.Guid, System.UInt32, System.Int16, System.IntPtr, System.IntPtr, System.IntPtr, System.IntPtr) System.Attribute.TypeId System.Object.ToString() System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Resource Assembly : Apache.Ignite.Core.dll Syntax [AttributeUsage(AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Field)] public sealed class InstanceResourceAttribute : Attribute, _Attribute Implements System.Runtime.InteropServices._Attribute"
  },
  "api/Apache.Ignite.Core.Resource.StoreSessionResourceAttribute.html": {
    "href": "api/Apache.Ignite.Core.Resource.StoreSessionResourceAttribute.html",
    "title": "Class StoreSessionResourceAttribute | Apache Ignite.NET",
    "keywords": "Class StoreSessionResourceAttribute Annotates a field or a setter method for injection of current ICacheStoreSession instance. It can be injected into ICacheStore . Inheritance System.Object System.Attribute StoreSessionResourceAttribute Implements System.Runtime.InteropServices._Attribute Inherited Members System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Boolean) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Boolean) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Module) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.IsDefined(System.Reflection.Module, System.Type) System.Attribute.IsDefined(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Boolean) System.Attribute.IsDefined(System.Reflection.Assembly, System.Type) System.Attribute.IsDefined(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.Equals(System.Object) System.Attribute.GetHashCode() System.Attribute.Match(System.Object) System.Attribute.IsDefaultAttribute() System.Attribute.System.Runtime.InteropServices._Attribute.GetTypeInfoCount(System.UInt32) System.Attribute.System.Runtime.InteropServices._Attribute.GetTypeInfo(System.UInt32, System.UInt32, System.IntPtr) System.Attribute.System.Runtime.InteropServices._Attribute.GetIDsOfNames(System.Guid, System.IntPtr, System.UInt32, System.UInt32, System.IntPtr) System.Attribute.System.Runtime.InteropServices._Attribute.Invoke(System.UInt32, System.Guid, System.UInt32, System.Int16, System.IntPtr, System.IntPtr, System.IntPtr, System.IntPtr) System.Attribute.TypeId System.Object.ToString() System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Resource Assembly : Apache.Ignite.Core.dll Syntax [AttributeUsage(AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Field)] public sealed class StoreSessionResourceAttribute : Attribute, _Attribute Implements System.Runtime.InteropServices._Attribute"
  },
  "api/Apache.Ignite.Core.Resource.html": {
    "href": "api/Apache.Ignite.Core.Resource.html",
    "title": "Namespace Apache.Ignite.Core.Resource | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Resource Classes InstanceResourceAttribute Attribute which injects IIgnite instance. Can be defined inside implementors of IComputeTask<TArg, TJobRes, TRes> and IComputeJob<TRes> interfaces. Can be applied to non-static fields, properties and methods returning void and accepting a single parameter. StoreSessionResourceAttribute Annotates a field or a setter method for injection of current ICacheStoreSession instance. It can be injected into ICacheStore ."
  },
  "api/Apache.Ignite.Core.Services.IService.html": {
    "href": "api/Apache.Ignite.Core.Services.IService.html",
    "title": "Interface IService | Apache Ignite.NET",
    "keywords": "Interface IService Represents Ignite-managed service. Namespace : Apache.Ignite.Core.Services Assembly : Apache.Ignite.Core.dll Syntax public interface IService Methods Cancel(IServiceContext) Cancels this instance. Note that Ignite cannot guarantee that the service exits from Execute(IServiceContext) method whenever Cancel(IServiceContext) is called. It is up to the user to make sure that the service code properly reacts to cancellations. Declaration void Cancel(IServiceContext context) Parameters Type Name Description IServiceContext context Service execution context. Execute(IServiceContext) Starts execution of this service. This method is automatically invoked whenever an instance of the service is deployed on a Ignite node. Note that service is considered deployed even after it exits the Execute method and can be cancelled (or undeployed) only by calling any of the Cancel methods on IServices API. Also note that service is not required to exit from Execute method until Cancel method was called. Declaration void Execute(IServiceContext context) Parameters Type Name Description IServiceContext context Service execution context. Init(IServiceContext) Initializes this instance before execution. Declaration void Init(IServiceContext context) Parameters Type Name Description IServiceContext context Service execution context."
  },
  "api/Apache.Ignite.Linq.CacheLinqExtensions.html": {
    "href": "api/Apache.Ignite.Linq.CacheLinqExtensions.html",
    "title": "Class CacheLinqExtensions | Apache Ignite.NET",
    "keywords": "Class CacheLinqExtensions Extensions methods for ICache<TK, TV> . Inheritance System.Object CacheLinqExtensions Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Linq Assembly : Apache.Ignite.Linq.dll Syntax public static class CacheLinqExtensions Methods AsCacheQueryable<TKey, TValue>(ICache<TKey, TValue>) Gets an System.Linq.IQueryable<T> instance over this cache. Resulting query will be translated to cache SQL query and executed over the cache instance via Query(SqlFieldsQuery) . Result of this method (and subsequent query) can be cast to ICacheQueryable for introspection, or converted with ToCacheQueryable<T>(IQueryable<T>) extension method. Declaration public static IQueryable<ICacheEntry<TKey, TValue>> AsCacheQueryable<TKey, TValue>(this ICache<TKey, TValue> cache) Parameters Type Name Description ICache <TKey, TValue> cache The cache. Returns Type Description System.Linq.IQueryable < ICacheEntry <TKey, TValue>> System.Linq.IQueryable<T> instance over this cache. Type Parameters Name Description TKey The type of the key. TValue The type of the value. AsCacheQueryable<TKey, TValue>(ICache<TKey, TValue>, QueryOptions) Gets an System.Linq.IQueryable<T> instance over this cache. Resulting query will be translated to cache SQL query and executed over the cache instance via Query(SqlFieldsQuery) . depending on requested result. Result of this method (and subsequent query) can be cast to ICacheQueryable for introspection. Declaration public static IQueryable<ICacheEntry<TKey, TValue>> AsCacheQueryable<TKey, TValue>(this ICache<TKey, TValue> cache, QueryOptions queryOptions) Parameters Type Name Description ICache <TKey, TValue> cache The cache. QueryOptions queryOptions The query options. Returns Type Description System.Linq.IQueryable < ICacheEntry <TKey, TValue>> System.Linq.IQueryable<T> instance over this cache. Type Parameters Name Description TKey The type of the key. TValue The type of the value. AsCacheQueryable<TKey, TValue>(ICache<TKey, TValue>, Boolean) Gets an System.Linq.IQueryable<T> instance over this cache. Resulting query will be translated to cache SQL query and executed over the cache instance via Query(SqlFieldsQuery) . depending on requested result. Result of this method (and subsequent query) can be cast to ICacheQueryable for introspection. Declaration public static IQueryable<ICacheEntry<TKey, TValue>> AsCacheQueryable<TKey, TValue>(this ICache<TKey, TValue> cache, bool local) Parameters Type Name Description ICache <TKey, TValue> cache The cache. System.Boolean local Local flag. When set query will be executed only on local node, so only local entries will be returned as query result. Returns Type Description System.Linq.IQueryable < ICacheEntry <TKey, TValue>> System.Linq.IQueryable<T> instance over this cache. Type Parameters Name Description TKey The type of the key. TValue The type of the value. AsCacheQueryable<TKey, TValue>(ICache<TKey, TValue>, Boolean, String) Gets an System.Linq.IQueryable<T> instance over this cache. Resulting query will be translated to cache SQL query and executed over the cache instance via Query(SqlFieldsQuery) . depending on requested result. Result of this method (and subsequent query) can be cast to ICacheQueryable for introspection. Declaration public static IQueryable<ICacheEntry<TKey, TValue>> AsCacheQueryable<TKey, TValue>(this ICache<TKey, TValue> cache, bool local, string tableName) Parameters Type Name Description ICache <TKey, TValue> cache The cache. System.Boolean local Local flag. When set query will be executed only on local node, so only local entries will be returned as query result. System.String tableName Name of the table. Table name is equal to short class name of a cache value. When a cache has only one type of values, or only one QueryEntity defined, table name will be inferred and can be omitted. Returns Type Description System.Linq.IQueryable < ICacheEntry <TKey, TValue>> System.Linq.IQueryable<T> instance over this cache. Type Parameters Name Description TKey The type of the key. TValue The type of the value. RemoveAll<TKey, TValue>(IQueryable<ICacheEntry<TKey, TValue>>) Removes all rows that are matched by the specified query. This method results in \"DELETE FROM\" distributed SQL query, performing bulk delete (as opposed to fetching all rows locally). Declaration public static int RemoveAll<TKey, TValue>(this IQueryable<ICacheEntry<TKey, TValue>> query) Parameters Type Name Description System.Linq.IQueryable < ICacheEntry <TKey, TValue>> query The query. Returns Type Description System.Int32 Affected row count. Type Parameters Name Description TKey Key type. TValue Value type. RemoveAll<TKey, TValue>(IQueryable<ICacheEntry<TKey, TValue>>, Expression<Func<ICacheEntry<TKey, TValue>, Boolean>>) Deletes all rows that are matched by the specified query. This method results in \"DELETE FROM\" distributed SQL query, performing bulk delete (as opposed to fetching all rows locally). Declaration public static int RemoveAll<TKey, TValue>(this IQueryable<ICacheEntry<TKey, TValue>> query, Expression<Func<ICacheEntry<TKey, TValue>, bool>> predicate) Parameters Type Name Description System.Linq.IQueryable < ICacheEntry <TKey, TValue>> query The query. System.Linq.Expressions.Expression < System.Func < ICacheEntry <TKey, TValue>, System.Boolean >> predicate The predicate. Returns Type Description System.Int32 Affected row count. Type Parameters Name Description TKey Key type. TValue Value type. ToCacheQueryable<T>(IQueryable<T>) Casts this query to ICacheQueryable . Declaration public static ICacheQueryable ToCacheQueryable<T>(this IQueryable<T> query) Parameters Type Name Description System.Linq.IQueryable <T> query Returns Type Description ICacheQueryable Type Parameters Name Description T UpdateAll<TKey, TValue>(IQueryable<ICacheEntry<TKey, TValue>>, Expression<Func<IUpdateDescriptor<TKey, TValue>, IUpdateDescriptor<TKey, TValue>>>) Updates all rows that are matched by the specified query. This method results in \"UPDATE\" distributed SQL query, performing bulk update (as opposed to fetching all rows locally). Declaration public static int UpdateAll<TKey, TValue>(this IQueryable<ICacheEntry<TKey, TValue>> query, Expression<Func<IUpdateDescriptor<TKey, TValue>, IUpdateDescriptor<TKey, TValue>>> updateDescription) Parameters Type Name Description System.Linq.IQueryable < ICacheEntry <TKey, TValue>> query The query. System.Linq.Expressions.Expression < System.Func < IUpdateDescriptor <TKey, TValue>, IUpdateDescriptor <TKey, TValue>>> updateDescription The update description. Returns Type Description System.Int32 Affected row count. Type Parameters Name Description TKey Key type. TValue Value type."
  },
  "api/Apache.Ignite.Linq.CompiledQuery.html": {
    "href": "api/Apache.Ignite.Linq.CompiledQuery.html",
    "title": "Class CompiledQuery | Apache Ignite.NET",
    "keywords": "Class CompiledQuery Represents a compiled cache query. Inheritance System.Object CompiledQuery Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Linq Assembly : Apache.Ignite.Linq.dll Syntax public static class CompiledQuery Methods Compile<T>(Expression<Func<IQueryable<T>>>) Creates a new delegate that represents the compiled cache query. Declaration public static Func<IQueryCursor<T>> Compile<T>(Expression<Func<IQueryable<T>>> query) Parameters Type Name Description System.Linq.Expressions.Expression < System.Func < System.Linq.IQueryable <T>>> query The query to compile. Returns Type Description System.Func < IQueryCursor <T>> Delegate that represents the compiled cache query. Type Parameters Name Description T Compile<T>(IQueryable<T>) Creates a new delegate that represents the compiled cache query with any number of arguments. This method differs from other Compile methods in that it takes in ICacheQueryable directly, and returns a delegate that takes an array of parameters. It is up to the user to provide query arguments in correct order. This method also imposes no restrictions on where the query comes from (in contrary to other methods). Declaration public static CompiledQueryFunc<T> Compile<T>(IQueryable<T> query) Parameters Type Name Description System.Linq.IQueryable <T> query The query to compile. Returns Type Description CompiledQueryFunc <T> Delegate that represents the compiled cache query. Type Parameters Name Description T Compile<T, T1>(Expression<Func<T1, IQueryable<T>>>) Creates a new delegate that represents the compiled cache query. Declaration public static Func<T1, IQueryCursor<T>> Compile<T, T1>(Expression<Func<T1, IQueryable<T>>> query) Parameters Type Name Description System.Linq.Expressions.Expression < System.Func <T1, System.Linq.IQueryable <T>>> query The query to compile. Returns Type Description System.Func <T1, IQueryCursor <T>> Delegate that represents the compiled cache query. Type Parameters Name Description T T1 Compile<T, T1, T2>(Expression<Func<T1, T2, IQueryable<T>>>) Creates a new delegate that represents the compiled cache query. Declaration public static Func<T1, T2, IQueryCursor<T>> Compile<T, T1, T2>(Expression<Func<T1, T2, IQueryable<T>>> query) Parameters Type Name Description System.Linq.Expressions.Expression < System.Func <T1, T2, System.Linq.IQueryable <T>>> query The query to compile. Returns Type Description System.Func <T1, T2, IQueryCursor <T>> Delegate that represents the compiled cache query. Type Parameters Name Description T T1 T2 Compile<T, T1, T2, T3>(Expression<Func<T1, T2, T3, IQueryable<T>>>) Creates a new delegate that represents the compiled cache query. Declaration public static Func<T1, T2, T3, IQueryCursor<T>> Compile<T, T1, T2, T3>(Expression<Func<T1, T2, T3, IQueryable<T>>> query) Parameters Type Name Description System.Linq.Expressions.Expression < System.Func <T1, T2, T3, System.Linq.IQueryable <T>>> query The query to compile. Returns Type Description System.Func <T1, T2, T3, IQueryCursor <T>> Delegate that represents the compiled cache query. Type Parameters Name Description T T1 T2 T3 Compile<T, T1, T2, T3, T4>(Expression<Func<T1, T2, T3, T4, IQueryable<T>>>) Creates a new delegate that represents the compiled cache query. Declaration public static Func<T1, T2, T3, T4, IQueryCursor<T>> Compile<T, T1, T2, T3, T4>(Expression<Func<T1, T2, T3, T4, IQueryable<T>>> query) Parameters Type Name Description System.Linq.Expressions.Expression < System.Func <T1, T2, T3, T4, System.Linq.IQueryable <T>>> query The query to compile. Returns Type Description System.Func <T1, T2, T3, T4, IQueryCursor <T>> Delegate that represents the compiled cache query. Type Parameters Name Description T T1 T2 T3 T4 Compile<T, T1, T2, T3, T4, T5>(Expression<Func<T1, T2, T3, T4, T5, IQueryable<T>>>) Creates a new delegate that represents the compiled cache query. Declaration public static Func<T1, T2, T3, T4, T5, IQueryCursor<T>> Compile<T, T1, T2, T3, T4, T5>(Expression<Func<T1, T2, T3, T4, T5, IQueryable<T>>> query) Parameters Type Name Description System.Linq.Expressions.Expression < System.Func <T1, T2, T3, T4, T5, System.Linq.IQueryable <T>>> query The query to compile. Returns Type Description System.Func <T1, T2, T3, T4, T5, IQueryCursor <T>> Delegate that represents the compiled cache query. Type Parameters Name Description T T1 T2 T3 T4 T5 Compile<T, T1, T2, T3, T4, T5, T6>(Expression<Func<T1, T2, T3, T4, T5, T6, IQueryable<T>>>) Creates a new delegate that represents the compiled cache query. Declaration public static Func<T1, T2, T3, T4, T5, T6, IQueryCursor<T>> Compile<T, T1, T2, T3, T4, T5, T6>(Expression<Func<T1, T2, T3, T4, T5, T6, IQueryable<T>>> query) Parameters Type Name Description System.Linq.Expressions.Expression < System.Func <T1, T2, T3, T4, T5, T6, System.Linq.IQueryable <T>>> query The query to compile. Returns Type Description System.Func <T1, T2, T3, T4, T5, T6, IQueryCursor <T>> Delegate that represents the compiled cache query. Type Parameters Name Description T T1 T2 T3 T4 T5 T6 Compile<T, T1, T2, T3, T4, T5, T6, T7>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, IQueryable<T>>>) Creates a new delegate that represents the compiled cache query. Declaration public static Func<T1, T2, T3, T4, T5, T6, T7, IQueryCursor<T>> Compile<T, T1, T2, T3, T4, T5, T6, T7>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, IQueryable<T>>> query) Parameters Type Name Description System.Linq.Expressions.Expression < System.Func <T1, T2, T3, T4, T5, T6, T7, System.Linq.IQueryable <T>>> query The query to compile. Returns Type Description System.Func <T1, T2, T3, T4, T5, T6, T7, IQueryCursor <T>> Delegate that represents the compiled cache query. Type Parameters Name Description T T1 T2 T3 T4 T5 T6 T7 Compile<T, T1, T2, T3, T4, T5, T6, T7, T8>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, IQueryable<T>>>) Creates a new delegate that represents the compiled cache query. Declaration public static Func<T1, T2, T3, T4, T5, T6, T7, T8, IQueryCursor<T>> Compile<T, T1, T2, T3, T4, T5, T6, T7, T8>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, IQueryable<T>>> query) Parameters Type Name Description System.Linq.Expressions.Expression < System.Func <T1, T2, T3, T4, T5, T6, T7, T8, System.Linq.IQueryable <T>>> query The query to compile. Returns Type Description System.Func <T1, T2, T3, T4, T5, T6, T7, T8, IQueryCursor <T>> Delegate that represents the compiled cache query. Type Parameters Name Description T T1 T2 T3 T4 T5 T6 T7 T8"
  },
  "api/Apache.Ignite.Linq.CompiledQueryFunc-1.html": {
    "href": "api/Apache.Ignite.Linq.CompiledQueryFunc-1.html",
    "title": "Delegate CompiledQueryFunc<T> | Apache Ignite.NET",
    "keywords": "Delegate CompiledQueryFunc<T> Delegate for compiled query with arbitrary number of arguments. Namespace : Apache.Ignite.Linq Assembly : Apache.Ignite.Linq.dll Syntax public delegate IQueryCursor<T> CompiledQueryFunc<T>(params object[] args); Parameters Type Name Description System.Object [] args The arguments. Returns Type Description IQueryCursor <T> Query cursor. Type Parameters Name Description T Result type."
  },
  "api/Apache.Ignite.Linq.ICacheQueryable.html": {
    "href": "api/Apache.Ignite.Linq.ICacheQueryable.html",
    "title": "Interface ICacheQueryable | Apache Ignite.NET",
    "keywords": "Interface ICacheQueryable Common interface for cache queryables. Namespace : Apache.Ignite.Linq Assembly : Apache.Ignite.Linq.dll Syntax public interface ICacheQueryable Properties CacheName Gets the name of the cache that is associated with this query. Declaration string CacheName { get; } Property Value Type Description System.String The name of the cache. ElementType Gets the type of the element. Declaration Type ElementType { get; } Property Value Type Description System.Type Ignite Gets the Ignite instance associated with this query. Declaration [Obsolete(\"Deprecated, null for thin client.\")] IIgnite Ignite { get; } Property Value Type Description IIgnite Methods GetFieldsQuery() Returns fields query that represents current queryable. Declaration SqlFieldsQuery GetFieldsQuery() Returns Type Description SqlFieldsQuery Fields query that represents current queryable."
  },
  "api/Apache.Ignite.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.IBinaryNameMapper.html": {
    "href": "api/Apache.Ignite.Core.Binary.IBinaryNameMapper.html",
    "title": "Interface IBinaryNameMapper | Apache Ignite.NET",
    "keywords": "Interface IBinaryNameMapper Maps type and field names to different names. Namespace : Apache.Ignite.Core.Binary Assembly : Apache.Ignite.Core.dll Syntax public interface IBinaryNameMapper Methods GetFieldName(String) Gets the field name. Declaration string GetFieldName(string name) Parameters Type Name Description System.String name The name. Returns Type Description System.String Field name. GetTypeName(String) Gets the type name. Declaration string GetTypeName(string name) Parameters Type Name Description System.String name The name. Returns Type Description System.String Type name."
  },
  "api/Apache.Ignite.Core.Binary.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.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.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.QueryField.html": {
    "href": "api/Apache.Ignite.Core.Cache.Configuration.QueryField.html",
    "title": "Class QueryField | Apache Ignite.NET",
    "keywords": "Class QueryField Represents a queryable field. Inheritance System.Object QueryField Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Configuration Assembly : Apache.Ignite.Core.dll Syntax public class QueryField Constructors QueryField() Initializes a new instance of the QueryField class. Declaration public QueryField() QueryField(String, String) Initializes a new instance of the QueryField class. Declaration public QueryField(string name, string javaFieldTypeName) Parameters Type Name Description System.String name Name. System.String javaFieldTypeName Java type name. QueryField(String, Type) Initializes a new instance of the QueryField class. Declaration public QueryField(string name, Type fieldType) Parameters Type Name Description System.String name Name. System.Type fieldType Type. Properties DefaultValue Gets or sets the default value for the field. Declaration public object DefaultValue { get; set; } Property Value Type Description System.Object FieldType Gets or sets the type of the value. This is a shortcut for FieldTypeName . Getter will return null for non-primitive types. Declaration public Type FieldType { get; set; } Property Value Type Description System.Type FieldTypeName Gets the Java type name. Declaration public string FieldTypeName { get; set; } Property Value Type Description System.String IsKeyField Gets or sets a value indicating whether this field belongs to the cache key. Proper value here is required for SQL DML queries which create/modify cache keys. Declaration public bool IsKeyField { get; set; } Property Value Type Description System.Boolean Name Gets or sets the field name. Declaration public string Name { get; set; } Property Value Type Description System.String NotNull Gets or sets a value indicating whether null value is allowed for the field. Declaration public bool NotNull { get; set; } Property Value Type Description System.Boolean Precision Gets or sets the precision for the field. Declaration public int Precision { get; set; } Property Value Type Description System.Int32 Scale Gets or sets the scale for the field. Declaration public int Scale { get; set; } Property Value Type Description System.Int32"
  },
  "api/Apache.Ignite.Core.Cache.Configuration.QueryTextFieldAttribute.html": {
    "href": "api/Apache.Ignite.Core.Cache.Configuration.QueryTextFieldAttribute.html",
    "title": "Class QueryTextFieldAttribute | Apache Ignite.NET",
    "keywords": "Class QueryTextFieldAttribute Marks field or property for Text queries. Using this attribute is an alternative to Fields in CacheConfiguration . Inheritance System.Object System.Attribute QueryTextFieldAttribute Implements System.Runtime.InteropServices._Attribute Inherited Members System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Boolean) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Boolean) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Module) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.IsDefined(System.Reflection.Module, System.Type) System.Attribute.IsDefined(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Boolean) System.Attribute.IsDefined(System.Reflection.Assembly, System.Type) System.Attribute.IsDefined(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.Equals(System.Object) System.Attribute.GetHashCode() System.Attribute.Match(System.Object) System.Attribute.IsDefaultAttribute() System.Attribute.System.Runtime.InteropServices._Attribute.GetTypeInfoCount(System.UInt32) System.Attribute.System.Runtime.InteropServices._Attribute.GetTypeInfo(System.UInt32, System.UInt32, System.IntPtr) System.Attribute.System.Runtime.InteropServices._Attribute.GetIDsOfNames(System.Guid, System.IntPtr, System.UInt32, System.UInt32, System.IntPtr) System.Attribute.System.Runtime.InteropServices._Attribute.Invoke(System.UInt32, System.Guid, System.UInt32, System.Int16, System.IntPtr, System.IntPtr, System.IntPtr, System.IntPtr) System.Attribute.TypeId System.Object.ToString() System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Configuration Assembly : Apache.Ignite.Core.dll Syntax [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)] public sealed class QueryTextFieldAttribute : Attribute, _Attribute Properties Name Gets or sets the text field name. If not provided, property or field name will be used. Declaration public string Name { get; set; } Property Value Type Description System.String Implements System.Runtime.InteropServices._Attribute"
  },
  "api/Apache.Ignite.Core.Cache.Configuration.html": {
    "href": "api/Apache.Ignite.Core.Cache.Configuration.html",
    "title": "Namespace Apache.Ignite.Core.Cache.Configuration | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Cache.Configuration Classes CacheConfiguration Defines grid cache configuration. CacheKeyConfiguration Configuration defining various aspects of cache keys without explicit usage of annotations on user classes. MemoryConfiguration A page memory configuration for an Apache Ignite node. The page memory is a manageable off-heap based memory architecture that divides all continuously allocated memory regions into pages of fixed size. An individual page can store one or many cache key-value entries that allows reusing the memory in the most efficient way and avoid memory fragmentation issues. By default, the page memory allocates a single continuous memory region. All the caches that will be configured in an application will be mapped to this memory region by default, thus, all the cache data will reside in that memory region. If initial size of the default memory region doesn't satisfy requirements or it's required to have multiple memory regions with different properties then MemoryPolicyConfiguration can be used for both scenarios. For instance, using memory policies you can define memory regions of different maximum size, eviction policies, swapping options, etc. Once you define a new memory region you can bind particular Ignite caches to it. To learn more about memory policies refer to MemoryPolicyConfiguration documentation. Obsolete, use DataStorageConfiguration . MemoryPolicyConfiguration Defines page memory policy configuration. See MemoryPolicies . Obsolete, use DataRegionConfiguration . NearCacheConfiguration Defines near cache configuration. Distributed cache can also be fronted by a Near cache, which is a smaller local cache that stores most recently or most frequently accessed data. Just like with a partitioned cache, the user can control the size of the near cache and its eviction policies. 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.ICacheEntry-2.html": {
    "href": "api/Apache.Ignite.Core.Cache.ICacheEntry-2.html",
    "title": "Interface ICacheEntry<TK, TV> | Apache Ignite.NET",
    "keywords": "Interface ICacheEntry<TK, TV> Cache entry interface. Namespace : Apache.Ignite.Core.Cache Assembly : Apache.Ignite.Core.dll Syntax public interface ICacheEntry<out TK, out TV> Type Parameters Name Description TK Key type. TV Value type. Properties Key Gets the key. Declaration TK Key { get; } Property Value Type Description TK Value Gets the value. Declaration TV Value { get; } Property Value Type Description TV"
  },
  "api/Apache.Ignite.Core.Cache.ICacheEntryFilter-2.html": {
    "href": "api/Apache.Ignite.Core.Cache.ICacheEntryFilter-2.html",
    "title": "Interface ICacheEntryFilter<TK, TV> | Apache Ignite.NET",
    "keywords": "Interface ICacheEntryFilter<TK, TV> Cache entry predicate. Namespace : Apache.Ignite.Core.Cache Assembly : Apache.Ignite.Core.dll Syntax public interface ICacheEntryFilter<in TK, in TV> Type Parameters Name Description TK Key type. TV Value type. Methods Invoke(ICacheEntry<TK, TV>) Returns a value indicating whether provided cache entry satisfies this predicate. Declaration bool Invoke(ICacheEntry<TK, TV> entry) Parameters Type Name Description ICacheEntry <TK, TV> entry Cache entry. Returns Type Description System.Boolean Value indicating whether provided cache entry satisfies this predicate."
  },
  "api/Apache.Ignite.Core.Cache.Query.IFieldsQueryCursor.html": {
    "href": "api/Apache.Ignite.Core.Cache.Query.IFieldsQueryCursor.html",
    "title": "Interface IFieldsQueryCursor | Apache Ignite.NET",
    "keywords": "Interface IFieldsQueryCursor Fields query cursor. Inherited Members IQueryCursor<IList<Object>>.GetAll() System.Collections.Generic.IEnumerable<System.Collections.Generic.IList<System.Object>>.GetEnumerator() System.IDisposable.Dispose() Namespace : Apache.Ignite.Core.Cache.Query Assembly : Apache.Ignite.Core.dll Syntax public interface IFieldsQueryCursor : IQueryCursor<IList<object>>, IEnumerable<IList<object>>, IEnumerable, IDisposable Properties FieldNames Gets the field names. Declaration IList<string> FieldNames { get; } Property Value Type Description System.Collections.Generic.IList < System.String >"
  },
  "api/Apache.Ignite.Core.Cache.Query.IQueryCursor-1.html": {
    "href": "api/Apache.Ignite.Core.Cache.Query.IQueryCursor-1.html",
    "title": "Interface IQueryCursor<T> | Apache Ignite.NET",
    "keywords": "Interface IQueryCursor<T> Query result cursor. Can be processed either in iterative mode, or by taking all entries using GetAll() method. Note that you get enumerator or call GetAll() method only once during cursor lifetime. Any further attempts to get enumerator or all entries will result in exception. Inherited Members System.Collections.Generic.IEnumerable<T>.GetEnumerator() System.IDisposable.Dispose() Namespace : Apache.Ignite.Core.Cache.Query Assembly : Apache.Ignite.Core.dll Syntax public interface IQueryCursor<T> : IEnumerable<T>, IEnumerable, IDisposable Type Parameters Name Description T Methods GetAll() Gets all query results. Use this method when you know in advance that query result is relatively small and will not cause memory utilization issues. Declaration IList<T> GetAll() Returns Type Description System.Collections.Generic.IList <T> List containing all query results."
  },
  "api/Apache.Ignite.Core.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.Client.html": {
    "href": "api/Apache.Ignite.Core.Client.html",
    "title": "Namespace Apache.Ignite.Core.Client | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Client Classes IgniteClientConfiguration Ignite thin client configuration. Ignite thin client connects to a specific Ignite node with a socket and does not start JVM in process. This configuration should correspond to ClientConnectorConfiguration on a target node. IgniteClientConfigurationSection Ignite configuration section for app.config and web.config files. IgniteClientException Ignite thin client exception. SslStreamFactory Predefined SSL stream factory, loads certificate from specified file. Interfaces IIgniteClient Main entry point for Ignite Thin Client APIs. You can obtain an instance of IIgniteClient through one of the StartClient() overloads. Instances of this class and all nested APIs are thread safe. ISslStreamFactory SSL Stream Factory defines how SSL connection is established. Enums ClientStatusCode Client status codes (see StatusCode )."
  },
  "api/Apache.Ignite.Core.Cluster.ClusterGroupEmptyException.html": {
    "href": "api/Apache.Ignite.Core.Cluster.ClusterGroupEmptyException.html",
    "title": "Class ClusterGroupEmptyException | Apache Ignite.NET",
    "keywords": "Class ClusterGroupEmptyException Indicates an illegal call on empty projection. Thrown by projection when operation that requires at least one node is called on empty projection. Inheritance System.Object System.Exception IgniteException ClusterGroupEmptyException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cluster Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class ClusterGroupEmptyException : IgniteException, ISerializable, _Exception Constructors ClusterGroupEmptyException() Initializes a new instance of the ClusterGroupEmptyException class. Declaration public ClusterGroupEmptyException() ClusterGroupEmptyException(SerializationInfo, StreamingContext) Initializes a new instance of the ClusterGroupEmptyException class. Declaration protected ClusterGroupEmptyException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization info. System.Runtime.Serialization.StreamingContext ctx Streaming context. ClusterGroupEmptyException(String) Initializes a new instance of the ClusterGroupEmptyException class. Declaration public ClusterGroupEmptyException(string msg) Parameters Type Name Description System.String msg Exception message. ClusterGroupEmptyException(String, Exception) Initializes a new instance of the ClusterGroupEmptyException class. Declaration public ClusterGroupEmptyException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.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.PersistentStore.html": {
    "href": "api/Apache.Ignite.Core.PersistentStore.html",
    "title": "Namespace Apache.Ignite.Core.PersistentStore | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.PersistentStore Classes PersistentStoreConfiguration Configures Apache Ignite persistent store. Obsolete, use DataStorageConfiguration . Interfaces IPersistentStoreMetrics Persistent store metrics. Obsolete, see IDataStorageMetrics . Enums CheckpointWriteOrder Defines checkpoint pages order on disk. WalMode Write Ahead Log mode."
  },
  "api/Apache.Ignite.Core.Plugin.Cache.ICachePluginConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Plugin.Cache.ICachePluginConfiguration.html",
    "title": "Interface ICachePluginConfiguration | Apache Ignite.NET",
    "keywords": "Interface ICachePluginConfiguration Cache plugin configuration marker interface. Starting point to extend CacheConfiguration and extend existing cache functionality. Namespace : Apache.Ignite.Core.Plugin.Cache Assembly : Apache.Ignite.Core.dll Syntax public interface ICachePluginConfiguration Properties CachePluginConfigurationClosureFactoryId Gets the id to locate PlatformCachePluginConfigurationClosureFactory on Java side and read the data written by WriteBinary(IBinaryRawWriter) method. Declaration int ? CachePluginConfigurationClosureFactoryId { get; } Property Value Type Description System.Nullable < System.Int32 > Methods WriteBinary(IBinaryRawWriter) Writes this instance to a raw writer. This method will be called when CachePluginConfigurationClosureFactoryId is not null to propagate configuration to the Java side. Declaration void WriteBinary(IBinaryRawWriter writer) Parameters Type Name Description IBinaryRawWriter writer The writer."
  },
  "api/Apache.Ignite.Core.Transactions.ITransactionMetrics.html": {
    "href": "api/Apache.Ignite.Core.Transactions.ITransactionMetrics.html",
    "title": "Interface ITransactionMetrics | Apache Ignite.NET",
    "keywords": "Interface ITransactionMetrics Transaction metrics, shared across all caches. Namespace : Apache.Ignite.Core.Transactions Assembly : Apache.Ignite.Core.dll Syntax public interface ITransactionMetrics Properties CommitTime Gets the last time transaction was committed. Declaration DateTime CommitTime { get; } Property Value Type Description System.DateTime RollbackTime Gets the last time transaction was rolled back. Declaration DateTime RollbackTime { get; } Property Value Type Description System.DateTime TxCommits Gets the total number of transaction commits. Declaration int TxCommits { get; } Property Value Type Description System.Int32 TxRollbacks Gets the total number of transaction rollbacks. Declaration int TxRollbacks { get; } Property Value Type Description System.Int32"
  },
  "api/Apache.Ignite.Core.Transactions.ITransactions.html": {
    "href": "api/Apache.Ignite.Core.Transactions.ITransactions.html",
    "title": "Interface ITransactions | Apache Ignite.NET",
    "keywords": "Interface ITransactions Transactions facade. All members are thread-safe and may be used concurrently from multiple threads. Namespace : Apache.Ignite.Core.Transactions Assembly : Apache.Ignite.Core.dll Syntax public interface ITransactions Properties DefaultTimeout Gets the default transaction timeout. Declaration TimeSpan DefaultTimeout { get; } Property Value Type Description System.TimeSpan DefaultTimeoutOnPartitionMapExchange Gets the default transaction timeout on partition map exchange. Declaration TimeSpan DefaultTimeoutOnPartitionMapExchange { get; } Property Value Type Description System.TimeSpan DefaultTransactionConcurrency Gets the default transaction concurrency. Declaration TransactionConcurrency DefaultTransactionConcurrency { get; } Property Value Type Description TransactionConcurrency DefaultTransactionIsolation Gets the default transaction isolation. Declaration TransactionIsolation DefaultTransactionIsolation { get; } Property Value Type Description TransactionIsolation Tx Gets transaction started by this thread or null if this thread does not have a transaction. Declaration ITransaction Tx { get; } Property Value Type Description ITransaction Transaction started by this thread or null if this thread does not have a transaction. Methods GetLocalActiveTransactions() Returns a list of active transactions initiated by this node. Declaration ITransactionCollection GetLocalActiveTransactions() Returns Type Description ITransactionCollection Collection of ITransactionCollection GetMetrics() Gets the metrics. Declaration ITransactionMetrics GetMetrics() Returns Type Description ITransactionMetrics ResetMetrics() Resets the metrics. Declaration void ResetMetrics() TxStart() Starts a transaction with default isolation ( DefaultTransactionIsolation , concurrency ( DefaultTransactionConcurrency ), timeout ( DefaultTimeout ), and invalidation policy. All defaults are set in CacheConfiguration at startup. Declaration ITransaction TxStart() Returns Type Description ITransaction New transaction. TxStart(TransactionConcurrency, TransactionIsolation) Starts new transaction with the specified concurrency and isolation. Declaration ITransaction TxStart(TransactionConcurrency concurrency, TransactionIsolation isolation) Parameters Type Name Description TransactionConcurrency concurrency Concurrency. TransactionIsolation isolation Isolation. Returns Type Description ITransaction New transaction. TxStart(TransactionConcurrency, TransactionIsolation, TimeSpan, Int32) Starts new transaction with the specified concurrency and isolation. Declaration ITransaction TxStart(TransactionConcurrency concurrency, TransactionIsolation isolation, TimeSpan timeout, int txSize) Parameters Type Name Description TransactionConcurrency concurrency Concurrency. TransactionIsolation isolation Isolation. System.TimeSpan timeout Timeout. TimeSpan.Zero for indefinite timeout. System.Int32 txSize Number of entries participating in transaction (may be approximate). Returns Type Description ITransaction New transaction. WithLabel(String) Returns instance of Ignite Transactions to mark a transaction with a special label. Declaration ITransactions WithLabel(string label) Parameters Type Name Description System.String label Returns Type Description ITransactions ITransactions"
  },
  "api/Apache.Ignite.Core.Transactions.TransactionConcurrency.html": {
    "href": "api/Apache.Ignite.Core.Transactions.TransactionConcurrency.html",
    "title": "Enum TransactionConcurrency | Apache Ignite.NET",
    "keywords": "Enum TransactionConcurrency Transaction concurrency control. See ITransaction for more information on transaction concurrency controls. Namespace : Apache.Ignite.Core.Transactions Assembly : Apache.Ignite.Core.dll Syntax public enum TransactionConcurrency Fields Name Description Optimistic Optimistic concurrency control. Pessimistic Pessimistic concurrency control."
  },
  "api/Apache.Ignite.Core.Transactions.TransactionConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Transactions.TransactionConfiguration.html",
    "title": "Class TransactionConfiguration | Apache Ignite.NET",
    "keywords": "Class TransactionConfiguration Transactions configuration. Inheritance System.Object TransactionConfiguration Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Transactions Assembly : Apache.Ignite.Core.dll Syntax public class TransactionConfiguration Constructors TransactionConfiguration() Initializes a new instance of the TransactionConfiguration class. Declaration public TransactionConfiguration() Fields DefaultDefaultTimeout The default value for DefaultTransactionIsolation property. Declaration public static readonly TimeSpan DefaultDefaultTimeout Field Value Type Description System.TimeSpan DefaultDefaultTimeoutOnPartitionMapExchange The default value for DefaultTimeoutOnPartitionMapExchange Declaration public static readonly TimeSpan DefaultDefaultTimeoutOnPartitionMapExchange Field Value Type Description System.TimeSpan DefaultDefaultTransactionConcurrency The default value for DefaultTransactionConcurrency property. Declaration public const TransactionConcurrency DefaultDefaultTransactionConcurrency = TransactionConcurrency.Pessimistic Field Value Type Description TransactionConcurrency DefaultDefaultTransactionIsolation The default value for DefaultTransactionIsolation property. Declaration public const TransactionIsolation DefaultDefaultTransactionIsolation = TransactionIsolation.RepeatableRead Field Value Type Description TransactionIsolation DefaultPessimisticTransactionLogLinger The default value for PessimisticTransactionLogLinger property. Declaration public static readonly TimeSpan DefaultPessimisticTransactionLogLinger Field Value Type Description System.TimeSpan DefaultPessimisticTransactionLogSize The default value for PessimisticTransactionLogSize property. Declaration public const int DefaultPessimisticTransactionLogSize = 0 Field Value Type Description System.Int32 Properties DefaultTimeout Gets or sets the cache transaction timeout to use when one is not explicitly specified. System.TimeSpan.Zero for infinite timeout. Declaration public TimeSpan DefaultTimeout { get; set; } Property Value Type Description System.TimeSpan DefaultTimeoutOnPartitionMapExchange Gets or sets transaction timeout for partition map synchronization. System.TimeSpan.Zero for infinite timeout. Declaration public TimeSpan DefaultTimeoutOnPartitionMapExchange { get; set; } Property Value Type Description System.TimeSpan DefaultTransactionConcurrency Gets or sets the cache transaction concurrency to use when one is not explicitly specified. Declaration public TransactionConcurrency DefaultTransactionConcurrency { get; set; } Property Value Type Description TransactionConcurrency DefaultTransactionIsolation Gets or sets the cache transaction isolation to use when one is not explicitly specified. Declaration public TransactionIsolation DefaultTransactionIsolation { get; set; } Property Value Type Description TransactionIsolation PessimisticTransactionLogLinger Gets or sets the delay after which pessimistic recovery entries will be cleaned up for failed node. Declaration public TimeSpan PessimisticTransactionLogLinger { get; set; } Property Value Type Description System.TimeSpan PessimisticTransactionLogSize Gets or sets the size of pessimistic transactions log stored on node in order to recover transaction commit if originating node has left grid before it has sent all messages to transaction nodes. 0 for unlimited. Declaration public int PessimisticTransactionLogSize { get; set; } Property Value Type Description System.Int32"
  },
  "api/Apache.Ignite.AspNet.html": {
    "href": "api/Apache.Ignite.AspNet.html",
    "title": "Namespace Apache.Ignite.AspNet | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.AspNet Classes IgniteOutputCacheProvider ASP.NET output cache provider that uses Ignite cache as a storage. You can either start Ignite yourself, and provide gridName attribute, or provide igniteConfigurationSectionName attribute to start Ignite automatically from specified configuration section (see IgniteConfigurationSection ) using igniteConfigurationSectionName . cacheName attribute specifies Ignite cache name to use for data storage. This attribute can be omitted if cache name is null. IgniteSessionStateStoreProvider ASP.NET Session-State Store Provider that uses Ignite distributed cache as an underlying storage. You can either start Ignite yourself, and provide gridName attribute, or provide igniteConfigurationSectionName attribute to start Ignite automatically from specified configuration section (see IgniteConfigurationSection ) using igniteConfigurationSectionName . cacheName attribute specifies Ignite cache name to use for data storage. This attribute can be omitted if cache name is null. Optional applicationId attribute allows sharing a single Ignite cache between multiple web applications. IgniteWebUtils Ignite web utilities."
  },
  "api/Apache.Ignite.Core.Binary.BinaryTypeConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Binary.BinaryTypeConfiguration.html",
    "title": "Class BinaryTypeConfiguration | Apache Ignite.NET",
    "keywords": "Class BinaryTypeConfiguration Binary type configuration. Inheritance System.Object BinaryTypeConfiguration Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Binary Assembly : Apache.Ignite.Core.dll Syntax public class BinaryTypeConfiguration Constructors BinaryTypeConfiguration() Constructor. Declaration public BinaryTypeConfiguration() BinaryTypeConfiguration(BinaryTypeConfiguration) Copying constructor. Declaration public BinaryTypeConfiguration(BinaryTypeConfiguration cfg) Parameters Type Name Description BinaryTypeConfiguration cfg Configuration to copy. BinaryTypeConfiguration(String) Constructor. Declaration public BinaryTypeConfiguration(string typeName) Parameters Type Name Description System.String typeName Type name. BinaryTypeConfiguration(Type) Constructor. Declaration public BinaryTypeConfiguration(Type type) Parameters Type Name Description System.Type type Type. Properties AffinityKeyFieldName Affinity key field name. Declaration public string AffinityKeyFieldName { get; set; } Property Value Type Description System.String IdMapper ID mapper for the given type. When it is necessary to resolve class (field) ID, then this property will be checked first. Otherwise, ID will be hash code of the class (field) simple name in lower case. Declaration public IBinaryIdMapper IdMapper { get; set; } Property Value Type Description IBinaryIdMapper IsEnum Gets or sets a value indicating whether this instance describes an enum type. Declaration public bool IsEnum { get; set; } Property Value Type Description System.Boolean KeepDeserialized Keep deserialized flag. If set to non-null value, overrides default value set in BinaryTypeConfiguration . Declaration public bool ? KeepDeserialized { get; set; } Property Value Type Description System.Nullable < System.Boolean > NameMapper Name mapper for the given type. Declaration public IBinaryNameMapper NameMapper { get; set; } Property Value Type Description IBinaryNameMapper Serializer Serializer for the given type. If not provided and class implements IBinarizable then its custom logic will be used. If not provided and class doesn't implement IBinarizable then all fields of the class except of those with [NotSerialized] attribute will be serialized with help of reflection. Declaration public IBinarySerializer Serializer { get; set; } Property Value Type Description IBinarySerializer TypeName Fully qualified type name. Declaration public string TypeName { get; set; } Property Value Type Description System.String Methods ToString() Returns a string that represents the current object. Declaration public override string ToString() Returns Type Description System.String A string that represents the current object. Overrides System.Object.ToString()"
  },
  "api/Apache.Ignite.Core.Binary.IBinaryRawReader.html": {
    "href": "api/Apache.Ignite.Core.Binary.IBinaryRawReader.html",
    "title": "Interface IBinaryRawReader | Apache Ignite.NET",
    "keywords": "Interface IBinaryRawReader Raw reader for binary objects. Namespace : Apache.Ignite.Core.Binary Assembly : Apache.Ignite.Core.dll Syntax public interface IBinaryRawReader Methods ReadArray<T>() Read object array. Declaration T[] ReadArray<T>() Returns Type Description T[] Object array. Type Parameters Name Description T ReadBoolean() Read boolean value. Declaration bool ReadBoolean() Returns Type Description System.Boolean Boolean value. ReadBooleanArray() Read boolean array. Declaration bool[] ReadBooleanArray() Returns Type Description System.Boolean [] Boolean array. ReadByte() Read byte value. Declaration byte ReadByte() Returns Type Description System.Byte Byte value. ReadByteArray() Read byte array. Declaration byte[] ReadByteArray() Returns Type Description System.Byte [] Byte array. ReadChar() Read char value. Declaration char ReadChar() Returns Type Description System.Char Char value. ReadCharArray() Read char array. Declaration char[] ReadCharArray() Returns Type Description System.Char [] Char array. ReadCollection() Read collection. Declaration ICollection ReadCollection() Returns Type Description System.Collections.ICollection Collection. ReadCollection(Func<Int32, ICollection>, Action<ICollection, Object>) Read collection. Declaration ICollection ReadCollection(Func<int, ICollection> factory, Action<ICollection, object> adder) Parameters Type Name Description System.Func < System.Int32 , System.Collections.ICollection > factory Factory. System.Action < System.Collections.ICollection , System.Object > adder Adder. Returns Type Description System.Collections.ICollection Collection. ReadDecimal() Read decimal value. Declaration decimal ? ReadDecimal() Returns Type Description System.Nullable < System.Decimal > Decimal value. ReadDecimalArray() Read decimal array. Declaration decimal ? [] ReadDecimalArray() Returns Type Description System.Nullable < System.Decimal >[] Decimal array. ReadDictionary() Read dictionary. Declaration IDictionary ReadDictionary() Returns Type Description System.Collections.IDictionary Dictionary. ReadDictionary(Func<Int32, IDictionary>) Read dictionary. Declaration IDictionary ReadDictionary(Func<int, IDictionary> factory) Parameters Type Name Description System.Func < System.Int32 , System.Collections.IDictionary > factory Factory. Returns Type Description System.Collections.IDictionary Dictionary. ReadDouble() Read double value. Declaration double ReadDouble() Returns Type Description System.Double Double value. ReadDoubleArray() Read double array. Declaration double[] ReadDoubleArray() Returns Type Description System.Double [] Double array. ReadEnum<T>() Read enum value. Declaration T ReadEnum<T>() Returns Type Description T Enum value. Type Parameters Name Description T ReadEnumArray<T>() Read enum array. Declaration T[] ReadEnumArray<T>() Returns Type Description T[] Enum array. Type Parameters Name Description T ReadFloat() Read float value. Declaration float ReadFloat() Returns Type Description System.Single Float value. ReadFloatArray() Read float array. Declaration float[] ReadFloatArray() Returns Type Description System.Single [] Float array. ReadGuid() Read GUID value. Declaration Guid? ReadGuid() Returns Type Description System.Nullable < System.Guid > GUID value. ReadGuidArray() Read GUID array. Declaration Guid? [] ReadGuidArray() Returns Type Description System.Nullable < System.Guid >[] GUID array. ReadInt() Read int value. Declaration int ReadInt() Returns Type Description System.Int32 Int value. ReadIntArray() Read int array. Declaration int[] ReadIntArray() Returns Type Description System.Int32 [] Int array. ReadLong() Read long value. Declaration long ReadLong() Returns Type Description System.Int64 Long value. ReadLongArray() Read long array. Declaration long[] ReadLongArray() Returns Type Description System.Int64 [] Long array. ReadObject<T>() Read object. Declaration T ReadObject<T>() Returns Type Description T Object. Type Parameters Name Description T ReadShort() Read short value. Declaration short ReadShort() Returns Type Description System.Int16 Short value. ReadShortArray() Read short array. Declaration short[] ReadShortArray() Returns Type Description System.Int16 [] Short array. ReadString() Read string value. Declaration string ReadString() Returns Type Description System.String String value. ReadStringArray() Read string array. Declaration string[] ReadStringArray() Returns Type Description System.String [] String array. ReadTimestamp() Read date value in UTC form. Shortcut for ReadTimestamp(false) . Declaration DateTime? ReadTimestamp() Returns Type Description System.Nullable < System.DateTime > Date value. ReadTimestampArray() Read date array in UTC form. Shortcut for ReadTimestampArray(false) . Declaration DateTime? [] ReadTimestampArray() Returns Type Description System.Nullable < System.DateTime >[] Date array."
  },
  "api/Apache.Ignite.Core.Binary.TimestampAttribute.html": {
    "href": "api/Apache.Ignite.Core.Binary.TimestampAttribute.html",
    "title": "Class TimestampAttribute | Apache Ignite.NET",
    "keywords": "Class TimestampAttribute Instructs the serializer to write DateTime fields and properties in Timestamp format, which is interoperable with other platforms and works in SQL, but does not allow non-UTC values. When applied to a struct or a class, changes behavior for all fields and properties. Normally serializer uses WriteObject<T>(String, T) for DateTime fields. This attribute changes the behavior to WriteTimestamp(String, Nullable<DateTime>) . See also ForceTimestamp . Inheritance System.Object System.Attribute TimestampAttribute Implements System.Runtime.InteropServices._Attribute Inherited Members System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Boolean) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Boolean) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Module) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.IsDefined(System.Reflection.Module, System.Type) System.Attribute.IsDefined(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Boolean) System.Attribute.IsDefined(System.Reflection.Assembly, System.Type) System.Attribute.IsDefined(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.Equals(System.Object) System.Attribute.GetHashCode() System.Attribute.Match(System.Object) System.Attribute.IsDefaultAttribute() System.Attribute.System.Runtime.InteropServices._Attribute.GetTypeInfoCount(System.UInt32) System.Attribute.System.Runtime.InteropServices._Attribute.GetTypeInfo(System.UInt32, System.UInt32, System.IntPtr) System.Attribute.System.Runtime.InteropServices._Attribute.GetIDsOfNames(System.Guid, System.IntPtr, System.UInt32, System.UInt32, System.IntPtr) System.Attribute.System.Runtime.InteropServices._Attribute.Invoke(System.UInt32, System.Guid, System.UInt32, System.Int16, System.IntPtr, System.IntPtr, System.IntPtr, System.IntPtr) System.Attribute.TypeId System.Object.ToString() System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Binary Assembly : Apache.Ignite.Core.dll Syntax [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Property | AttributeTargets.Field)] public sealed class TimestampAttribute : Attribute, _Attribute Implements System.Runtime.InteropServices._Attribute"
  },
  "api/Apache.Ignite.Core.Cache.Affinity.Rendezvous.RendezvousAffinityFunction.html": {
    "href": "api/Apache.Ignite.Core.Cache.Affinity.Rendezvous.RendezvousAffinityFunction.html",
    "title": "Class RendezvousAffinityFunction | Apache Ignite.NET",
    "keywords": "Class RendezvousAffinityFunction Affinity function for partitioned cache based on Highest Random Weight algorithm. Inheritance System.Object AffinityFunctionBase RendezvousAffinityFunction Implements IAffinityFunction Inherited Members AffinityFunctionBase.DefaultPartitions AffinityFunctionBase.Partitions AffinityFunctionBase.GetPartition(Object) AffinityFunctionBase.RemoveNode(Guid) AffinityFunctionBase.AssignPartitions(AffinityFunctionContext) AffinityFunctionBase.ExcludeNeighbors System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Affinity.Rendezvous Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class RendezvousAffinityFunction : AffinityFunctionBase, IAffinityFunction Implements IAffinityFunction"
  },
  "api/Apache.Ignite.Core.Cache.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.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.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.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.ICacheEntryProcessor-4.html": {
    "href": "api/Apache.Ignite.Core.Cache.ICacheEntryProcessor-4.html",
    "title": "Interface ICacheEntryProcessor<TK, TV, TArg, TRes> | Apache Ignite.NET",
    "keywords": "Interface ICacheEntryProcessor<TK, TV, TArg, TRes> An invocable function that allows applications to perform compound operations on a cache entry atomically, according the defined consistency of a cache. Any cache entry mutations will not take effect until after the Process(IMutableCacheEntry<TK, TV>, TArg) method has completedS execution. If an exception is thrown by an entry processor, a Caching Implementation must wrap any exception thrown wrapped in an CacheEntryProcessorException If this occurs no mutations will be made to the cache entry. Namespace : Apache.Ignite.Core.Cache Assembly : Apache.Ignite.Core.dll Syntax public interface ICacheEntryProcessor<in TK, TV, in TArg, out TRes> Type Parameters Name Description TK Key type. TV Value type. TArg The type of the processor argument. TRes The type of the processor result. Methods Process(IMutableCacheEntry<TK, TV>, TArg) Process an entry. Declaration TRes Process(IMutableCacheEntry<TK, TV> entry, TArg arg) Parameters Type Name Description IMutableCacheEntry <TK, TV> entry The entry to process. TArg arg The argument. Returns Type Description TRes Processing result."
  },
  "api/Apache.Ignite.Core.Cache.ICacheEntryProcessorResult-2.html": {
    "href": "api/Apache.Ignite.Core.Cache.ICacheEntryProcessorResult-2.html",
    "title": "Interface ICacheEntryProcessorResult<TK, T> | Apache Ignite.NET",
    "keywords": "Interface ICacheEntryProcessorResult<TK, T> Represents a result of processing ICacheEntry<TK, TV> by ICacheEntryProcessor<TK, TV, TArg, TRes> . Namespace : Apache.Ignite.Core.Cache Assembly : Apache.Ignite.Core.dll Syntax public interface ICacheEntryProcessorResult<out TK, out T> Type Parameters Name Description TK Key type. T Processor result type. Properties Key Gets the cache key. Declaration TK Key { get; } Property Value Type Description TK Result Gets the result of processing an entry. If an exception was thrown during the processing of an entry, either by the ICacheEntryProcessor<TK, TV, TArg, TRes> itself or by the Caching implementation, the exceptions will be wrapped and re-thrown as a CacheEntryProcessorException when calling this property. Declaration T Result { get; } Property Value Type Description T The result."
  },
  "api/Apache.Ignite.Core.Cache.Query.QueryBase.html": {
    "href": "api/Apache.Ignite.Core.Cache.Query.QueryBase.html",
    "title": "Class QueryBase | Apache Ignite.NET",
    "keywords": "Class QueryBase Base class for all Ignite cache entry queries. Inheritance System.Object QueryBase ScanQuery<TK, TV> SqlQuery TextQuery Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Query Assembly : Apache.Ignite.Core.dll Syntax public abstract class QueryBase 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.Cache.Store.ICacheStore.html": {
    "href": "api/Apache.Ignite.Core.Cache.Store.ICacheStore.html",
    "title": "Interface ICacheStore | Apache Ignite.NET",
    "keywords": "Interface ICacheStore Non-generic base type for ICacheStore<TK, TV> , used only for configuration property. Users should implement generic ICacheStore<TK, TV> . Namespace : Apache.Ignite.Core.Cache.Store Assembly : Apache.Ignite.Core.dll Syntax public interface ICacheStore"
  },
  "api/Apache.Ignite.Core.Cache.Store.ICacheStoreSession.html": {
    "href": "api/Apache.Ignite.Core.Cache.Store.ICacheStoreSession.html",
    "title": "Interface ICacheStoreSession | Apache Ignite.NET",
    "keywords": "Interface ICacheStoreSession Session for the cache store operations. The main purpose of cache store session is to hold context between multiple store invocations whenever in transaction. For example, you can save current database connection in the session Properties map. You can then commit this connection in the SessionEnd(Boolean) method. Namespace : Apache.Ignite.Core.Cache.Store Assembly : Apache.Ignite.Core.dll Syntax public interface ICacheStoreSession Properties CacheName Cache name for the current store operation. Note that if the same store is reused between different caches, then the cache name will change between different store operations. Declaration string CacheName { get; } Property Value Type Description System.String Properties Current session properties. You can add properties directly to the returned map. Declaration IDictionary<object, object> Properties { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.Object , System.Object >"
  },
  "api/Apache.Ignite.Core.Client.IgniteClientException.html": {
    "href": "api/Apache.Ignite.Core.Client.IgniteClientException.html",
    "title": "Class IgniteClientException | Apache Ignite.NET",
    "keywords": "Class IgniteClientException Ignite thin client exception. Inheritance System.Object System.Exception IgniteException IgniteClientException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Client Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class IgniteClientException : IgniteException, ISerializable, _Exception Constructors IgniteClientException() Initializes a new instance of the IgniteClientException class. Declaration public IgniteClientException() IgniteClientException(SerializationInfo, StreamingContext) Initializes a new instance of the IgniteClientException class. Declaration protected IgniteClientException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. IgniteClientException(String) Initializes a new instance of the IgniteClientException class. Declaration public IgniteClientException(string message) Parameters Type Name Description System.String message The message that describes the error. IgniteClientException(String, Exception) Initializes a new instance of the IgniteClientException class. Declaration public IgniteClientException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. IgniteClientException(String, Exception, ClientStatusCode) Initializes a new instance of the IgniteClientException class. Declaration public IgniteClientException(string message, Exception cause, ClientStatusCode statusCode) Parameters Type Name Description System.String message The message. System.Exception cause The cause. ClientStatusCode statusCode The error code. Properties StatusCode Gets the status code code. Declaration public ClientStatusCode StatusCode { get; } Property Value Type Description ClientStatusCode Methods GetObjectData(SerializationInfo, StreamingContext) When overridden in a derived class, sets the System.Runtime.Serialization.SerializationInfo with information about the exception. Declaration public override void GetObjectData(SerializationInfo info, StreamingContext context) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info The System.Runtime.Serialization.SerializationInfo that holds the serialized object data about the exception being thrown. System.Runtime.Serialization.StreamingContext context The System.Runtime.Serialization.StreamingContext that contains contextual information about the source or destination. Overrides System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) ToString() Returns a System.String that represents this instance. Declaration public override string ToString() Returns Type Description System.String Overrides System.Exception.ToString() Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Client.IIgniteClient.html": {
    "href": "api/Apache.Ignite.Core.Client.IIgniteClient.html",
    "title": "Interface IIgniteClient | Apache Ignite.NET",
    "keywords": "Interface IIgniteClient Main entry point for Ignite Thin Client APIs. You can obtain an instance of IIgniteClient through one of the StartClient() overloads. Instances of this class and all nested APIs are thread safe. Inherited Members System.IDisposable.Dispose() Namespace : Apache.Ignite.Core.Client Assembly : Apache.Ignite.Core.dll Syntax public interface IIgniteClient : IDisposable Properties LocalEndPoint Gets the current local EndPoint. Declaration EndPoint LocalEndPoint { get; } Property Value Type Description System.Net.EndPoint RemoteEndPoint Gets the current remote EndPoint. Declaration EndPoint RemoteEndPoint { get; } Property Value Type Description System.Net.EndPoint Methods CreateCache<TK, TV>(CacheClientConfiguration) Dynamically starts new cache using provided configuration. Declaration ICacheClient<TK, TV> CreateCache<TK, TV>(CacheClientConfiguration configuration) Parameters Type Name Description CacheClientConfiguration configuration Cache configuration. Returns Type Description ICacheClient <TK, TV> Existing or newly created cache. Type Parameters Name Description TK Cache key type. TV Cache value type. CreateCache<TK, TV>(String) Dynamically starts new cache using template configuration. Declaration ICacheClient<TK, TV> CreateCache<TK, TV>(string name) Parameters Type Name Description System.String name Cache name. Returns Type Description ICacheClient <TK, TV> Existing or newly created cache. Type Parameters Name Description TK Cache key type. TV Cache value type. DestroyCache(String) Destroys dynamically created (with CreateCache<TK, TV>(String) or GetOrCreateCache<TK, TV>(String) ) cache. Declaration void DestroyCache(string name) Parameters Type Name Description System.String name The name of the cache to stop. GetBinary() Gets Ignite binary services. Declaration IBinary GetBinary() Returns Type Description IBinary Instance of IBinary interface GetCache<TK, TV>(String) Gets the cache instance for the given name to work with keys and values of specified types. You can get instances of ICacheClient<TK, TV> of the same name, but with different key/value types. These will use the same named cache, but only allow working with entries of specified types. Attempt to retrieve an entry of incompatible type will result in System.InvalidCastException . Use GetCache<TK, TV>(String) in order to work with entries of arbitrary types. Declaration ICacheClient<TK, TV> GetCache<TK, TV>(string name) Parameters Type Name Description System.String name Cache name. Returns Type Description ICacheClient <TK, TV> Cache instance for given name. Type Parameters Name Description TK Cache key type. TV Cache value type. GetCacheNames() Gets the collection of names of currently available caches, or empty collection if there are no caches. Declaration ICollection<string> GetCacheNames() Returns Type Description System.Collections.Generic.ICollection < System.String > Collection of names of currently available caches. GetConfiguration() Gets the configuration. Declaration IgniteClientConfiguration GetConfiguration() Returns Type Description IgniteClientConfiguration GetOrCreateCache<TK, TV>(CacheClientConfiguration) Gets existing cache with the given name or creates new one using provided configuration. Declaration ICacheClient<TK, TV> GetOrCreateCache<TK, TV>(CacheClientConfiguration configuration) Parameters Type Name Description CacheClientConfiguration configuration Cache configuration. Returns Type Description ICacheClient <TK, TV> Existing or newly created cache. Type Parameters Name Description TK Cache key type. TV Cache value type. GetOrCreateCache<TK, TV>(String) Gets existing cache with the given name or creates new one using template configuration. Declaration ICacheClient<TK, TV> GetOrCreateCache<TK, TV>(string name) Parameters Type Name Description System.String name Cache name. Returns Type Description ICacheClient <TK, TV> Existing or newly created cache. Type Parameters Name Description TK Cache key type. TV Cache value type."
  },
  "api/Apache.Ignite.Core.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.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.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.Datastream.StreamVisitor-2.html": {
    "href": "api/Apache.Ignite.Core.Datastream.StreamVisitor-2.html",
    "title": "Class StreamVisitor<TK, TV> | Apache Ignite.NET",
    "keywords": "Class StreamVisitor<TK, TV> Convenience adapter to visit every key-value tuple in the stream. Note that the visitor does not update the cache. Inheritance System.Object StreamVisitor<TK, TV> Implements IStreamReceiver <TK, TV> Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Datastream Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public sealed class StreamVisitor<TK, TV> : IStreamReceiver<TK, TV> Type Parameters Name Description TK The type of the cache key. TV The type of the cache value. Constructors StreamVisitor(Action<ICache<TK, TV>, ICacheEntry<TK, TV>>) Initializes a new instance of the StreamVisitor<TK, TV> class. Declaration public StreamVisitor(Action<ICache<TK, TV>, ICacheEntry<TK, TV>> action) Parameters Type Name Description System.Action < ICache <TK, TV>, ICacheEntry <TK, TV>> action The action to be called on each stream entry. Methods Receive(ICache<TK, TV>, ICollection<ICacheEntry<TK, TV>>) Updates cache with batch of entries. Declaration public void Receive(ICache<TK, TV> cache, ICollection<ICacheEntry<TK, TV>> entries) Parameters Type Name Description ICache <TK, TV> cache Cache. System.Collections.Generic.ICollection < ICacheEntry <TK, TV>> entries Entries. Implements IStreamReceiver<TK, TV>"
  },
  "api/Apache.Ignite.Core.Datastream.html": {
    "href": "api/Apache.Ignite.Core.Datastream.html",
    "title": "Namespace Apache.Ignite.Core.Datastream | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Datastream Classes DataStreamerDefaults Data streamer configuration defaults. StreamTransformer<TK, TV, TArg, TRes> Convenience adapter to transform update existing values in streaming cache based on the previously cached value. StreamVisitor<TK, TV> Convenience adapter to visit every key-value tuple in the stream. Note that the visitor does not update the cache. Interfaces IDataStreamer<TK, TV> Data streamer is responsible for loading external data into cache. It achieves it by properly buffering updates and properly mapping keys to nodes responsible for the data to make sure that there is the least amount of data movement possible and optimal network and memory utilization. Note that streamer will load data concurrently by multiple internal threads, so the data may get to remote nodes in different order from which it was added to the streamer. Also note that IDataStreamer is not the only way to load data into cache. Alternatively you can use LoadCache(Action<TK, TV>, Object[]) method to load data from underlying data store. You can also use standard cache put and putAll operations as well, but they most likely will not perform as well as this class for loading data. And finally, data can be loaded from underlying data store on demand, whenever it is accessed - for this no explicit data loading step is needed. IDataStreamer supports the following configuration properties: PerNodeBufferSizeWhen entries are added to data streamer they are not sent to Ignite right away and are buffered internally for better performance and network utilization. This setting controls the size of internal per-node buffer before buffered data is sent to remote node. Default value is 1024. PerThreadBufferSizeWhen entries are added to data streamer they are not sent to Ignite right away and are buffered internally on per thread basis for better performance and network utilization. This setting controls the size of internal per-thread buffer before buffered data is sent to remote node. Default value is 4096. PerNodeParallelOperationsSometimes data may be added to the data streamer faster than it can be put in cache. In this case, new buffered load messages are sent to remote nodes before responses from previous ones are received. This could cause unlimited heap memory utilization growth on local and remote nodes. To control memory utilization, this setting limits maximum allowed number of parallel buffered load messages that are being processed on remote nodes. If this number is exceeded, then data streamer add/remove methods will block to control memory utilization. Default value is 16. AutoFlushFrequencyAutomatic flush frequency in milliseconds. Essentially, this is the time after which the streamer will make an attempt to submit all data added so far to remote nodes. Note that there is no guarantee that data will be delivered after this concrete attempt (e.g., it can fail when topology is changing), but it won't be lost anyway. Disabled by default (default value is 0 ). IsolatedDefines if data streamer will assume that there are no other concurrent updates and allow data streamer choose most optimal concurrent implementation. Default value is false . All members are thread-safe and may be used concurrently from multiple threads. IStreamReceiver<TK, TV> Updates cache with batch of entries. Usually it is enough to configure AllowOverwrite property and appropriate internal cache receiver will be chosen automatically. But in some cases custom implementation may help to achieve better performance."
  },
  "api/Apache.Ignite.Core.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.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.Plugin.PluginCallback.html": {
    "href": "api/Apache.Ignite.Core.Plugin.PluginCallback.html",
    "title": "Delegate PluginCallback | Apache Ignite.NET",
    "keywords": "Delegate PluginCallback Plugin callback delegate. Namespace : Apache.Ignite.Core.Plugin Assembly : Apache.Ignite.Core.dll Syntax public delegate long PluginCallback(IBinaryRawReader input, IBinaryRawWriter output); Parameters Type Name Description IBinaryRawReader input Input reader. May be null. IBinaryRawWriter output Output writer. May be null. Returns Type Description System.Int64 Result code."
  },
  "api/Apache.Ignite.Core.Plugin.PluginNotFoundException.html": {
    "href": "api/Apache.Ignite.Core.Plugin.PluginNotFoundException.html",
    "title": "Class PluginNotFoundException | Apache Ignite.NET",
    "keywords": "Class PluginNotFoundException Indicates missing Ignite plugin. Inheritance System.Object System.Exception PluginNotFoundException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Plugin Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class PluginNotFoundException : Exception, ISerializable, _Exception Constructors PluginNotFoundException() Initializes a new instance of the PluginNotFoundException class. Declaration public PluginNotFoundException() PluginNotFoundException(SerializationInfo, StreamingContext) Initializes a new instance of the PluginNotFoundException class. Declaration protected PluginNotFoundException(SerializationInfo info, StreamingContext context) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info System.Runtime.Serialization.StreamingContext context PluginNotFoundException(String) Initializes a new instance of the PluginNotFoundException class. Declaration public PluginNotFoundException(string message) Parameters Type Name Description System.String message The message that describes the error. PluginNotFoundException(String, Exception) Initializes a new instance of the PluginNotFoundException class. Declaration public PluginNotFoundException(string message, Exception innerException) Parameters Type Name Description System.String message The error message that explains the reason for the exception. System.Exception innerException The exception that is the cause of the current exception, or a null reference if no inner exception is specified. Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Plugin.PluginProviderTypeAttribute.html": {
    "href": "api/Apache.Ignite.Core.Plugin.PluginProviderTypeAttribute.html",
    "title": "Class PluginProviderTypeAttribute | Apache Ignite.NET",
    "keywords": "Class PluginProviderTypeAttribute When applied to IPluginConfiguration , defines the type of IPluginProvider<TConfig> to instantiate. Inheritance System.Object System.Attribute PluginProviderTypeAttribute Implements System.Runtime.InteropServices._Attribute Inherited Members System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Boolean) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Boolean) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Module) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.IsDefined(System.Reflection.Module, System.Type) System.Attribute.IsDefined(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Boolean) System.Attribute.IsDefined(System.Reflection.Assembly, System.Type) System.Attribute.IsDefined(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.Equals(System.Object) System.Attribute.GetHashCode() System.Attribute.Match(System.Object) System.Attribute.IsDefaultAttribute() System.Attribute.System.Runtime.InteropServices._Attribute.GetTypeInfoCount(System.UInt32) System.Attribute.System.Runtime.InteropServices._Attribute.GetTypeInfo(System.UInt32, System.UInt32, System.IntPtr) System.Attribute.System.Runtime.InteropServices._Attribute.GetIDsOfNames(System.Guid, System.IntPtr, System.UInt32, System.UInt32, System.IntPtr) System.Attribute.System.Runtime.InteropServices._Attribute.Invoke(System.UInt32, System.Guid, System.UInt32, System.Int16, System.IntPtr, System.IntPtr, System.IntPtr, System.IntPtr) System.Attribute.TypeId System.Object.ToString() System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Plugin Assembly : Apache.Ignite.Core.dll Syntax [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct)] public sealed class PluginProviderTypeAttribute : Attribute, _Attribute Constructors PluginProviderTypeAttribute(Type) Initializes new instance of PluginProviderTypeAttribute class. Declaration public PluginProviderTypeAttribute(Type pluginProviderType) Parameters Type Name Description System.Type pluginProviderType Type of the plugin provider. Properties PluginProviderType Gets the plugin provider type. Declaration public Type PluginProviderType { get; } Property Value Type Description System.Type Implements System.Runtime.InteropServices._Attribute"
  },
  "api/Apache.Ignite.Core.Plugin.html": {
    "href": "api/Apache.Ignite.Core.Plugin.html",
    "title": "Namespace Apache.Ignite.Core.Plugin | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Plugin Classes PluginNotFoundException Indicates missing Ignite plugin. PluginProviderTypeAttribute When applied to IPluginConfiguration , defines the type of IPluginProvider<TConfig> to instantiate. Interfaces IPluginConfiguration Plugin configuration interface. Implementations should be linked to corresponding IPluginProvider<TConfig> via PluginProviderTypeAttribute . Example plugin implementation: [PluginProviderType(typeof(MyPluginProvider))] class MyPluginConfig : IPluginConfiguration { int CustomProperty { get; set; } } class MyPluginProvider : IPluginProvider<MyPluginConfig> { ... } IPluginContext<T> Plugin execution context. IPluginProvider<TConfig> Pluggable Ignite component. Should have parameterless constructor. Ignite plugins are loaded according to PluginConfigurations . Delegates PluginCallback Plugin callback delegate."
  },
  "api/Apache.Ignite.Core.Transactions.TransactionRollbackException.html": {
    "href": "api/Apache.Ignite.Core.Transactions.TransactionRollbackException.html",
    "title": "Class TransactionRollbackException | Apache Ignite.NET",
    "keywords": "Class TransactionRollbackException Exception thrown whenever Ignite transactions has been automatically rolled back. Inheritance System.Object System.Exception IgniteException TransactionRollbackException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Transactions Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class TransactionRollbackException : IgniteException, ISerializable, _Exception Constructors TransactionRollbackException() Initializes a new instance of the TransactionRollbackException class. Declaration public TransactionRollbackException() TransactionRollbackException(SerializationInfo, StreamingContext) Initializes a new instance of the TransactionRollbackException class. Declaration protected TransactionRollbackException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. TransactionRollbackException(String) Initializes a new instance of the TransactionRollbackException class. Declaration public TransactionRollbackException(string message) Parameters Type Name Description System.String message The message that describes the error. TransactionRollbackException(String, Exception) Initializes a new instance of the TransactionRollbackException class. Declaration public TransactionRollbackException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.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.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.IBinarySerializer.html": {
    "href": "api/Apache.Ignite.Core.Binary.IBinarySerializer.html",
    "title": "Interface IBinarySerializer | Apache Ignite.NET",
    "keywords": "Interface IBinarySerializer Binary serializer. Namespace : Apache.Ignite.Core.Binary Assembly : Apache.Ignite.Core.dll Syntax public interface IBinarySerializer Methods ReadBinary(Object, IBinaryReader) Read binary object. Declaration void ReadBinary(object obj, IBinaryReader reader) Parameters Type Name Description System.Object obj Instantiated empty object. IBinaryReader reader Binary reader. WriteBinary(Object, IBinaryWriter) Write binary object. Declaration void WriteBinary(object obj, IBinaryWriter writer) Parameters Type Name Description System.Object obj Object. IBinaryWriter writer Binary writer."
  },
  "api/Apache.Ignite.Core.Cache.Affinity.AffinityFunctionContext.html": {
    "href": "api/Apache.Ignite.Core.Cache.Affinity.AffinityFunctionContext.html",
    "title": "Class AffinityFunctionContext | Apache Ignite.NET",
    "keywords": "Class AffinityFunctionContext Affinity function context. Inheritance System.Object AffinityFunctionContext Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Affinity Assembly : Apache.Ignite.Core.dll Syntax public class AffinityFunctionContext Properties Backups Gets number of backups for new assignment. Declaration public int Backups { get; } Property Value Type Description System.Int32 CurrentTopologySnapshot Gets the current topology snapshot. Snapshot will contain only nodes on which the particular cache is configured. List of passed nodes is guaranteed to be sorted in a same order on all nodes on which partition assignment is performed. Declaration public ICollection<IClusterNode> CurrentTopologySnapshot { get; } Property Value Type Description System.Collections.Generic.ICollection < IClusterNode > CurrentTopologyVersion Gets the current topology version. Declaration public AffinityTopologyVersion CurrentTopologyVersion { get; } Property Value Type Description AffinityTopologyVersion DiscoveryEvent Gets the discovery event that caused the topology change. Declaration public DiscoveryEvent DiscoveryEvent { get; } Property Value Type Description DiscoveryEvent Methods GetPreviousAssignment(Int32) Gets the affinity assignment for given partition on previous topology version. First node in returned list is a primary node, other nodes are backups. Declaration public ICollection<IClusterNode> GetPreviousAssignment(int partition) Parameters Type Name Description System.Int32 partition The partition to get previous assignment for. Returns Type Description System.Collections.Generic.ICollection < IClusterNode > List of nodes assigned to a given partition on previous topology version or null if this information is not available."
  },
  "api/Apache.Ignite.Core.Cache.CacheEntryProcessorException.html": {
    "href": "api/Apache.Ignite.Core.Cache.CacheEntryProcessorException.html",
    "title": "Class CacheEntryProcessorException | Apache Ignite.NET",
    "keywords": "Class CacheEntryProcessorException An exception to indicate a problem occurred attempting to execute an ICacheEntryProcessor<TK, TV, TArg, TRes> against an entry. Inheritance System.Object System.Exception IgniteException CacheEntryProcessorException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class CacheEntryProcessorException : IgniteException, ISerializable, _Exception Constructors CacheEntryProcessorException() Initializes a new instance of the CacheEntryProcessorException class. Declaration public CacheEntryProcessorException() CacheEntryProcessorException(Exception) Initializes a new instance of the CacheEntryProcessorException class. Declaration public CacheEntryProcessorException(Exception innerException) Parameters Type Name Description System.Exception innerException The inner exception. CacheEntryProcessorException(SerializationInfo, StreamingContext) Initializes a new instance of the CacheEntryProcessorException class. Declaration protected CacheEntryProcessorException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. CacheEntryProcessorException(String) Initializes a new instance of the CacheEntryProcessorException class. Declaration public CacheEntryProcessorException(string message) Parameters Type Name Description System.String message The message that describes the error. CacheEntryProcessorException(String, Exception) Initializes a new instance of the CacheEntryProcessorException class. Declaration public CacheEntryProcessorException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Cache.Configuration.CacheMode.html": {
    "href": "api/Apache.Ignite.Core.Cache.Configuration.CacheMode.html",
    "title": "Enum CacheMode | Apache Ignite.NET",
    "keywords": "Enum CacheMode Caching modes. Namespace : Apache.Ignite.Core.Cache.Configuration Assembly : Apache.Ignite.Core.dll Syntax public enum CacheMode Fields Name Description Local Specifies local-only cache behaviour. In this mode caches residing on different grid nodes will not know about each other. Other than distribution, Local caches still have all the caching features, such as eviction, expiration, swapping, querying, etc... This mode is very useful when caching read-only data or data that automatically expires at a certain interval and then automatically reloaded from persistence store. Partitioned Specifies partitioned cache behaviour. In this mode the overall key set will be divided into partitions and all partitions will be split equally between participating nodes. Note that partitioned cache is always fronted by local 'near' cache which stores most recent data. Replicated Specifies fully replicated cache behavior. In this mode all the keys are distributed to all participating nodes."
  },
  "api/Apache.Ignite.Core.Cache.Configuration.PartitionLossPolicy.html": {
    "href": "api/Apache.Ignite.Core.Cache.Configuration.PartitionLossPolicy.html",
    "title": "Enum PartitionLossPolicy | Apache Ignite.NET",
    "keywords": "Enum PartitionLossPolicy Partition loss policy. Defines how cache will behave in a case when one or more partitions are lost because of a node(s) failure. All Safe policies prevent a user from interaction with partial data in lost partitions until ResetLostPartitions(IEnumerable<String>) method is called. *All policies allow working with partial data in lost partitions. ReadOnly and ReadWrite* policies do not automatically change partition state and thus do not change rebalancing assignments for such partitions. Namespace : Apache.Ignite.Core.Cache.Configuration Assembly : Apache.Ignite.Core.dll Syntax public enum PartitionLossPolicy Fields Name Description Ignore If partition is lost, reset it's state and do not clear intermediate data. The result of reading from a previously lost and not cleared partition is undefined and may be different on different nodes in the cluster. ReadOnlyAll All writes to the cache will be failed with an exception. All reads will proceed as if all partitions were in a consistent state. The result of reading from a lost partition is undefined and may be different on different nodes in the cluster. ReadOnlySafe All writes to the cache will be failed with an exception, reads will only be allowed for keys in non-lost partitions. Reads from lost partitions will be failed with an exception. ReadWriteAll All reads and writes will proceed as if all partitions were in a consistent state. The result of reading from a lost partition is undefined and may be different on different nodes in the cluster. ReadWriteSafe All reads and writes will be allowed for keys in valid partitions. All reads and writes for keys in lost partitions will be failed with an exception."
  },
  "api/Apache.Ignite.Core.Cache.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.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.Expiry.IExpiryPolicy.html": {
    "href": "api/Apache.Ignite.Core.Cache.Expiry.IExpiryPolicy.html",
    "title": "Interface IExpiryPolicy | Apache Ignite.NET",
    "keywords": "Interface IExpiryPolicy Defines functions to determine when cache entries will expire based on creation, access and modification operations. Namespace : Apache.Ignite.Core.Cache.Expiry Assembly : Apache.Ignite.Core.dll Syntax public interface IExpiryPolicy Methods GetExpiryForAccess() Gets expiry for access operation. If TimeSpan.ZERO is returned, cache entry is considered immediately expired. If null is returned, no change to previously understood expiry is performed. Declaration TimeSpan? GetExpiryForAccess() Returns Type Description System.Nullable < System.TimeSpan > Expiry for access operation. GetExpiryForCreate() Gets expiry for create operation. If TimeSpan.ZERO is returned, cache entry is considered immediately expired and will not be added to cache. If null is returned, no change to previously understood expiry is performed. Declaration TimeSpan? GetExpiryForCreate() Returns Type Description System.Nullable < System.TimeSpan > Expiry for create opeartion. GetExpiryForUpdate() Gets expiry for update operation. If TimeSpan.ZERO is returned, cache entry is considered immediately expired. If null is returned, no change to previously understood expiry is performed. Declaration TimeSpan? GetExpiryForUpdate() Returns Type Description System.Nullable < System.TimeSpan > Expiry for update operation."
  },
  "api/Apache.Ignite.Core.Cache.Query.SqlFieldsQuery.html": {
    "href": "api/Apache.Ignite.Core.Cache.Query.SqlFieldsQuery.html",
    "title": "Class SqlFieldsQuery | Apache Ignite.NET",
    "keywords": "Class SqlFieldsQuery SQL fields query. Inheritance System.Object SqlFieldsQuery Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Query Assembly : Apache.Ignite.Core.dll Syntax public class SqlFieldsQuery Constructors SqlFieldsQuery(String, Boolean, Object[]) Constructor, Declaration public SqlFieldsQuery(string sql, bool loc, params object[] args) Parameters Type Name Description System.String sql SQL. System.Boolean loc Whether query should be executed locally. System.Object [] args Arguments. SqlFieldsQuery(String, Object[]) Constructor. Declaration public SqlFieldsQuery(string sql, params object[] args) Parameters Type Name Description System.String sql SQL. System.Object [] args Arguments. Fields DefaultPageSize Default page size. Declaration public const int DefaultPageSize = 1024 Field Value Type Description System.Int32 Properties Arguments Arguments. Declaration public object[] Arguments { get; set; } Property Value Type Description System.Object [] Colocated Gets or sets a value indicating whether this query operates on colocated data. Whenever Ignite executes a distributed query, it sends sub-queries to individual cluster members. If you know in advance that the elements of your query selection are colocated together on the same node and you group by colocated key (primary or affinity key), then Ignite can make significant performance and network optimizations by grouping data on remote nodes. Declaration public bool Colocated { get; set; } Property Value Type Description System.Boolean EnableDistributedJoins Gets or sets a value indicating whether distributed joins should be enabled for this query. When disabled, join results will only contain colocated data (joins work locally). When enabled, joins work as expected, no matter how the data is distributed. Declaration public bool EnableDistributedJoins { get; set; } Property Value Type Description System.Boolean true if enable distributed joins should be enabled; otherwise, false . EnforceJoinOrder Gets or sets a value indicating whether join order of tables should be enforced. When true, query optimizer will not reorder tables in join. It is not recommended to enable this property until you are sure that your indexes and the query itself are correct and tuned as much as possible but query optimizer still produces wrong join order. Declaration public bool EnforceJoinOrder { get; set; } Property Value Type Description System.Boolean true if join order should be enforced; otherwise, false . Lazy Gets or sets a value indicating whether this SqlFieldsQuery is lazy. By default Ignite attempts to fetch the whole query result set to memory and send it to the client. For small and medium result sets this provides optimal performance and minimize duration of internal database locks, thus increasing concurrency. If result set is too big to fit in available memory this could lead to excessive GC pauses and even OutOfMemoryError. Use this flag as a hint for Ignite to fetch result set lazily, thus minimizing memory consumption at the cost of moderate performance hit. Declaration public bool Lazy { get; set; } Property Value Type Description System.Boolean Local Local flag. When set query will be executed only on local node, so only local entries will be returned as query result. Defaults to false . Declaration public bool Local { get; set; } Property Value Type Description System.Boolean PageSize Optional page size. Defaults to DefaultPageSize . Declaration public int PageSize { get; set; } Property Value Type Description System.Int32 ReplicatedOnly Gets or sets a value indicating whether this query contains only replicated tables. This is a hint for potentially more effective execution. Declaration public bool ReplicatedOnly { get; set; } Property Value Type Description System.Boolean Schema Gets or sets the default schema name for the query. If not set, current cache name is used, which means you can omit schema name for tables within the current cache. Declaration public string Schema { get; set; } Property Value Type Description System.String Sql SQL. Declaration public string Sql { get; set; } Property Value Type Description System.String Timeout Gets or sets the query timeout. Query will be automatically cancelled if the execution timeout is exceeded. Default is System.TimeSpan.Zero , which means no timeout. Declaration public TimeSpan Timeout { get; set; } Property Value Type Description System.TimeSpan Methods ToString() Returns a System.String that represents this instance. Declaration public override string ToString() Returns Type Description System.String A System.String that represents this instance. Overrides System.Object.ToString()"
  },
  "api/Apache.Ignite.Core.Cache.Query.SqlQuery.html": {
    "href": "api/Apache.Ignite.Core.Cache.Query.SqlQuery.html",
    "title": "Class SqlQuery | Apache Ignite.NET",
    "keywords": "Class SqlQuery SQL Query. Inheritance System.Object QueryBase SqlQuery Inherited Members QueryBase.DefaultPageSize QueryBase.Local QueryBase.PageSize System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Query Assembly : Apache.Ignite.Core.dll Syntax public class SqlQuery : QueryBase Constructors SqlQuery(String, String, Boolean, Object[]) Constructor. Declaration public SqlQuery(string queryType, string sql, bool local, params object[] args) Parameters Type Name Description System.String queryType Type. System.String sql SQL. System.Boolean local Whether query should be executed locally. System.Object [] args Arguments. SqlQuery(String, String, Object[]) Constructor. Declaration public SqlQuery(string queryType, string sql, params object[] args) Parameters Type Name Description System.String queryType Type. System.String sql SQL. System.Object [] args Arguments. SqlQuery(Type, String, Boolean, Object[]) Constructor. Declaration public SqlQuery(Type queryType, string sql, bool local, params object[] args) Parameters Type Name Description System.Type queryType Type. System.String sql SQL. System.Boolean local Whether query should be executed locally. System.Object [] args Arguments. SqlQuery(Type, String, Object[]) Constructor. Declaration public SqlQuery(Type queryType, string sql, params object[] args) Parameters Type Name Description System.Type queryType Type. System.String sql SQL. System.Object [] args Arguments. Properties Arguments Arguments. Declaration public object[] Arguments { get; set; } Property Value Type Description System.Object [] EnableDistributedJoins Gets or sets a value indicating whether distributed joins should be enabled for this query. When disabled, join results will only contain colocated data (joins work locally). When enabled, joins work as expected, no matter how the data is distributed. Declaration public bool EnableDistributedJoins { get; set; } Property Value Type Description System.Boolean true if enable distributed joins should be enabled; otherwise, false . QueryType Type. Declaration public string QueryType { get; set; } Property Value Type Description System.String ReplicatedOnly Gets or sets a value indicating whether this query contains only replicated tables. This is a hint for potentially more effective execution. Declaration public bool ReplicatedOnly { get; set; } Property Value Type Description System.Boolean Sql SQL. Declaration public string Sql { get; set; } Property Value Type Description System.String Timeout Gets or sets the query timeout. Query will be automatically cancelled if the execution timeout is exceeded. Default is System.TimeSpan.Zero , which means no timeout. Declaration public TimeSpan Timeout { get; set; } Property Value Type Description System.TimeSpan Methods ToString() Returns a System.String that represents this instance. Declaration public override string ToString() Returns Type Description System.String A System.String that represents this instance. Overrides System.Object.ToString()"
  },
  "api/Apache.Ignite.Core.Client.Cache.html": {
    "href": "api/Apache.Ignite.Core.Client.Cache.html",
    "title": "Namespace Apache.Ignite.Core.Client.Cache | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Client.Cache Classes CacheClientConfiguration Ignite client cache configuration. Same thing as CacheConfiguration , but with a subset of properties that can be accessed from Ignite thin client (see IIgniteClient ). Note that caches created from server nodes can be accessed from thin client, and vice versa. The only difference is that thin client can not read or write certain CacheConfiguration properties, so a separate class exists to make it clear which properties can be used. Interfaces ICacheClient<TK, TV> Client cache API. See GetCache<TK, TV>(String) ."
  },
  "api/Apache.Ignite.Core.Client.ClientStatusCode.html": {
    "href": "api/Apache.Ignite.Core.Client.ClientStatusCode.html",
    "title": "Enum ClientStatusCode | Apache Ignite.NET",
    "keywords": "Enum ClientStatusCode Client status codes (see StatusCode ). Namespace : Apache.Ignite.Core.Client Assembly : Apache.Ignite.Core.dll Syntax public enum ClientStatusCode Fields Name Description AuthenticationFailed Authentication failed. CacheDoesNotExist Specified cache does not exist. CacheExists Cache already exists. Fail Operation failed (general-purpose code). InvalidOpCode Invalid request operation code. SecurityViolation Authorization failure. Success Operation succeeded. TooManyCursors The too many cursors (see MaxOpenCursorsPerConnection )."
  },
  "api/Apache.Ignite.Core.Common.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.DataPageEvictionMode.html": {
    "href": "api/Apache.Ignite.Core.Configuration.DataPageEvictionMode.html",
    "title": "Enum DataPageEvictionMode | Apache Ignite.NET",
    "keywords": "Enum DataPageEvictionMode Memory page eviction mode. Only data pages, that store key-value entries, are eligible for eviction. The other types of pages, like index or system pages, are not evictable. Namespace : Apache.Ignite.Core.Configuration Assembly : Apache.Ignite.Core.dll Syntax public enum DataPageEvictionMode Fields Name Description Disabled Eviction is disabled. Random2Lru Activates Random-2-LRU algorithm which is a scan resistant version of Random-LRU. This algorithm differs from Random-LRU only in a way that two latest access timestamps are stored for every data page. At the eviction time, a minimum between two latest timestamps is taken for further comparison with minimums of other pages that might be evicted. LRU-2 outperforms LRU by resolving \"one-hit wonder\" problem - if a data page is accessed rarely, but accidentally accessed once, its protected from eviction for a long time. RandomLru Random-LRU algorithm. Once a memory region defined by a memory policy is configured, an off-heap array is allocated to track last usage timestamp for every individual data page. The size of the array equals to MaxSize / PageSize . When a data page is accessed, its timestamp gets updated in the tracking array. The page index in the tracking array equals to pageAddress / MaxSize . When some pages need to be evicted, the algorithm randomly chooses 5 indexes from the tracking array and evicts a page with the latest timestamp. If some of the indexes point to non-data pages (index or system pages) then the algorithm picks other pages."
  },
  "api/Apache.Ignite.Core.Configuration.DataRegionConfiguration.html": {
    "href": "api/Apache.Ignite.Core.Configuration.DataRegionConfiguration.html",
    "title": "Class DataRegionConfiguration | Apache Ignite.NET",
    "keywords": "Class DataRegionConfiguration Defines custom data region configuration for Apache Ignite page memory (see DataStorageConfiguration ). For each configured data region Apache Ignite instantiates respective memory regions with different parameters like maximum size, eviction policy, swapping options, etc. An Apache Ignite cache can be mapped to a particular region using DataRegionName method. Inheritance System.Object DataRegionConfiguration Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Configuration Assembly : Apache.Ignite.Core.dll Syntax public class DataRegionConfiguration Constructors DataRegionConfiguration() Initializes a new instance of the DataRegionConfiguration class. Declaration public DataRegionConfiguration() Fields DefaultEmptyPagesPoolSize The default empty pages pool size. Declaration public const int DefaultEmptyPagesPoolSize = 100 Field Value Type Description System.Int32 DefaultEvictionThreshold The default eviction threshold. Declaration public const double DefaultEvictionThreshold = 0.9 Field Value Type Description System.Double DefaultInitialSize The default initial size. Declaration public const long DefaultInitialSize = 268435456L Field Value Type Description System.Int64 DefaultMaxSize The default maximum size, equals to 20% of total RAM. Declaration public static readonly long DefaultMaxSize Field Value Type Description System.Int64 DefaultMetricsRateTimeInterval The default rate time interval. Declaration public static readonly TimeSpan DefaultMetricsRateTimeInterval Field Value Type Description System.TimeSpan DefaultMetricsSubIntervalCount The default sub intervals. Declaration public const int DefaultMetricsSubIntervalCount = 5 Field Value Type Description System.Int32 DefaultPersistenceEnabled Default value for PersistenceEnabled . Declaration public const bool DefaultPersistenceEnabled = false Field Value Type Description System.Boolean Properties CheckpointPageBufferSize Gets or sets the size of the checkpointing page buffer. Default is 0 : Ignite will choose buffer size automatically. Declaration public long CheckpointPageBufferSize { get; set; } Property Value Type Description System.Int64 EmptyPagesPoolSize Gets or sets the minimal number of empty pages to be present in reuse lists for this data region. This parameter ensures that Ignite will be able to successfully evict old data entries when the size of (key, value) pair is slightly larger than page size / 2. Increase this parameter if cache can contain very big entries (total size of pages in this pool should be enough to contain largest cache entry). Declaration public int EmptyPagesPoolSize { get; set; } Property Value Type Description System.Int32 EvictionThreshold Gets or sets the threshold for memory pages eviction initiation. For instance, if the threshold is 0.9 it means that the page memory will start the eviction only after 90% of the memory region is occupied. Declaration public double EvictionThreshold { get; set; } Property Value Type Description System.Double InitialSize Gets or sets initial memory region size. When the used memory size exceeds this value, new chunks of memory will be allocated. Declaration public long InitialSize { get; set; } Property Value Type Description System.Int64 MaxSize Sets maximum memory region size. The total size should not be less than 10 MB due to internal data structures overhead. Declaration public long MaxSize { get; set; } Property Value Type Description System.Int64 MetricsEnabled Gets or sets a value indicating whether memory metrics should be enabled. Metrics can be retrieved with GetDataRegionMetrics() method. Declaration public bool MetricsEnabled { get; set; } Property Value Type Description System.Boolean MetricsRateTimeInterval Gets or sets the rate time interval for AllocationRate and EvictionRate monitoring purposes. For instance, after setting the interval to 60 seconds, subsequent calls to AllocationRate will return average allocation rate (pages per second) for the last minute. Declaration public TimeSpan MetricsRateTimeInterval { get; set; } Property Value Type Description System.TimeSpan MetricsSubIntervalCount Gets or sets the number of sub intervals to split MetricsRateTimeInterval into to calculate AllocationRate and EvictionRate . Bigger value results in more accurate metrics. Declaration public int MetricsSubIntervalCount { get; set; } Property Value Type Description System.Int32 Name Gets or sets the data region name. Declaration public string Name { get; set; } Property Value Type Description System.String PageEvictionMode Gets or sets the page eviction mode. If Disabled is used (default) then an out of memory exception will be thrown if the memory region usage goes beyond MaxSize . Declaration public DataPageEvictionMode PageEvictionMode { get; set; } Property Value Type Description DataPageEvictionMode PersistenceEnabled Gets or sets a value indicating whether disk persistence is enabled for this region. Default is DefaultPersistenceEnabled . Declaration public bool PersistenceEnabled { get; set; } Property Value Type Description System.Boolean SwapPath Gets or sets the the path to the directory for memory-mapped files. Null for no swap. Declaration public string SwapPath { get; set; } Property Value Type Description System.String"
  },
  "api/Apache.Ignite.Core.DataStructures.IAtomicSequence.html": {
    "href": "api/Apache.Ignite.Core.DataStructures.IAtomicSequence.html",
    "title": "Interface IAtomicSequence | Apache Ignite.NET",
    "keywords": "Interface IAtomicSequence Represents a distributed atomic sequence of numbers. Namespace : Apache.Ignite.Core.DataStructures Assembly : Apache.Ignite.Core.dll Syntax public interface IAtomicSequence Properties BatchSize Gets local batch size for this atomic sequence. Declaration int BatchSize { get; set; } Property Value Type Description System.Int32 Sequence batch size. IsClosed Determines whether this instance was removed from cache. Declaration bool IsClosed { get; } Property Value Type Description System.Boolean True if this atomic was removed from cache; otherwise, false. Name Gets the name of this atomic sequence. Declaration string Name { get; } Property Value Type Description System.String Name of this atomic sequence. Methods Add(Int64) Adds specified value to the current value and returns result. Declaration long Add(long value) Parameters Type Name Description System.Int64 value The value to add. Returns Type Description System.Int64 The new value of the atomic sequence. Close() Closes this instance. Declaration void Close() Increment() Increments current value and returns result. Declaration long Increment() Returns Type Description System.Int64 The new value of the atomic sequence. Read() Returns current value. Declaration long Read() Returns Type Description System.Int64 Current value of the atomic sequence."
  },
  "api/Apache.Ignite.Core.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.Encryption.Keystore.html": {
    "href": "api/Apache.Ignite.Core.Encryption.Keystore.html",
    "title": "Namespace Apache.Ignite.Core.Encryption.Keystore | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Encryption.Keystore Classes KeystoreEncryptionSpi IEncryptionSPI implementation base on JDK provided cipher algorithm implementations."
  },
  "api/Apache.Ignite.Core.Encryption.html": {
    "href": "api/Apache.Ignite.Core.Encryption.html",
    "title": "Namespace Apache.Ignite.Core.Encryption | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Encryption Interfaces IEncryptionSpi Encryption SPI. Only predefined implementations are supported: KeystoreEncryptionSpi"
  },
  "api/Apache.Ignite.Core.Events.IEventStorageSpi.html": {
    "href": "api/Apache.Ignite.Core.Events.IEventStorageSpi.html",
    "title": "Interface IEventStorageSpi | Apache Ignite.NET",
    "keywords": "Interface IEventStorageSpi Manages local event storage. Only predefined implementations are supported: NoopEventStorageSpi , MemoryEventStorageSpi . Namespace : Apache.Ignite.Core.Events Assembly : Apache.Ignite.Core.dll Syntax public interface IEventStorageSpi"
  },
  "api/Apache.Ignite.Core.Events.JobEvent.html": {
    "href": "api/Apache.Ignite.Core.Events.JobEvent.html",
    "title": "Class JobEvent | Apache Ignite.NET",
    "keywords": "Class JobEvent Ignite job event. Inheritance System.Object EventBase JobEvent Implements IEvent System.IEquatable < EventBase > Inherited Members EventBase.Id EventBase.LocalOrder EventBase.Node EventBase.Message EventBase.Type EventBase.Name EventBase.Timestamp EventBase.Equals(EventBase) EventBase.Equals(Object) EventBase.GetHashCode() EventBase.ToString() EventBase.ReadNode(IBinaryRawReader) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Events Assembly : Apache.Ignite.Core.dll Syntax public sealed class JobEvent : EventBase, IEvent, IEquatable<EventBase> Properties JobId Gets job ID. Declaration public IgniteGuid? JobId { get; } Property Value Type Description System.Nullable < IgniteGuid > TaskClassName Gets name of task class that triggered this event. Declaration public string TaskClassName { get; } Property Value Type Description System.String TaskName Gets name of the task that triggered the event. Declaration public string TaskName { get; } Property Value Type Description System.String TaskNode Get node where parent task of the job has originated. Declaration public IClusterNode TaskNode { get; } Property Value Type Description IClusterNode TaskSessionId Gets task session ID of the task that triggered this event. Declaration public IgniteGuid? TaskSessionId { get; } Property Value Type Description System.Nullable < IgniteGuid > TaskSubjectId Gets task subject ID. Declaration public Guid? TaskSubjectId { get; } Property Value Type Description System.Nullable < System.Guid > Methods ToShortString() Gets shortened version of ToString result. Declaration public override string ToShortString() Returns Type Description System.String Overrides EventBase.ToShortString() Implements IEvent System.IEquatable<T>"
  },
  "api/Apache.Ignite.Core.Events.LocalEventListener-1.html": {
    "href": "api/Apache.Ignite.Core.Events.LocalEventListener-1.html",
    "title": "Class LocalEventListener<T> | Apache Ignite.NET",
    "keywords": "Class LocalEventListener<T> Generic local event listener holder, see LocalEventListeners . Inheritance System.Object LocalEventListener LocalEventListener<T> Inherited Members LocalEventListener.EventTypes System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Events Assembly : Apache.Ignite.Core.dll Syntax public class LocalEventListener<T> : LocalEventListener where T : IEvent Type Parameters Name Description T Properties Listener Gets or sets the listener. Declaration public IEventListener<T> Listener { get; set; } Property Value Type Description IEventListener <T>"
  },
  "api/Apache.Ignite.Core.Events.LocalEventListener.html": {
    "href": "api/Apache.Ignite.Core.Events.LocalEventListener.html",
    "title": "Class LocalEventListener | Apache Ignite.NET",
    "keywords": "Class LocalEventListener Abstract local event listener holder for LocalEventListeners . Use LocalEventListener<T> derived class. Inheritance System.Object LocalEventListener LocalEventListener <T> Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Events Assembly : Apache.Ignite.Core.dll Syntax public abstract class LocalEventListener Constructors LocalEventListener() Initializes a new instance of the LocalEventListener class. Declaration protected LocalEventListener() Properties EventTypes Gets or sets the event types. Declaration public ICollection<int> EventTypes { get; set; } Property Value Type Description System.Collections.Generic.ICollection < System.Int32 >"
  },
  "api/Apache.Ignite.Core.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.Messaging.IMessageListener-1.html": {
    "href": "api/Apache.Ignite.Core.Messaging.IMessageListener-1.html",
    "title": "Interface IMessageListener<T> | Apache Ignite.NET",
    "keywords": "Interface IMessageListener<T> Represents messaging filter predicate. Namespace : Apache.Ignite.Core.Messaging Assembly : Apache.Ignite.Core.dll Syntax public interface IMessageListener<in T> Type Parameters Name Description T Methods Invoke(Guid, T) Invokes the message listener when a message arrives. Declaration bool Invoke(Guid nodeId, T message) Parameters Type Name Description System.Guid nodeId Message source node identifier. T message Message. Returns Type Description System.Boolean Value indicating whether this instance should remain subscribed. Returning false will unsubscribe this message listener from further notifications."
  },
  "api/Apache.Ignite.Core.Services.ServiceDeploymentException.html": {
    "href": "api/Apache.Ignite.Core.Services.ServiceDeploymentException.html",
    "title": "Class ServiceDeploymentException | Apache Ignite.NET",
    "keywords": "Class ServiceDeploymentException Indicates an error during Grid Services deployment. Inheritance System.Object System.Exception IgniteException ServiceDeploymentException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Services Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class ServiceDeploymentException : IgniteException, ISerializable, _Exception Constructors ServiceDeploymentException() Initializes a new instance of the ServiceDeploymentException class. Declaration public ServiceDeploymentException() ServiceDeploymentException(SerializationInfo, StreamingContext) Initializes a new instance of the IgniteException class. Declaration protected ServiceDeploymentException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. ServiceDeploymentException(String) Initializes a new instance of the ServiceDeploymentException class. Declaration public ServiceDeploymentException(string message) Parameters Type Name Description System.String message The message that describes the error. ServiceDeploymentException(String, IBinaryObject, ICollection<ServiceConfiguration>) Initializes a new instance of the ServiceDeploymentException class. Declaration public ServiceDeploymentException(string message, IBinaryObject binaryCause, ICollection<ServiceConfiguration> failedCfgs) Parameters Type Name Description System.String message The message. IBinaryObject binaryCause The binary cause. System.Collections.Generic.ICollection < ServiceConfiguration > failedCfgs List of failed configurations ServiceDeploymentException(String, Exception) Initializes a new instance of the ServiceDeploymentException class. Declaration public ServiceDeploymentException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. ServiceDeploymentException(String, Exception, ICollection<ServiceConfiguration>) Initializes a new instance of the ServiceDeploymentException class with failed configurations. Declaration public ServiceDeploymentException(string message, Exception cause, ICollection<ServiceConfiguration> failedCfgs) Parameters Type Name Description System.String message The message. System.Exception cause The cause. System.Collections.Generic.ICollection < ServiceConfiguration > failedCfgs List of failed configurations Properties BinaryCause Gets the binary cause. Declaration public IBinaryObject BinaryCause { get; } Property Value Type Description IBinaryObject FailedConfigurations Configurations of services that failed to deploy, could be null Declaration public ICollection<ServiceConfiguration> FailedConfigurations { get; } Property Value Type Description System.Collections.Generic.ICollection < ServiceConfiguration > Methods GetObjectData(SerializationInfo, StreamingContext) When overridden in a derived class, sets the System.Runtime.Serialization.SerializationInfo with information about the exception. Declaration public override void GetObjectData(SerializationInfo info, StreamingContext context) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info The System.Runtime.Serialization.SerializationInfo that holds the serialized object data about the exception being thrown. System.Runtime.Serialization.StreamingContext context The System.Runtime.Serialization.StreamingContext that contains contextual information about the source or destination. Overrides System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Services.ServiceInvocationException.html": {
    "href": "api/Apache.Ignite.Core.Services.ServiceInvocationException.html",
    "title": "Class ServiceInvocationException | Apache Ignite.NET",
    "keywords": "Class ServiceInvocationException Indicates an error during Grid Services invocation. Inheritance System.Object System.Exception IgniteException ServiceInvocationException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Services Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class ServiceInvocationException : IgniteException, ISerializable, _Exception Constructors ServiceInvocationException() Initializes a new instance of the ServiceInvocationException class. Declaration public ServiceInvocationException() ServiceInvocationException(SerializationInfo, StreamingContext) Initializes a new instance of the IgniteException class. Declaration protected ServiceInvocationException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. ServiceInvocationException(String) Initializes a new instance of the ServiceInvocationException class. Declaration public ServiceInvocationException(string message) Parameters Type Name Description System.String message The message that describes the error. ServiceInvocationException(String, IBinaryObject) Initializes a new instance of the ServiceInvocationException class. Declaration public ServiceInvocationException(string message, IBinaryObject binaryCause) Parameters Type Name Description System.String message The message. IBinaryObject binaryCause The binary cause. ServiceInvocationException(String, Exception) Initializes a new instance of the ServiceInvocationException class. Declaration public ServiceInvocationException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. Properties BinaryCause Gets the binary cause. Declaration public IBinaryObject BinaryCause { get; } Property Value Type Description IBinaryObject Methods GetObjectData(SerializationInfo, StreamingContext) When overridden in a derived class, sets the System.Runtime.Serialization.SerializationInfo with information about the exception. Declaration public override void GetObjectData(SerializationInfo info, StreamingContext context) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info The System.Runtime.Serialization.SerializationInfo that holds the serialized object data about the exception being thrown. System.Runtime.Serialization.StreamingContext context The System.Runtime.Serialization.StreamingContext that contains contextual information about the source or destination. Overrides System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Services.html": {
    "href": "api/Apache.Ignite.Core.Services.html",
    "title": "Namespace Apache.Ignite.Core.Services | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Services Classes ServiceConfiguration Service configuration. ServiceDeploymentException Indicates an error during Grid Services deployment. ServiceInvocationException Indicates an error during Grid Services invocation. Interfaces IService Represents Ignite-managed service. IServiceContext Represents service execution context. IServiceDescriptor Service deployment descriptor. IServices Defines functionality to deploy distributed services in the Ignite."
  },
  "api/Apache.Ignite.Core.Ssl.ISslContextFactory.html": {
    "href": "api/Apache.Ignite.Core.Ssl.ISslContextFactory.html",
    "title": "Interface ISslContextFactory | Apache Ignite.NET",
    "keywords": "Interface ISslContextFactory Represents an SSL Context Factory. Only predefined implementation is supported for now: SslContextFactory . Namespace : Apache.Ignite.Core.Ssl Assembly : Apache.Ignite.Core.dll Syntax public interface ISslContextFactory"
  },
  "api/Apache.Ignite.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.Cache.Store.html": {
    "href": "api/Apache.Ignite.Core.Cache.Store.html",
    "title": "Namespace Apache.Ignite.Core.Cache.Store | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Cache.Store Classes CacheParallelLoadStoreAdapter<TK, TV, TData> Cache storage adapter with parallel loading in LoadAll method. CacheStoreAdapter<TK, TV> Cache storage convenience adapter. It provides default implementation for bulk operations, such as LoadAll , PutAll and RemoveAll by sequentially calling corresponding Load , Put and Remove operations. Use this adapter whenever such behaviour is acceptable. However in many cases it maybe more preferable to take advantage of database batch update functionality, and therefore default adapter implementation may not be the best option. Note that LoadCache method has empty implementation because it is essentially up to the user to invoke it with specific arguments. CacheStoreException Indicates an error during CacheStore operation. Interfaces ICacheStore Non-generic base type for ICacheStore<TK, TV> , used only for configuration property. Users should implement generic ICacheStore<TK, TV> . ICacheStore<TK, TV> API for cache persistent storage for read-through and write-through behavior. Generic argument types depend on KeepBinaryInStore property. When true (default), cache store operates on IBinaryObject instances. Otherwise, generic arguments should be the same as in corresponding ICache<TK, TV> . Persistent store is configured in Ignite's Spring XML configuration file via CacheConfiguration.setStore() property. If you have an implementation of cache store in .NET, you should use special Java wrapper which accepts assembly name and class name of .NET store implementation (both properties are mandatory). Optionally, you may specify \"properies\" property to set any property values on an instance of your store. Here is an example: <bean class=\"org.apache.ignite.configuration.CacheConfiguration\"> ... <property name=\"cacheStoreFactory\"> <bean class=\"org.apache.ignite.platform.dotnet.PlatformDotNetCacheStoreFactory\"> <property name=\"assemblyName\" value=\"MyAssembly\"/> <property name=\"className\" value=\"MyApp.MyCacheStore\"/> <property name=\"properties\"> <map> <entry key=\"IntProperty\"> <value type=\"java.lang.Integer\">42</value> </entry> <entry key=\"StringProperty\" value=\"String value\"/> </map> </property> </bean> </property> ... </bean> Assemply name and class name are passed to System.Activator.CreateInstance(String, String) method during node startup to create an instance of cache store. Refer to its documentation for details. All transactional operations of this API are provided with ongoing ITransaction , if any. You can attach any metadata to transaction, e.g. to recognize if several operations belong to the same transaction or not. Here is an example of how attach a ODBC connection as transaction metadata: OdbcConnection conn = tx.Meta(\"some.name\"); if (conn == null) { conn = ...; // Create or get connection. // Store connection in transaction metadata, so it can be accessed // for other operations on the same transaction. tx.AddMeta(\"some.name\", conn); } ICacheStoreSession Session for the cache store operations. The main purpose of cache store session is to hold context between multiple store invocations whenever in transaction. For example, you can save current database connection in the session Properties map. You can then commit this connection in the SessionEnd(Boolean) method."
  },
  "api/Apache.Ignite.Core.Cache.html": {
    "href": "api/Apache.Ignite.Core.Cache.html",
    "title": "Namespace Apache.Ignite.Core.Cache | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.Core.Cache Classes CacheEntryProcessorException An exception to indicate a problem occurred attempting to execute an ICacheEntryProcessor<TK, TV, TArg, TRes> against an entry. CacheException Indicates an error during Cache operation. CachePartialUpdateException Exception thrown from non-transactional cache in case when update succeeded only partially. Structs CacheResult<T> Represents a cache operation result with a success flag. Interfaces ICache<TK, TV> Main entry point for Ignite cache APIs. You can get a named cache by calling GetCache<TK, TV>(String) method. Cache API supports distributed transactions. All Get(...) , Put(...) , Replace(...) , and Remove(...) operations are transactional and will participate in an ongoing transaction, if any. Other methods like Peek(...) or various Contains(...) methods may be transaction-aware, i.e. check in-transaction entries first, but will not affect the current state of transaction. See ITransaction documentation for more information about transactions. Neither null keys or values are allowed to be stored in cache. If a null value happens to be in cache (e.g. after invalidation or remove), then cache will treat this case as there is no value at all. Note that cache is generic and you can only work with provided key and value types. If cache also contains keys or values of other types, any attempt to retrieve them will result in System.InvalidCastException . Use ICache<TK, TV> in order to work with entries of arbitrary types. All members are thread-safe and may be used concurrently from multiple threads. ICacheAffinity Provides affinity information to detect which node is primary and which nodes are backups for a partitioned cache. You can get an instance of this interface by calling GetAffinity(String) method. Mapping of a key to a node is a three-step operation. First step will get an affinity key for given key using CacheAffinityKeyMapper . If mapper is not specified, the original key will be used. Second step will map affinity key to partition using CacheAffinityFunction.partition(Object) method. Third step will map obtained partition to nodes for current grid topology version. Interface provides various mapKeysToNodes(...) methods which provide node affinity mapping for given keys. All mapKeysToNodes(...) methods are not transactional and will not enlist keys into ongoing transaction. All members are thread-safe and may be used concurrently from multiple threads. ICacheEntry<TK, TV> Cache entry interface. ICacheEntryFilter<TK, TV> Cache entry predicate. ICacheEntryProcessor<TK, TV, TArg, TRes> An invocable function that allows applications to perform compound operations on a cache entry atomically, according the defined consistency of a cache. Any cache entry mutations will not take effect until after the Process(IMutableCacheEntry<TK, TV>, TArg) method has completedS execution. If an exception is thrown by an entry processor, a Caching Implementation must wrap any exception thrown wrapped in an CacheEntryProcessorException If this occurs no mutations will be made to the cache entry. ICacheEntryProcessorResult<TK, T> Represents a result of processing ICacheEntry<TK, TV> by ICacheEntryProcessor<TK, TV, TArg, TRes> . ICacheLock Cache locking interface. All members are thread-safe and may be used concurrently from multiple threads. ICacheMetrics Cache metrics used to obtain statistics on cache itself. IMemoryMetrics Memory usage metrics. Obsolete, use IDataRegionMetrics . IMutableCacheEntry<TK, TV> Mutable representation of ICacheEntry<TK, TV> IQueryMetrics Cache query metrics used to obtain statistics on query. Enums CachePeekMode Enumeration of all supported cache peek modes."
  },
  "api/Apache.Ignite.Core.Client.ISslStreamFactory.html": {
    "href": "api/Apache.Ignite.Core.Client.ISslStreamFactory.html",
    "title": "Interface ISslStreamFactory | Apache Ignite.NET",
    "keywords": "Interface ISslStreamFactory SSL Stream Factory defines how SSL connection is established. Namespace : Apache.Ignite.Core.Client Assembly : Apache.Ignite.Core.dll Syntax public interface ISslStreamFactory Methods Create(Stream, String) Creates the SSL stream. Declaration SslStream Create(Stream stream, string targetHost) Parameters Type Name Description System.IO.Stream stream The underlying raw stream. System.String targetHost Target host. Returns Type Description System.Net.Security.SslStream SSL stream."
  },
  "api/Apache.Ignite.Core.Client.SslStreamFactory.html": {
    "href": "api/Apache.Ignite.Core.Client.SslStreamFactory.html",
    "title": "Class SslStreamFactory | Apache Ignite.NET",
    "keywords": "Class SslStreamFactory Predefined SSL stream factory, loads certificate from specified file. Inheritance System.Object SslStreamFactory Implements ISslStreamFactory Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Client Assembly : Apache.Ignite.Core.dll Syntax public class SslStreamFactory : ISslStreamFactory Constructors SslStreamFactory() Initializes a new instance of the SslStreamFactory class. Declaration public SslStreamFactory() Fields DefaultSslProtocols Default SSL protocols. Declaration public const SslProtocols DefaultSslProtocols = SslProtocols.Tls Field Value Type Description System.Security.Authentication.SslProtocols Properties CertificatePassword Gets or sets the certificate file password. Declaration public string CertificatePassword { get; set; } Property Value Type Description System.String CertificatePath Gets or sets the certificate file (pfx) path. Java certificates can be converted with keytool : keytool -importkeystore -srckeystore thekeystore.jks -srcstoretype JKS -destkeystore thekeystore.pfx -deststoretype PKCS12 Declaration public string CertificatePath { get; set; } Property Value Type Description System.String CheckCertificateRevocation Gets or sets a value indicating whether the certificate revocation list is checked during authentication. Declaration public bool CheckCertificateRevocation { get; set; } Property Value Type Description System.Boolean SkipServerCertificateValidation Gets or sets a value indicating whether to ignore invalid remote (server) certificates. This may be useful for testing with self-signed certificates. Declaration public bool SkipServerCertificateValidation { get; set; } Property Value Type Description System.Boolean SslProtocols Gets or sets the SSL protocols. Declaration public SslProtocols SslProtocols { get; set; } Property Value Type Description System.Security.Authentication.SslProtocols Methods Create(Stream, String) Declaration public SslStream Create(Stream stream, string targetHost) Parameters Type Name Description System.IO.Stream stream System.String targetHost Returns Type Description System.Net.Security.SslStream Implements ISslStreamFactory"
  },
  "api/Apache.Ignite.Core.Common.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.ComputeJobFailoverException.html": {
    "href": "api/Apache.Ignite.Core.Compute.ComputeJobFailoverException.html",
    "title": "Class ComputeJobFailoverException | Apache Ignite.NET",
    "keywords": "Class ComputeJobFailoverException This runtime exception can be thrown from Execute() method to force job failover to another node within task topology. IComputeFunc<TArg, TRes> or IComputeFunc<TRes> passed into any of the ICompute methods can also throw this exception to force failover. Inheritance System.Object System.Exception IgniteException ComputeJobFailoverException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Compute Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class ComputeJobFailoverException : IgniteException, ISerializable, _Exception Constructors ComputeJobFailoverException() Initializes a new instance of the ComputeJobFailoverException class. Declaration public ComputeJobFailoverException() ComputeJobFailoverException(SerializationInfo, StreamingContext) Initializes a new instance of the ComputeJobFailoverException class. Declaration protected ComputeJobFailoverException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. ComputeJobFailoverException(String) Initializes a new instance of the ComputeJobFailoverException class. Declaration public ComputeJobFailoverException(string message) Parameters Type Name Description System.String message The message that describes the error. ComputeJobFailoverException(String, Exception) Initializes a new instance of the ComputeJobFailoverException class. Declaration public ComputeJobFailoverException(string message, Exception cause) Parameters Type Name Description System.String message The message. System.Exception cause The cause. Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Compute.ComputeJobResultPolicy.html": {
    "href": "api/Apache.Ignite.Core.Compute.ComputeJobResultPolicy.html",
    "title": "Enum ComputeJobResultPolicy | Apache Ignite.NET",
    "keywords": "Enum ComputeJobResultPolicy This enumeration provides different types of actions following the last received job result. See OnResult(IComputeJobResult<TJobRes>, IList<IComputeJobResult<TJobRes>>) for more details. Namespace : Apache.Ignite.Core.Compute Assembly : Apache.Ignite.Core.dll Syntax public enum ComputeJobResultPolicy Fields Name Description Failover Fail-over job to execute on another node. Reduce Ignore all not yet received results and start reducing results. Wait Wait for results if any are still expected. If all results have been received - it will start reducing results."
  },
  "api/Apache.Ignite.Core.Compute.IComputeReducer-2.html": {
    "href": "api/Apache.Ignite.Core.Compute.IComputeReducer-2.html",
    "title": "Interface IComputeReducer<TRes, TReduceRes> | Apache Ignite.NET",
    "keywords": "Interface IComputeReducer<TRes, TReduceRes> Compute reducer which is capable of result collecting and reducing. Namespace : Apache.Ignite.Core.Compute Assembly : Apache.Ignite.Core.dll Syntax public interface IComputeReducer<in TRes, out TReduceRes> Type Parameters Name Description TRes Type of results passed for reducing. TReduceRes Type of reduced result. Methods Collect(TRes) Collect closure execution result. Declaration bool Collect(TRes res) Parameters Type Name Description TRes res Result. Returns Type Description System.Boolean True to continue collecting results until all closures are finished, false to start reducing. Reduce() Reduce closure execution results collected earlier. Declaration TReduceRes Reduce() Returns Type Description TReduceRes Reduce result."
  },
  "api/Apache.Ignite.Core.Compute.IComputeTask-2.html": {
    "href": "api/Apache.Ignite.Core.Compute.IComputeTask-2.html",
    "title": "Interface IComputeTask<TJobRes, TReduceRes> | Apache Ignite.NET",
    "keywords": "Interface IComputeTask<TJobRes, TReduceRes> IComputeTask without an argument. Inherited Members IComputeTask<Object, TJobRes, TReduceRes>.Map(IList<IClusterNode>, Object) IComputeTask<Object, TJobRes, TReduceRes>.OnResult(IComputeJobResult<TJobRes>, IList<IComputeJobResult<TJobRes>>) IComputeTask<Object, TJobRes, TReduceRes>.Reduce(IList<IComputeJobResult<TJobRes>>) Namespace : Apache.Ignite.Core.Compute Assembly : Apache.Ignite.Core.dll Syntax public interface IComputeTask<TJobRes, out TReduceRes> : IComputeTask<object, TJobRes, TReduceRes> Type Parameters Name Description TJobRes TReduceRes"
  },
  "api/Apache.Ignite.Core.DataStructures.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.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.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.NLog.IgniteNLogLogger.html": {
    "href": "api/Apache.Ignite.NLog.IgniteNLogLogger.html",
    "title": "Class IgniteNLogLogger | Apache Ignite.NET",
    "keywords": "Class IgniteNLogLogger Ignite NLog integration. Inheritance System.Object IgniteNLogLogger Implements ILogger Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.NLog Assembly : Apache.Ignite.NLog.dll Syntax public class IgniteNLogLogger : ILogger Constructors IgniteNLogLogger() Initializes a new instance of the IgniteNLogLogger class using the NLog.LogManager.GetCurrentClassLogger to retrieve the NLog logger. Declaration public IgniteNLogLogger() IgniteNLogLogger(Logger) Initializes a new instance of the IgniteNLogLogger class. Declaration public IgniteNLogLogger(Logger logger) Parameters Type Name Description NLog.Logger logger The NLog logger instance. Methods ConvertLogLevel(LogLevel) Converts the Ignite LogLevel to the NLog log level. Declaration public static LogLevel ConvertLogLevel(LogLevel level) Parameters Type Name Description LogLevel level The Ignite log level. Returns Type Description NLog.LogLevel Corresponding NLog log level. IsEnabled(LogLevel) Determines whether the specified log level is enabled. Declaration public bool IsEnabled(LogLevel level) Parameters Type Name Description LogLevel level The level. Returns Type Description System.Boolean Value indicating whether the specified log level is enabled Exceptions Type Condition System.NotImplementedException Log(LogLevel, String, Object[], IFormatProvider, String, String, Exception) Logs the specified message. Declaration public void Log(LogLevel level, string message, object[] args, IFormatProvider formatProvider, string category, string nativeErrorInfo, Exception ex) Parameters Type Name Description LogLevel level The level. System.String message The message. System.Object [] args The arguments to format message . Can be null (formatting will not occur). System.IFormatProvider formatProvider The format provider. Can be null if args is null. System.String category The logging category name. System.String nativeErrorInfo The native error information. System.Exception ex The exception. Can be null. Exceptions Type Condition System.NotImplementedException Implements ILogger"
  },
  "api/Apache.Ignite.NLog.html": {
    "href": "api/Apache.Ignite.NLog.html",
    "title": "Namespace Apache.Ignite.NLog | Apache Ignite.NET",
    "keywords": "Namespace Apache.Ignite.NLog Classes IgniteNLogLogger Ignite NLog integration."
  },
  "api/Apache.Ignite.AspNet.IgniteSessionStateStoreProvider.html": {
    "href": "api/Apache.Ignite.AspNet.IgniteSessionStateStoreProvider.html",
    "title": "Class IgniteSessionStateStoreProvider | Apache Ignite.NET",
    "keywords": "Class IgniteSessionStateStoreProvider ASP.NET Session-State Store Provider that uses Ignite distributed cache as an underlying storage. You can either start Ignite yourself, and provide gridName attribute, or provide igniteConfigurationSectionName attribute to start Ignite automatically from specified configuration section (see IgniteConfigurationSection ) using igniteConfigurationSectionName . cacheName attribute specifies Ignite cache name to use for data storage. This attribute can be omitted if cache name is null. Optional applicationId attribute allows sharing a single Ignite cache between multiple web applications. Inheritance System.Object System.Configuration.Provider.ProviderBase System.Web.SessionState.SessionStateStoreProviderBase IgniteSessionStateStoreProvider Inherited Members System.Configuration.Provider.ProviderBase.Name System.Configuration.Provider.ProviderBase.Description System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.AspNet Assembly : Apache.Ignite.AspNet.dll Syntax public class IgniteSessionStateStoreProvider : SessionStateStoreProviderBase Fields DefaultCacheName The default cache name to be used when cacheName attribute is not specified. Declaration public const string DefaultCacheName = \"ASPNET_SESSION_STATE\" Field Value Type Description System.String Methods CreateNewStoreData(HttpContext, Int32) Creates a new System.Web.SessionState.SessionStateStoreData object to be used for the current request. Declaration public override SessionStateStoreData CreateNewStoreData(HttpContext context, int timeout) Parameters Type Name Description System.Web.HttpContext context The System.Web.HttpContext for the current request. System.Int32 timeout The session-state System.Web.SessionState.HttpSessionState.Timeout value for the new System.Web.SessionState.SessionStateStoreData , in minutes. Returns Type Description System.Web.SessionState.SessionStateStoreData A new System.Web.SessionState.SessionStateStoreData for the current request. Overrides System.Web.SessionState.SessionStateStoreProviderBase.CreateNewStoreData(System.Web.HttpContext, System.Int32) CreateUninitializedItem(HttpContext, String, Int32) Adds a new session-state item to the data store. Declaration public override void CreateUninitializedItem(HttpContext context, string id, int timeout) Parameters Type Name Description System.Web.HttpContext context The System.Web.HttpContext for the current request. System.String id The System.Web.SessionState.HttpSessionState.SessionID for the current request. System.Int32 timeout The session System.Web.SessionState.HttpSessionState.Timeout for the current request, in minutes. Overrides System.Web.SessionState.SessionStateStoreProviderBase.CreateUninitializedItem(System.Web.HttpContext, System.String, System.Int32) Dispose() Releases all resources used by the System.Web.SessionState.SessionStateStoreProviderBase implementation. Declaration public override void Dispose() Overrides System.Web.SessionState.SessionStateStoreProviderBase.Dispose() EndRequest(HttpContext) Called by the System.Web.SessionState.SessionStateModule object at the end of a request. Declaration public override void EndRequest(HttpContext context) Parameters Type Name Description System.Web.HttpContext context The System.Web.HttpContext for the current request. Overrides System.Web.SessionState.SessionStateStoreProviderBase.EndRequest(System.Web.HttpContext) GetItem(HttpContext, String, out Boolean, out TimeSpan, out Object, out SessionStateActions) Returns read-only session-state data from the session data store. Declaration public override SessionStateStoreData GetItem(HttpContext context, string id, out bool locked, out TimeSpan lockAge, out object lockId, out SessionStateActions actions) Parameters Type Name Description System.Web.HttpContext context The System.Web.HttpContext for the current request. System.String id The System.Web.SessionState.HttpSessionState.SessionID for the current request. System.Boolean locked When this method returns, contains a Boolean value that is set to true if the requested session item is locked at the session data store; otherwise, false. System.TimeSpan lockAge When this method returns, contains a System.TimeSpan object that is set to the amount of time that an item in the session data store has been locked. System.Object lockId When this method returns, contains an object that is set to the lock identifier for the current request. For details on the lock identifier, see \"Locking Session-Store Data\" in the System.Web.SessionState.SessionStateStoreProviderBase class summary. System.Web.SessionState.SessionStateActions actions When this method returns, contains one of the System.Web.SessionState.SessionStateActions values, indicating whether the current session is an uninitialized, cookieless session. Returns Type Description System.Web.SessionState.SessionStateStoreData A System.Web.SessionState.SessionStateStoreData populated with session values and information from the session data store. Overrides System.Web.SessionState.SessionStateStoreProviderBase.GetItem(System.Web.HttpContext, System.String, System.Boolean, System.TimeSpan, System.Object, System.Web.SessionState.SessionStateActions) GetItemExclusive(HttpContext, String, out Boolean, out TimeSpan, out Object, out SessionStateActions) Returns read-only session-state data from the session data store. Declaration public override SessionStateStoreData GetItemExclusive(HttpContext context, string id, out bool locked, out TimeSpan lockAge, out object lockId, out SessionStateActions actions) Parameters Type Name Description System.Web.HttpContext context The System.Web.HttpContext for the current request. System.String id The System.Web.SessionState.HttpSessionState.SessionID for the current request. System.Boolean locked When this method returns, contains a Boolean value that is set to true if a lock is successfully obtained; otherwise, false. System.TimeSpan lockAge When this method returns, contains a System.TimeSpan object that is set to the amount of time that an item in the session data store has been locked. System.Object lockId When this method returns, contains an object that is set to the lock identifier for the current request. For details on the lock identifier, see \"Locking Session-Store Data\" in the System.Web.SessionState.SessionStateStoreProviderBase class summary. System.Web.SessionState.SessionStateActions actions When this method returns, contains one of the System.Web.SessionState.SessionStateActions values, indicating whether the current session is an uninitialized, cookieless session. Returns Type Description System.Web.SessionState.SessionStateStoreData A System.Web.SessionState.SessionStateStoreData populated with session values and information from the session data store. Overrides System.Web.SessionState.SessionStateStoreProviderBase.GetItemExclusive(System.Web.HttpContext, System.String, System.Boolean, System.TimeSpan, System.Object, System.Web.SessionState.SessionStateActions) Initialize(String, NameValueCollection) Initializes the provider. Declaration public override void Initialize(string name, NameValueCollection config) Parameters Type Name Description System.String name The friendly name of the provider. System.Collections.Specialized.NameValueCollection config A collection of the name/value pairs representing the provider-specific attributes specified in the configuration for this provider. Overrides System.Configuration.Provider.ProviderBase.Initialize(System.String, System.Collections.Specialized.NameValueCollection) InitializeRequest(HttpContext) Called by the System.Web.SessionState.SessionStateModule object for per-request initialization. Declaration public override void InitializeRequest(HttpContext context) Parameters Type Name Description System.Web.HttpContext context The System.Web.HttpContext for the current request. Overrides System.Web.SessionState.SessionStateStoreProviderBase.InitializeRequest(System.Web.HttpContext) ReleaseItemExclusive(HttpContext, String, Object) Releases a lock on an item in the session data store. Declaration public override void ReleaseItemExclusive(HttpContext context, string id, object lockId) Parameters Type Name Description System.Web.HttpContext context The System.Web.HttpContext for the current request. System.String id The session identifier for the current request. System.Object lockId The lock identifier for the current request. Overrides System.Web.SessionState.SessionStateStoreProviderBase.ReleaseItemExclusive(System.Web.HttpContext, System.String, System.Object) RemoveItem(HttpContext, String, Object, SessionStateStoreData) Deletes item data from the session data store. Declaration public override void RemoveItem(HttpContext context, string id, object lockId, SessionStateStoreData item) Parameters Type Name Description System.Web.HttpContext context The System.Web.HttpContext for the current request. System.String id The session identifier for the current request. System.Object lockId The lock identifier for the current request. System.Web.SessionState.SessionStateStoreData item The System.Web.SessionState.SessionStateStoreData that represents the item to delete from the data store. Overrides System.Web.SessionState.SessionStateStoreProviderBase.RemoveItem(System.Web.HttpContext, System.String, System.Object, System.Web.SessionState.SessionStateStoreData) ResetItemTimeout(HttpContext, String) Updates the expiration date and time of an item in the session data store. Declaration public override void ResetItemTimeout(HttpContext context, string id) Parameters Type Name Description System.Web.HttpContext context The System.Web.HttpContext for the current request. System.String id The session identifier for the current request. Overrides System.Web.SessionState.SessionStateStoreProviderBase.ResetItemTimeout(System.Web.HttpContext, System.String) SetAndReleaseItemExclusive(HttpContext, String, SessionStateStoreData, Object, Boolean) Updates the session-item information in the session-state data store with values from the current request, and clears the lock on the data. Declaration public override void SetAndReleaseItemExclusive(HttpContext context, string id, SessionStateStoreData item, object lockId, bool newItem) Parameters Type Name Description System.Web.HttpContext context The System.Web.HttpContext for the current request. System.String id The session identifier for the current request. System.Web.SessionState.SessionStateStoreData item The System.Web.SessionState.SessionStateStoreData object that contains the current session values to be stored. System.Object lockId The lock identifier for the current request. System.Boolean newItem true to identify the session item as a new item; false to identify the session item as an existing item. Overrides System.Web.SessionState.SessionStateStoreProviderBase.SetAndReleaseItemExclusive(System.Web.HttpContext, System.String, System.Web.SessionState.SessionStateStoreData, System.Object, System.Boolean) SetItemExpireCallback(SessionStateItemExpireCallback) Sets a reference to the System.Web.SessionState.SessionStateItemExpireCallback delegate for the Session_OnEnd event defined in the Global.asax file. Declaration public override bool SetItemExpireCallback(SessionStateItemExpireCallback expireCallback) Parameters Type Name Description System.Web.SessionState.SessionStateItemExpireCallback expireCallback The System.Web.SessionState.SessionStateItemExpireCallback delegate for the Session_OnEnd event defined in the Global.asax file. Returns Type Description System.Boolean true if the session-state store provider supports calling the Session_OnEnd event; otherwise, false. Overrides System.Web.SessionState.SessionStateStoreProviderBase.SetItemExpireCallback(System.Web.SessionState.SessionStateItemExpireCallback)"
  },
  "api/Apache.Ignite.Core.Binary.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.IBinaryReader.html": {
    "href": "api/Apache.Ignite.Core.Binary.IBinaryReader.html",
    "title": "Interface IBinaryReader | Apache Ignite.NET",
    "keywords": "Interface IBinaryReader Reader for binary objects. Namespace : Apache.Ignite.Core.Binary Assembly : Apache.Ignite.Core.dll Syntax public interface IBinaryReader Methods GetRawReader() Get raw reader. Declaration IBinaryRawReader GetRawReader() Returns Type Description IBinaryRawReader Raw reader. ReadArray<T>(String) Read named object array. Declaration T[] ReadArray<T>(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description T[] Object array. Type Parameters Name Description T ReadBoolean(String) Read named boolean value. Declaration bool ReadBoolean(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Boolean Boolean value. ReadBooleanArray(String) Read named boolean array. Declaration bool[] ReadBooleanArray(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Boolean [] Boolean array. ReadByte(String) Read named byte value. Declaration byte ReadByte(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Byte Byte value. ReadByteArray(String) Read named byte array. Declaration byte[] ReadByteArray(string fieldName) Parameters Type Name Description System.String fieldName Returns Type Description System.Byte [] Byte array. ReadChar(String) Read named char value. Declaration char ReadChar(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Char Char value. ReadCharArray(String) Read named char array. Declaration char[] ReadCharArray(string fieldName) Parameters Type Name Description System.String fieldName Returns Type Description System.Char [] Char array. ReadCollection(String) Read named collection. Declaration ICollection ReadCollection(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Collections.ICollection Collection. ReadCollection(String, Func<Int32, ICollection>, Action<ICollection, Object>) Read named collection. Declaration ICollection ReadCollection(string fieldName, Func<int, ICollection> factory, Action<ICollection, object> adder) Parameters Type Name Description System.String fieldName Field name. System.Func < System.Int32 , System.Collections.ICollection > factory Factory. System.Action < System.Collections.ICollection , System.Object > adder Adder. Returns Type Description System.Collections.ICollection Collection. ReadDecimal(String) Read named decimal value. Declaration decimal ? ReadDecimal(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Nullable < System.Decimal > Decimal value. ReadDecimalArray(String) Read named decimal array. Declaration decimal ? [] ReadDecimalArray(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Nullable < System.Decimal >[] Decimal array. ReadDictionary(String) Read named dictionary. Declaration IDictionary ReadDictionary(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Collections.IDictionary Dictionary. ReadDictionary(String, Func<Int32, IDictionary>) Read named dictionary. Declaration IDictionary ReadDictionary(string fieldName, Func<int, IDictionary> factory) Parameters Type Name Description System.String fieldName Field name. System.Func < System.Int32 , System.Collections.IDictionary > factory Factory. Returns Type Description System.Collections.IDictionary Dictionary. ReadDouble(String) Read named double value. Declaration double ReadDouble(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Double Double value. ReadDoubleArray(String) Read named double array. Declaration double[] ReadDoubleArray(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Double [] Double array. ReadEnum<T>(String) Read named enum value. Declaration T ReadEnum<T>(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description T Enum value. Type Parameters Name Description T ReadEnumArray<T>(String) Read named enum array. Declaration T[] ReadEnumArray<T>(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description T[] Enum array. Type Parameters Name Description T ReadFloat(String) Read named float value. Declaration float ReadFloat(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Single Float value. ReadFloatArray(String) Read named float array. Declaration float[] ReadFloatArray(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Single [] Float array. ReadGuid(String) Read named GUID value. Declaration Guid? ReadGuid(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Nullable < System.Guid > GUID value. ReadGuidArray(String) Read named GUID array. Declaration Guid? [] ReadGuidArray(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Nullable < System.Guid >[] GUID array. ReadInt(String) Read named int value. Declaration int ReadInt(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Int32 Int value. ReadIntArray(String) Read named int array. Declaration int[] ReadIntArray(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Int32 [] Int array. ReadLong(String) Read named long value. Declaration long ReadLong(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Int64 Long value. ReadLongArray(String) Read named long array. Declaration long[] ReadLongArray(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Int64 [] Long array. ReadObject<T>(String) Read named object. Declaration T ReadObject<T>(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description T Object. Type Parameters Name Description T ReadShort(String) Read named short value. Declaration short ReadShort(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Int16 Short value. ReadShortArray(String) Read named short array. Declaration short[] ReadShortArray(string fieldName) Parameters Type Name Description System.String fieldName Returns Type Description System.Int16 [] Short array. ReadString(String) Read named string value. Declaration string ReadString(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.String String value. ReadStringArray(String) Read named string array. Declaration string[] ReadStringArray(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.String [] String array. ReadTimestamp(String) Read named date value in UTC form. Declaration DateTime? ReadTimestamp(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Nullable < System.DateTime > Date value. ReadTimestampArray(String) Read named date array in UTC form. Declaration DateTime? [] ReadTimestampArray(string fieldName) Parameters Type Name Description System.String fieldName Field name. Returns Type Description System.Nullable < System.DateTime >[] Date array."
  },
  "api/Apache.Ignite.Core.Cache.Affinity.AffinityKeyMappedAttribute.html": {
    "href": "api/Apache.Ignite.Core.Cache.Affinity.AffinityKeyMappedAttribute.html",
    "title": "Class AffinityKeyMappedAttribute | Apache Ignite.NET",
    "keywords": "Class AffinityKeyMappedAttribute Specifies cache key field to be used to determine a node on which given cache key will be stored. Only one field or property can be marked with this attribute. This attribute is an alternative to AffinityKeyFieldName setting. This attribute has lower priority than AffinityKeyFieldName setting. One of the major use cases for this attribute is the routing of grid computations to the nodes where the data for this computation is cached, the concept otherwise known as Colocation Of Computations And Data. For example, if a Person object is always accessed together with a Company object for which this person is an employee, then for better performance and scalability it makes sense to colocate Person objects together with their Company object when storing them in cache. To achieve that, cache key used to cache Person objects should have a field or property marked with AffinityKeyMappedAttribute attribute, which will provide the value of the company key for which that person works. Inheritance System.Object System.Attribute AffinityKeyMappedAttribute Implements System.Runtime.InteropServices._Attribute Inherited Members System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Boolean) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Boolean) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Module) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.IsDefined(System.Reflection.Module, System.Type) System.Attribute.IsDefined(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Boolean) System.Attribute.IsDefined(System.Reflection.Assembly, System.Type) System.Attribute.IsDefined(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.Equals(System.Object) System.Attribute.GetHashCode() System.Attribute.Match(System.Object) System.Attribute.IsDefaultAttribute() System.Attribute.System.Runtime.InteropServices._Attribute.GetTypeInfoCount(System.UInt32) System.Attribute.System.Runtime.InteropServices._Attribute.GetTypeInfo(System.UInt32, System.UInt32, System.IntPtr) System.Attribute.System.Runtime.InteropServices._Attribute.GetIDsOfNames(System.Guid, System.IntPtr, System.UInt32, System.UInt32, System.IntPtr) System.Attribute.System.Runtime.InteropServices._Attribute.Invoke(System.UInt32, System.Guid, System.UInt32, System.Int16, System.IntPtr, System.IntPtr, System.IntPtr, System.IntPtr) System.Attribute.TypeId System.Object.ToString() System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Affinity Assembly : Apache.Ignite.Core.dll Syntax [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)] public sealed class AffinityKeyMappedAttribute : Attribute, _Attribute Methods GetFieldNameFromAttribute(Type) Gets the affinity key field name from attribute. Declaration public static string GetFieldNameFromAttribute(Type type) Parameters Type Name Description System.Type type Returns Type Description System.String Implements System.Runtime.InteropServices._Attribute"
  },
  "api/Apache.Ignite.Core.Cache.CachePartialUpdateException.html": {
    "href": "api/Apache.Ignite.Core.Cache.CachePartialUpdateException.html",
    "title": "Class CachePartialUpdateException | Apache Ignite.NET",
    "keywords": "Class CachePartialUpdateException Exception thrown from non-transactional cache in case when update succeeded only partially. Inheritance System.Object System.Exception IgniteException CacheException CachePartialUpdateException Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.GetType() System.Exception.Message System.Exception.Data System.Exception.InnerException System.Exception.TargetSite System.Exception.StackTrace System.Exception.HelpLink System.Exception.Source System.Exception.HResult System.Exception.SerializeObjectState System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache Assembly : Apache.Ignite.Core.dll Syntax [Serializable] public class CachePartialUpdateException : CacheException, ISerializable, _Exception Constructors CachePartialUpdateException() Initializes a new instance of the CachePartialUpdateException class. Declaration public CachePartialUpdateException() CachePartialUpdateException(SerializationInfo, StreamingContext) Initializes a new instance of the CachePartialUpdateException class. Declaration protected CachePartialUpdateException(SerializationInfo info, StreamingContext ctx) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info Serialization information. System.Runtime.Serialization.StreamingContext ctx Streaming context. CachePartialUpdateException(String) Initializes a new instance of the CachePartialUpdateException class. Declaration public CachePartialUpdateException(string message) Parameters Type Name Description System.String message The message that describes the error. CachePartialUpdateException(String, IList<Object>) Constructor. Declaration public CachePartialUpdateException(string msg, IList<object> failedKeys) Parameters Type Name Description System.String msg Exception message. System.Collections.Generic.IList < System.Object > failedKeys Failed keys. CachePartialUpdateException(String, Exception) Constructor. Declaration public CachePartialUpdateException(string msg, Exception failedKeysException) Parameters Type Name Description System.String msg Exception message. System.Exception failedKeysException Exception occurred during failed keys read/write. Methods GetFailedKeys<T>() Gets the failed keys. Declaration public IEnumerable<T> GetFailedKeys<T>() Returns Type Description System.Collections.Generic.IEnumerable <T> Type Parameters Name Description T GetObjectData(SerializationInfo, StreamingContext) When overridden in a derived class, sets the System.Runtime.Serialization.SerializationInfo with information about the exception. Declaration public override void GetObjectData(SerializationInfo info, StreamingContext context) Parameters Type Name Description System.Runtime.Serialization.SerializationInfo info The System.Runtime.Serialization.SerializationInfo that holds the serialized object data about the exception being thrown. System.Runtime.Serialization.StreamingContext context The System.Runtime.Serialization.StreamingContext that contains contextual information about the source or destination. Overrides System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) Implements System.Runtime.Serialization.ISerializable System.Runtime.InteropServices._Exception"
  },
  "api/Apache.Ignite.Core.Cache.Configuration.CacheWriteSynchronizationMode.html": {
    "href": "api/Apache.Ignite.Core.Cache.Configuration.CacheWriteSynchronizationMode.html",
    "title": "Enum CacheWriteSynchronizationMode | Apache Ignite.NET",
    "keywords": "Enum CacheWriteSynchronizationMode Mode indicating how Ignite should wait for write replies from other nodes. Namespace : Apache.Ignite.Core.Cache.Configuration Assembly : Apache.Ignite.Core.dll Syntax public enum CacheWriteSynchronizationMode Fields Name Description FullAsync Flag indicating that Ignite will not wait for write or commit responses from participating nodes, which means that remote nodes may get their state updated a bit after any of the cache write methods complete, or after {@link Transaction#commit()} method completes. FullSync Mode indicating that Ignite should wait for write or commit replies from all nodes. This behavior guarantees that whenever any of the atomic or transactional writes complete, all other participating nodes which cache the written data have been updated. PrimarySync This flag only makes sense for {@link CacheMode#PARTITIONED} mode. When enabled, Ignite will wait for write or commit to complete on primary node, but will not wait for backups to be updated."
  },
  "api/Apache.Ignite.Core.Cache.Configuration.QuerySqlFieldAttribute.html": {
    "href": "api/Apache.Ignite.Core.Cache.Configuration.QuerySqlFieldAttribute.html",
    "title": "Class QuerySqlFieldAttribute | Apache Ignite.NET",
    "keywords": "Class QuerySqlFieldAttribute Marks field or property for SQL queries. Using this attribute is an alternative to Fields in CacheConfiguration . Inheritance System.Object System.Attribute QuerySqlFieldAttribute Implements System.Runtime.InteropServices._Attribute Inherited Members System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo) System.Attribute.GetCustomAttributes(System.Reflection.MemberInfo, System.Boolean) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type) System.Attribute.IsDefined(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.MemberInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.ParameterInfo, System.Boolean) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type) System.Attribute.IsDefined(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.ParameterInfo, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Module) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.IsDefined(System.Reflection.Module, System.Type) System.Attribute.IsDefined(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Module, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttributes(System.Reflection.Assembly) System.Attribute.GetCustomAttributes(System.Reflection.Assembly, System.Boolean) System.Attribute.IsDefined(System.Reflection.Assembly, System.Type) System.Attribute.IsDefined(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type) System.Attribute.GetCustomAttribute(System.Reflection.Assembly, System.Type, System.Boolean) System.Attribute.Equals(System.Object) System.Attribute.GetHashCode() System.Attribute.Match(System.Object) System.Attribute.IsDefaultAttribute() System.Attribute.System.Runtime.InteropServices._Attribute.GetTypeInfoCount(System.UInt32) System.Attribute.System.Runtime.InteropServices._Attribute.GetTypeInfo(System.UInt32, System.UInt32, System.IntPtr) System.Attribute.System.Runtime.InteropServices._Attribute.GetIDsOfNames(System.Guid, System.IntPtr, System.UInt32, System.UInt32, System.IntPtr) System.Attribute.System.Runtime.InteropServices._Attribute.Invoke(System.UInt32, System.Guid, System.UInt32, System.Int16, System.IntPtr, System.IntPtr, System.IntPtr, System.IntPtr) System.Attribute.TypeId System.Object.ToString() System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() Namespace : Apache.Ignite.Core.Cache.Configuration Assembly : Apache.Ignite.Core.dll Syntax [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)] public sealed class QuerySqlFieldAttribute : Attribute, _Attribute Constructors QuerySqlFieldAttribute() Initializes a new instance of the QuerySqlFieldAttribute class. Declaration public QuerySqlFieldAttribute() Properties DefaultValue Gets or sets the default value for the field (has effect when inserting with DML). Declaration public object DefaultValue { get; set; } Property Value Type Description System.Object IndexGroups Gets or sets the collection of index groups this field belongs to. Groups are used for compound indexes, whenever index should be created on more than one field. All fields within the same group will belong to the same index. Declaration public string[] IndexGroups { get; set; } Property Value Type Description System.String [] IndexInlineSize Gets or sets the index inline size, see InlineSize . Declaration public int IndexInlineSize { get; set; } Property Value Type Description System.Int32 IsDescending Gets or sets a value indicating whether index for this field should be descending. Ignored when IsIndexed is false . Declaration public bool IsDescending { get; set; } Property Value Type Description System.Boolean IsIndexed Gets or sets a value indicating whether corresponding field should be indexed. Just like with databases, field indexing may require additional overhead during updates, but makes select operations faster. Declaration public bool IsIndexed { get; set; } Property Value Type Description System.Boolean Name Gets or sets the sql field name. If not provided, property or field name will be used. Declaration public string Name { get; set; } Property Value Type Description System.String NotNull Gets or sets a value indicating whether null values are allowed for this field. Declaration public bool NotNull { get; set; } Property Value Type Description System.Boolean Precision Gets or sets the precision for the field. Declaration public int Precision { get; set; } Property Value Type Description System.Int32 Scale Gets or sets the scale for the field. Declaration public int Scale { get; set; } Property Value Type Description System.Int32 Implements System.Runtime.InteropServices._Attribute"
  },
  "api/Apache.Ignite.Core.Cache.Eviction.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.ICacheMetrics.html": {
    "href": "api/Apache.Ignite.Core.Cache.ICacheMetrics.html",
    "title": "Interface ICacheMetrics | Apache Ignite.NET",
    "keywords": "Interface ICacheMetrics Cache metrics used to obtain statistics on cache itself. Namespace : Apache.Ignite.Core.Cache Assembly : Apache.Ignite.Core.dll Syntax public interface ICacheMetrics Properties AverageGetTime The mean time to execute gets. Declaration float AverageGetTime { get; } Property Value Type Description System.Single The time in ms. AveragePutTime The mean time to execute puts. Declaration float AveragePutTime { get; } Property Value Type Description System.Single The time in s. AverageRemoveTime The mean time to execute removes. Declaration float AverageRemoveTime { get; } Property Value Type Description System.Single The time in ms. AverageTxCommitTime The mean time to execute tx commit. Declaration float AverageTxCommitTime { get; } Property Value Type Description System.Single The time in ms. AverageTxRollbackTime The mean time to execute tx rollbacks. Declaration float AverageTxRollbackTime { get; } Property Value Type Description System.Single Number of transaction rollbacks. CacheEvictions The total number of evictions from the cache. An eviction is a removal initiated by the cache itself to free up space. An eviction is not treated as a removal and does not appear in the removal counts. Declaration long CacheEvictions { get; } Property Value Type Description System.Int64 The number of evictions. CacheGets The total number of requests to the cache. This will be equal to the sum of the hits and misses. Declaration long CacheGets { get; } Property Value Type Description System.Int64 The number of gets. CacheHitPercentage This is a measure of cache efficiency. Declaration float CacheHitPercentage { get; } Property Value Type Description System.Single The percentage of successful hits, as a decimal e.g 75. CacheHits The number of get requests that were satisfied by the cache. Declaration long CacheHits { get; } Property Value Type Description System.Int64 The number of hits. CacheMisses A miss is a get request that is not satisfied. Declaration long CacheMisses { get; } Property Value Type Description System.Int64 The number of misses. CacheMissPercentage Returns the percentage of cache accesses that did not find a requested entry in the cache. Declaration float CacheMissPercentage { get; } Property Value Type Description System.Single The percentage of accesses that failed to find anything. CacheName Gets cache name. Declaration string CacheName { get; } Property Value Type Description System.String Cache name. CachePuts The total number of puts to the cache. Declaration long CachePuts { get; } Property Value Type Description System.Int64 The number of puts. CacheRemovals The total number of removals from the cache. This does not include evictions, where the cache itself initiates the removal to make space. Declaration long CacheRemovals { get; } Property Value Type Description System.Int64 The number of removals. CacheSize Gets number of non-null values in the cache. Declaration long CacheSize { get; } Property Value Type Description System.Int64 Number of non-null values in the cache. CacheTxCommits Gets total number of transaction commits. Declaration long CacheTxCommits { get; } Property Value Type Description System.Int64 Number of transaction commits. CacheTxRollbacks Gets total number of transaction rollbacks. Declaration long CacheTxRollbacks { get; } Property Value Type Description System.Int64 Number of transaction rollbacks. DhtEvictQueueCurrentSize Gets current size of evict queue used to batch up evictions. Declaration int DhtEvictQueueCurrentSize { get; } Property Value Type Description System.Int32 Current size of evict queue. EntryProcessorAverageInvocationTime The mean time to execute cache invokes. Declaration float EntryProcessorAverageInvocationTime { get; } Property Value Type Description System.Single The time in µs. EntryProcessorHitPercentage The percentage of invocations on keys, which exist in cache. Declaration float EntryProcessorHitPercentage { get; } Property Value Type Description System.Single The percentage of successful invocation hits. EntryProcessorHits The total number of invocations on keys, which exist in cache. Declaration long EntryProcessorHits { get; } Property Value Type Description System.Int64 The number of cache invocation hits. EntryProcessorInvocations The total number of cache invocations. Declaration long EntryProcessorInvocations { get; } Property Value Type Description System.Int64 The number of cache invocations. EntryProcessorMaxInvocationTime So far, the maximum time to execute cache invokes. Declaration float EntryProcessorMaxInvocationTime { get; } Property Value Type Description System.Single The time in µs. EntryProcessorMinInvocationTime So far, the minimum time to execute cache invokes. Declaration float EntryProcessorMinInvocationTime { get; } Property Value Type Description System.Single The time in µs. EntryProcessorMisses The total number of invocations on keys, which don't exist in cache. Declaration long EntryProcessorMisses { get; } Property Value Type Description System.Int64 The number of cache invocation misses. EntryProcessorMissPercentage The percentage of invocations on keys, which don't exist in cache. Declaration float EntryProcessorMissPercentage { get; } Property Value Type Description System.Single The percentage of invocation misses. EntryProcessorPuts The total number of cache invocations, caused update. Declaration long EntryProcessorPuts { get; } Property Value Type Description System.Int64 The number of invocation updates. EntryProcessorReadOnlyInvocations The total number of cache invocations, caused no updates. Declaration long EntryProcessorReadOnlyInvocations { get; } Property Value Type Description System.Int64 The number of read-only invocations. EntryProcessorRemovals The total number of cache invocations, caused removal. Declaration long EntryProcessorRemovals { get; } Property Value Type Description System.Int64 The number of invocation removals. EstimatedRebalancingFinishTime Gets estimated rebalancing finish time. entries in onheap cache and near entries. Declaration long EstimatedRebalancingFinishTime { get; } Property Value Type Description System.Int64 Estimated rebalancing finish time. EstimatedRebalancingKeys Gets number of estimated keys to rebalance. need to be cleared before actual rebalance start. Declaration long EstimatedRebalancingKeys { get; } Property Value Type Description System.Int64 Number of estimated keys to rebalance. HeapEntriesCount Gets the number of cache entries in heap memory, including entries held by active transactions, entries in onheap cache and near entries. Declaration long HeapEntriesCount { get; } Property Value Type Description System.Int64 Number of entries in heap memory. IsEmpty Returns true if this cache is empty. Declaration bool IsEmpty { get; } Property Value Type Description System.Boolean True if this cache is empty. IsManagementEnabled Checks whether management is enabled on this cache. The default value is false. Declaration bool IsManagementEnabled { get; } Property Value Type Description System.Boolean True if management is enabled. IsReadThrough Determines if a cache should operate in read-through mode. The default value is false Declaration bool IsReadThrough { get; } Property Value Type Description System.Boolean True when a cache is in \"read-through\" mode. IsStatisticsEnabled Checks whether statistics collection is enabled in this cache. The default value is false. Declaration bool IsStatisticsEnabled { get; } Property Value Type Description System.Boolean True if statistics collection is enabled. IsStoreByValue Whether storeByValue true or storeByReference false. When true, both keys and values are stored by value. When false, both keys and values are stored by reference. Caches stored by reference are capable of mutation by any threads holding the reference. The effects are: if the key is mutated, then the key may not be retrievable or removable if the value is mutated, then all threads in the JVM can potentially observe those mutations, subject to the normal Java Memory Model rules. Storage by reference only applies to the local heap. If an entry is moved off heap it will need to be transformed into a representation. Any mutations that occur after transformation may not be reflected in the cache. When a cache is storeByValue, any mutation to the key or value does not affect the key of value stored in the cache. The default value is true. Declaration bool IsStoreByValue { get; } Property Value Type Description System.Boolean True if the cache is store by value. IsValidForReading Checks whether cache topology is valid for read operations. Declaration bool IsValidForReading { get; } Property Value Type Description System.Boolean True when cache topology is valid for reading. IsValidForWriting Checks whether cache topology is valid for write operations. Declaration bool IsValidForWriting { get; } Property Value Type Description System.Boolean True when cache topology is valid for writing. IsWriteBehindEnabled Returns true if write-behind is enabled. Declaration bool IsWriteBehindEnabled { get; } Property Value Type Description System.Boolean True if write-behind is enabled. IsWriteThrough Determines if a cache should operate in \"write-through\" mode. Will appropriately cause the configured CacheWriter to be invoked. The default value is false Declaration bool IsWriteThrough { get; } Property Value Type Description System.Boolean True when a cache is in \"write-through\" mode. KeySize Gets number of keys in the cache, possibly with null values. Declaration int KeySize { get; } Property Value Type Description System.Int32 Number of keys in the cache. KeysToRebalanceLeft Gets estimated number of keys to be rebalanced on current node. Declaration long KeysToRebalanceLeft { get; } Property Value Type Description System.Int64 Estimated number of keys to be rebalanced on current node. KeyType Determines the required type of keys for this cache, if any. Declaration string KeyType { get; } Property Value Type Description System.String The fully qualified class name of the key type, or \"java.lang.Object\" if the type is undefined. OffHeapAllocatedSize Gets memory size allocated in off-heap. Declaration long OffHeapAllocatedSize { get; } Property Value Type Description System.Int64 Memory size allocated in off-heap. OffHeapBackupEntriesCount Gets number of backup entries stored in off-heap memory. Declaration long OffHeapBackupEntriesCount { get; } Property Value Type Description System.Int64 Number of backup entries stored in off-heap memory. OffHeapEntriesCount Gets number of entries stored in off-heap memory. Declaration long OffHeapEntriesCount { get; } Property Value Type Description System.Int64 Number of entries stored in off-heap memory. OffHeapEvictions The total number of evictions from the off-heap memory. Declaration long OffHeapEvictions { get; } Property Value Type Description System.Int64 The number of evictions. OffHeapGets The total number of get requests to the off-heap memory. Declaration long OffHeapGets { get; } Property Value Type Description System.Int64 The number of gets. OffHeapHitPercentage Gets the percentage of hits on off-heap memory. Declaration float OffHeapHitPercentage { get; } Property Value Type Description System.Single The percentage of hits on off-heap memory. OffHeapHits The number of get requests that were satisfied by the off-heap memory. Declaration long OffHeapHits { get; } Property Value Type Description System.Int64 The off-heap hits number. OffHeapMisses A miss is a get request that is not satisfied by off-heap memory. Declaration long OffHeapMisses { get; } Property Value Type Description System.Int64 The off-heap misses number. OffHeapMissPercentage Gets the percentage of misses on off-heap memory. Declaration float OffHeapMissPercentage { get; } Property Value Type Description System.Single The percentage of misses on off-heap memory. OffHeapPrimaryEntriesCount Gets the number of primary entries stored in off-heap memory. Declaration long OffHeapPrimaryEntriesCount { get; } Property Value Type Description System.Int64 Number of primary entries stored in off-heap memory. OffHeapPuts The total number of put requests to the off-heap memory. Declaration long OffHeapPuts { get; } Property Value Type Description System.Int64 The number of puts. OffHeapRemovals The total number of removals from the off-heap memory. This does not include evictions. Declaration long OffHeapRemovals { get; } Property Value Type Description System.Int64 The number of removals. RebalanceClearingPartitionsLeft Gets number of partitions. need to be cleared before actual rebalance start. Declaration long RebalanceClearingPartitionsLeft { get; } Property Value Type Description System.Int64 Number of clearing partitions for rebalance. RebalancedKeys Gets number of already rebalanced keys. need to be cleared before actual rebalance start. Declaration long RebalancedKeys { get; } Property Value Type Description System.Int64 Number of already rebalanced keys. RebalancingBytesRate Gets estimated rebalancing speed in bytes. Declaration long RebalancingBytesRate { get; } Property Value Type Description System.Int64 Estimated rebalancing speed in bytes. RebalancingKeysRate Gets estimated rebalancing speed in keys. Declaration long RebalancingKeysRate { get; } Property Value Type Description System.Int64 Estimated rebalancing speed in keys. RebalancingPartitionsCount Gets number of currently rebalancing partitions on current node. Declaration int RebalancingPartitionsCount { get; } Property Value Type Description System.Int32 Number of currently rebalancing partitions on current node. RebalancingStartTime Gets rebalancing start time. entries in onheap cache and near entries. Declaration long RebalancingStartTime { get; } Property Value Type Description System.Int64 Rebalancing start time. Size Gets number of non-null values in the cache. Declaration int Size { get; } Property Value Type Description System.Int32 Number of non-null values in the cache. TotalPartitionsCount Gets total number of partitions on current node. Declaration int TotalPartitionsCount { get; } Property Value Type Description System.Int32 Total number of partitions on current node. TxCommitQueueSize Gets committed transaction queue size. Declaration int TxCommitQueueSize { get; } Property Value Type Description System.Int32 Committed transaction queue size. TxCommittedVersionsSize Gets number of cached committed transaction IDs. Declaration int TxCommittedVersionsSize { get; } Property Value Type Description System.Int32 Number of cached committed transaction IDs. TxDhtCommitQueueSize Gets committed DHT transaction queue size. Declaration int TxDhtCommitQueueSize { get; } Property Value Type Description System.Int32 Committed DHT transaction queue size. TxDhtCommittedVersionsSize Gets number of cached committed DHT transaction IDs. Declaration int TxDhtCommittedVersionsSize { get; } Property Value Type Description System.Int32 Number of cached committed DHT transaction IDs. TxDhtPrepareQueueSize Gets prepared DHT transaction queue size. Declaration int TxDhtPrepareQueueSize { get; } Property Value Type Description System.Int32 Prepared DHT transaction queue size. TxDhtRolledbackVersionsSize Gets number of cached rolled back DHT transaction IDs. Declaration int TxDhtRolledbackVersionsSize { get; } Property Value Type Description System.Int32 Number of cached rolled back DHT transaction IDs. TxDhtStartVersionCountsSize Gets DHT start version counts map size. Declaration int TxDhtStartVersionCountsSize { get; } Property Value Type Description System.Int32 DHT start version counts map size. TxDhtThreadMapSize Gets transaction DHT per-thread map size. Declaration int TxDhtThreadMapSize { get; } Property Value Type Description System.Int32 DHT thread map size. TxDhtXidMapSize Gets transaction DHT per-Xid map size. Declaration int TxDhtXidMapSize { get; } Property Value Type Description System.Int32 Transaction DHT per-Xid map size. TxPrepareQueueSize Gets prepared transaction queue size. Declaration int TxPrepareQueueSize { get; } Property Value Type Description System.Int32 Prepared transaction queue size. TxRolledbackVersionsSize Gets number of cached rolled back transaction IDs. Declaration int TxRolledbackVersionsSize { get; } Property Value Type Description System.Int32 Number of cached rolled back transaction IDs. TxStartVersionCountsSize Gets start version counts map size. Declaration int TxStartVersionCountsSize { get; } Property Value Type Description System.Int32 Start version counts map size. TxThreadMapSize Gets transaction per-thread map size. Declaration int TxThreadMapSize { get; } Property Value Type Description System.Int32 Thread map size. TxXidMapSize Gets transaction per-Xid map size. Declaration int TxXidMapSize { get; } Property Value Type Description System.Int32 Transaction per-Xid map size. ValueType Determines the required type of values for this cache, if any. Declaration string ValueType { get; } Property Value Type Description System.String The fully qualified class name of the value type, or \"java.lang.Object\" if the type is undefined. WriteBehindBufferSize Gets count of entries that were processed by the write-behind store and have not been flushed to the underlying store yet. Declaration int WriteBehindBufferSize { get; } Property Value Type Description System.Int32 Total count of entries in cache store internal buffer. WriteBehindCriticalOverflowCount Gets count of write buffer overflow events in progress at the moment. Each overflow event causes the ongoing flush operation to be performed synchronously. Declaration int WriteBehindCriticalOverflowCount { get; } Property Value Type Description System.Int32 Count of cache overflow events since start. WriteBehindErrorRetryCount Gets count of cache entries that are in a store-retry state. An entry is assigned a store-retry state when underlying store failed due some reason and cache has enough space to retain this entry till the next try. Declaration int WriteBehindErrorRetryCount { get; } Property Value Type Description System.Int32 Count of entries in store-retry state. WriteBehindFlushFrequency Gets the cache flush frequency. All pending operations on the underlying store will be performed within time interval not less then this value. If this value is 0, then flush is performed only when buffer size exceeds flush size. Declaration long WriteBehindFlushFrequency { get; } Property Value Type Description System.Int64 Flush frequency in milliseconds. WriteBehindFlushSize Gets the maximum size of the write-behind buffer. When the count of unique keys in write buffer exceeds this value, the buffer is scheduled for write to the underlying store. If this value is 0, then flush is performed only on time-elapsing basis. Declaration int WriteBehindFlushSize { get; } Property Value Type Description System.Int32 Buffer size that triggers flush procedure. WriteBehindFlushThreadCount Gets the number of flush threads that will perform store update operations. Declaration int WriteBehindFlushThreadCount { get; } Property Value Type Description System.Int32 Count of worker threads. WriteBehindStoreBatchSize Gets the maximum count of similar (put or remove) operations that can be grouped to a single batch. Declaration int WriteBehindStoreBatchSize { get; } Property Value Type Description System.Int32 Maximum size of batch. WriteBehindTotalCriticalOverflowCount Gets count of write buffer overflow events since initialization. Each overflow event causes the ongoing flush operation to be performed synchronously. Declaration int WriteBehindTotalCriticalOverflowCount { get; } Property Value Type Description System.Int32 Count of cache overflow events since start."
  },
  "api/Apache.Ignite.Core.Cache.IMemoryMetrics.html": {
    "href": "api/Apache.Ignite.Core.Cache.IMemoryMetrics.html",
    "title": "Interface IMemoryMetrics | Apache Ignite.NET",
    "keywords": "Interface IMemoryMetrics Memory usage metrics. Obsolete, use IDataRegionMetrics . Namespace : Apache.Ignite.Core.Cache Assembly : Apache.Ignite.Core.dll Syntax [Obsolete(\"See IDataRegionMetrics.\")] public interface IMemoryMetrics Properties AllocationRate Gets the allocation rate, in pages per second. Declaration float AllocationRate { get; } Property Value Type Description System.Single EvictionRate Gets the eviction rate, in pages per second. Declaration float EvictionRate { get; } Property Value Type Description System.Single LargeEntriesPagesPercentage Gets the percentage of pages fully occupied by entries that are larger than page. Declaration float LargeEntriesPagesPercentage { get; } Property Value Type Description System.Single Name Gets the memory policy name. Declaration string Name { get; } Property Value Type Description System.String PageFillFactor Gets the page fill factor: the percentage of used space. Declaration float PageFillFactor { get; } Property Value Type Description System.Single TotalAllocatedPages Gets the count of allocated pages. Declaration long TotalAllocatedPages { get; } Property Value Type Description System.Int64"
  },
  "api/Apache.Ignite.Core.Cache.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"
  }
}