ignite-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Alexandr Shapkin (Jira)" <j...@apache.org>
Subject [jira] [Created] (IGNITE-13160) .NET: wrong affinity key registration with AffinityKeyMapped attribute
Date Wed, 17 Jun 2020 22:19:00 GMT
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)

Mime
View raw message