Alexandr Shapkin created IGNITE-13160:
-----------------------------------------
Summary: .NET: wrong affinity key registration with
AffinityKeyMapped attribute
Key: IGNITE-13160
URL: https://issues.apache.org/jira/browse/IGNITE-13160
Project: Ignite
Issue Type: Bug
Affects Versions: 2.8.1
Reporter: Alexandr Shapkin
When QueryEntities is set alongside a custom key that utilizes the
AffinityKeyMapped attribute, the field won't be taken into account for some
reason. When QueryEntities configuration gets removed, all works fine, setting
KeyConfiguration manually helps as well. At the same time, the BinaryType
registration itself looks fine.
After the investigation, it turned out that affinityKey field is not being
registered on cache registration, and null is being cached instead. Later on
Ignite correctly tries to register a custom class as a key, but it's never
being updated internally case the real value is already cached.
Reproducer (add to the AffinityTest.cs):
{code:java}
/// <summary>
/// Tests AffinityKeyMapped attribute should map to the same partitions
/// for the same field value.
/// </summary>
[Test]
public void TestCustomAffinity()
{
IIgnite g = Ignition.GetIgnite("grid-0");
var cacheCfg = new CacheConfiguration("mycache")
{
// Without QueryEntities tests passes.
QueryEntities = new List<QueryEntity>()
{
new QueryEntity(typeof(MyKey), typeof(int))
}
};
g.GetOrCreateCache<MyKey, int>(cacheCfg);
var key1 = new MyKey {Data = "data1", AffinityKey = 1};
var key2 = new MyKey {Data = "data2", AffinityKey = 1};
ICacheAffinity aff = g.GetAffinity(cacheCfg.Name);
Assert.AreEqual(aff.GetPartition(key1), aff.GetPartition(key2));
}
public class MyKey
{
[QuerySqlField]
public string Data { get; set; }
[AffinityKeyMapped]
public long AffinityKey { get; set; }
}
{code}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)