Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

What's New in Apache Ignite.NET 1.7

DZone's Guide to

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 ·
Free Resource

Hortonworks Sandbox for HDP and HDF is your chance to get started on learning, developing, testing and trying out new features. Each download comes preconfigured with interactive tutorials, sample data and developments from the Apache community.

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 Community Connection (HCC) is an online collaboration destination for developers, DevOps, customers and partners to get answers to questions, collaborate on technical articles and share code examples from GitHub.  Join the discussion.

Topics:
.net ,apache ignite ,distributed caching

Published at DZone with permission of

Opinions expressed by DZone contributors are their own.

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

{{ parent.tldr }}

{{ parent.urlSource.name }}