Over a million developers have joined DZone.

What's New in Apache Ignite.NET 1.7

Apache Ignite.NET 1.7 brings some pretty cool new features. Read on to find out more!

· Big Data Zone

Learn how you can maximize big data in the cloud with Apache Hadoop. Download this eBook now. Brought to you in partnership with Hortonworks.

Apache Ignite 1.7 has been released last week. Let’s see what is new in the .NET part.

ignite logo

Distributed Joins

This is a big one! Previously, SQL joins worked only for colocated data: if cache entry for John, who works for Apache, is located on node 1, but cache entry for Apache is located on node 2, SQL join won’t return this pair.

Now, however, this is no longer the issue. Joins work as expected in any scenario. This feature is not enabled by default, you have to set SqlQuery.EnableDistributedJoins orSqlFieldsQuery.EnableDistributedJoins to true explicitly.

As for LINQ, there is a new overload:

public static IQueryable<ICacheEntry<K, V>>
    AsCacheQueryable<K, V>(this ICache<K, V> cache, QueryOptions queryOptions)

Where QueryOptions class has EnableDistributedJoins property.

User-defined AffinityFunction

In addition to predefined FairAffinityFunction and RendezvousAffinityFunction, it is now possible to create a custom one by implementing IAffinityFunction interface or inheriting one of the predefined classes.

.NET Configuration in Apache.Ignite.exe

Apache.Ignite.exe standalone node runner got two new command-line arguments: ConfigFileNameand ConfigSectionName. These can be used to load IgniteConfigurationSection either from Apache.Ignite.exe.config, or from any other config file. See Getting Started.

Forward Java Output to the .NET Console

Ignite writes useful information to console: topology snapshots, metrics, errors, and warnings, etc. This information is also written to the log, but console may be handier during development.

Most of this information is written from underlying Java code. This is fine when you run a console application. However, this does not work with tools that intercept .NET console: unit test runners (Visual Studio and ReSharper), LINQPad, etc.

Ignite 1.7 has this fixed. All console output is now written using native .NET mechanism and you can expect any tooling to work properly. Below is a screenshot of Ignite running in LINQPad. Ignite in LINQPad

Java Exception Information in InnerException

Another debugging-related improvement is inclusion of underlying Java exception details inIgniteException.InnerException (where applicable).

In 1.6, when exception occurred on Java side of things, all you got in .NET was some basic exception type mapping, and the exception message text. This was often not enough to understand the problem. For example, if you attempt to start Ignite with invalid configuration, exception message will have some vague Failed to start manager: GridManagerAdapter text. All the details are buried down the stack trace:

Ignition.Start(new IgniteConfiguration
{
    CommunicationSpi = new TcpCommunicationSpi
    {
        // Negative timeout is not valid
        IdleConnectionTimeout = TimeSpan.MinValue
    }
});


Apache.Ignite.Core.Common.IgniteException: Failed to start manager: GridManagerAdapter
   [enabled=true, name=org.apache.ignite.internal.managers.communication.GridIoManager]
---> Apache.Ignite.Core.Common.JavaException: class org.apache.ignite.IgniteException: 
Failed to start manager: GridManagerAdapter [enabled=true, name=org.apache.ignite.internal.managers.communication.GridIoManager]
  at org.apache.ignite.internal.util.IgniteUtils.convertException(IgniteUtils.java:908)
  at org.apache.ignite.internal.processors.platform.PlatformAbstractBootstrap.start(PlatformAbstractBootstrap.java:48)
  at org.apache.ignite.internal.processors.platform.PlatformIgnition.start(PlatformIgnition.java:76)
Caused by: class org.apache.ignite.IgniteCheckedException: Failed to start manager: GridManagerAdapter [enabled=true, name=org.apache.ignite.internal.managers.communication.GridIoManager]
  at org.apache.ignite.internal.IgniteKernal.startManager(IgniteKernal.java:1576)
  at org.apache.ignite.internal.IgniteKernal.start(IgniteKernal.java:846)
  at org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance.start0(IgnitionEx.java:1739)
  at org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance.start(IgnitionEx.java:1589)
  at org.apache.ignite.internal.IgnitionEx.start0(IgnitionEx.java:1042)
  at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:549)
  at org.apache.ignite.internal.processors.platform.PlatformAbstractBootstrap.start(PlatformAbstractBootstrap.java:43)
  ... 1 more
Caused by: class org.apache.ignite.IgniteCheckedException: Failed to get SPI attributes.
  at org.apache.ignite.internal.managers.GridManagerAdapter.startSpi(GridManagerAdapter.java:248)
  at org.apache.ignite.internal.managers.communication.GridIoManager.start(GridIoManager.java:258)
  at org.apache.ignite.internal.IgniteKernal.startManager(IgniteKernal.java:1571)
  ... 7 more
Caused by: class org.apache.ignite.spi.IgniteSpiException: SPI parameter failed condition check: idleConnTimeout > 0
  at org.apache.ignite.spi.IgniteSpiAdapter.assertParameter(IgniteSpiAdapter.java:344)
  at org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi.getNodeAttributes(TcpCommunicationSpi.java:1419)
  at org.apache.ignite.internal.managers.GridManagerAdapter.startSpi(GridManagerAdapter.java:231)
  ... 9 more

With the full stack trace, we can tell what is wrong: idleConnTimeout > 0 check failed.

Configuration Schema NuGet Package

IgniteConfigurationSection.xsd file is now distributed in a dedicated NuGet package, so it is easy to include a proper version into your project.

Install-Package Apache.Ignite.Schema

This schema file, when included in the project, enables Intellisense(TM) when editing IgniteConfigurationSection in app.config and web.config in Visual Studio:

IgniteConfigurationSection IntelliSense

ASP.NET Output Cache provider

Uses Ignite distributed cache for ASP.NET output caching. More info on readme.io: ASP.NET Output Caching.

Hortonworks DataFlow is an integrated platform that makes data ingestion fast, easy, and secure. Download the white paper now.  Brought to you in partnership with Hortonworks

Topics:
.net ,apache ignite ,distributed caching

Published at DZone with permission of Pavel Tupitsyn. See the original article here.

Opinions expressed by DZone contributors are their own.

The best of DZone straight to your inbox.

SEE AN EXAMPLE
Please provide a valid email address.

Thanks for subscribing!

Awesome! Check your inbox to verify your email so you can start receiving the latest in tech news and resources.
Subscribe

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}