You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ignite.apache.org by "Tom Kring (Jira)" <ji...@apache.org> on 2021/04/21 00:42:00 UTC

[jira] [Created] (IGNITE-14605) ContinuousQuery fails in java thick client when .NET custom logger is used

Tom Kring created IGNITE-14605:
----------------------------------

             Summary: ContinuousQuery fails in java thick client when .NET custom logger is used
                 Key: IGNITE-14605
                 URL: https://issues.apache.org/jira/browse/IGNITE-14605
             Project: Ignite
          Issue Type: Bug
          Components: cache, clients
    Affects Versions: 2.9.1, 2.10
         Environment: Ignite running on Windows 10.
            Reporter: Tom Kring


The ContinuousQuery fails with a ClassNotFoundException in the following scenario:
 * Use .NET services in the cluster.
 * The .NET ignite configuration uses a custom logger.  <= this seems to be the root cause
 * Define a .NET class.
 * Register the class with the Ignite binary name mapper.
 * Start a java thick client.
 * Define the same type in java and register it with the binary name mapper.
 * Set up a continuous query for a cache.
 * Put an instance of the java class on the cache.
 * This triggers the ClassNotFoundException.

Here is the .NET code:
{code:java}
      static void Main(string[] args)
      {
            IgniteConfiguration cfg = new IgniteConfiguration();
            cfg.BinaryConfiguration = new Apache.Ignite.Core.Binary.BinaryConfiguration()
            {
                NameMapper = new BinaryBasicNameMapper() { IsSimpleName = true }
            };
            cfg.Logger = new SampleLogger();  //comment this out for the ContinousQuery to work
            IIgnite ignite = Ignition.Start(cfg);
            ignite.GetCluster().SetActive(true);
            ignite.GetBinary().GetBinaryType(typeof(TestDto));
            Console.ReadLine();
        }

    public class SampleLogger : ILogger
    {
        public bool IsEnabled(LogLevel level)
        {
            return true;
        }
        public void Log(LogLevel level, string message, object[] args, IFormatProvider formatProvider, string category, string nativeErrorInfo, Exception ex)
        {
            Console.WriteLine(message);
        }
    }
{code}
Here is the Java code:
{code:java}
        BinaryConfiguration binCfg = new BinaryConfiguration();
        BinaryBasicNameMapper namemapper = new BinaryBasicNameMapper();
        namemapper.setSimpleName(true);
        binCfg.setNameMapper(namemapper);
        IgniteConfiguration cfg = new IgniteConfiguration().setBinaryConfiguration(binCfg);
        cfg.setClientMode(true);

        Ignite ignite = Ignition.start(cfg);
        ignite.binary().toBinary(new TestDto());
        IgniteCache<Long, TestDto> testCache = ignite.getOrCreateCache("testcache2");

        //setup a query to get updates
        ContinuousQuery<Long, TestDto> query2 = new ContinuousQuery<>();
        query2.setLocalListener(new CacheEntryUpdatedListener<Long, TestDto>() {
        @Override
        public void onUpdated(Iterable<CacheEntryEvent<? extends Long, ? extends TestDto>> events)
                throws CacheEntryListenerException {
                // react to the update events here
                            events.forEach(event -> {
                                TestDto test = (TestDto)event.getValue();
                });
            }
        });

        testCache.query(query2);
        TestDto t = new TestDto();
        t.Value = "value";
        testCache.put(1l, t);
{code}
Here is the exception:
{code:java}
Exception in thread "main" org.apache.ignite.cache.CachePartialUpdateException: Failed to update keys (retry update if possible).: [1] at org.apache.ignite.internal.processors.cache.GridCacheUtils.convertToCacheException(GridCacheUtils.java:1245) at org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.cacheException(IgniteCacheProxyImpl.java:2083) at org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.put(IgniteCacheProxyImpl.java:1319) at org.apache.ignite.internal.processors.cache.GatewayProtectedCacheProxy.put(GatewayProtectedCacheProxy.java:856) at itron.Program.main(Program.java:95) Caused by: class org.apache.ignite.internal.processors.cache.CachePartialUpdateCheckedException: Failed to update keys (retry update if possible).: [1] at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicAbstractUpdateFuture.onPrimaryError(GridNearAtomicAbstractUpdateFuture.java:407) at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicSingleUpdateFuture.onPrimaryResponse(GridNearAtomicSingleUpdateFuture.java:253) at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.processNearAtomicUpdateResponse(GridDhtAtomicCache.java:3311) at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.access$500(GridDhtAtomicCache.java:146) at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache$6.apply(GridDhtAtomicCache.java:306) at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache$6.apply(GridDhtAtomicCache.java:301) at org.apache.ignite.internal.processors.cache.GridCacheIoManager.processMessage(GridCacheIoManager.java:1142) at org.apache.ignite.internal.processors.cache.GridCacheIoManager.onMessage0(GridCacheIoManager.java:591) at org.apache.ignite.internal.processors.cache.GridCacheIoManager.handleMessage(GridCacheIoManager.java:392) at org.apache.ignite.internal.processors.cache.GridCacheIoManager.handleMessage(GridCacheIoManager.java:318) at org.apache.ignite.internal.processors.cache.GridCacheIoManager.access$100(GridCacheIoManager.java:109) at org.apache.ignite.internal.processors.cache.GridCacheIoManager$1.onMessage(GridCacheIoManager.java:308) at org.apache.ignite.internal.managers.communication.GridIoManager.invokeListener(GridIoManager.java:1908) at org.apache.ignite.internal.managers.communication.GridIoManager.processRegularMessage0(GridIoManager.java:1529) at org.apache.ignite.internal.managers.communication.GridIoManager.access$5300(GridIoManager.java:242) at org.apache.ignite.internal.managers.communication.GridIoManager$9.execute(GridIoManager.java:1422) at org.apache.ignite.internal.managers.communication.TraceRunnable.run(TraceRunnable.java:55) at org.apache.ignite.internal.util.StripedExecutor$Stripe.body(StripedExecutor.java:569) at org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:120) at java.base/java.lang.Thread.run(Thread.java:834) Suppressed: class org.apache.ignite.IgniteCheckedException: Failed to update keys on primary node. at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.UpdateErrors.addFailedKeys(UpdateErrors.java:124) at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicUpdateResponse.addFailedKeys(GridNearAtomicUpdateResponse.java:340) at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateAllAsyncInternal0(GridDhtAtomicCache.java:2016) at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateAllAsyncInternal(GridDhtAtomicCache.java:1724) at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.processNearAtomicUpdateRequest(GridDhtAtomicCache.java:3293) at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.access$400(GridDhtAtomicCache.java:146) at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache$5.apply(GridDhtAtomicCache.java:287) at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache$5.apply(GridDhtAtomicCache.java:282) ... 14 more Suppressed: class org.apache.ignite.binary.BinaryInvalidTypeException: platform.integrationservice.models.TestDto at org.apache.ignite.internal.binary.BinaryContext.descriptorForTypeId(BinaryContext.java:717) at org.apache.ignite.internal.binary.BinaryReaderExImpl.deserialize0(BinaryReaderExImpl.java:1762) at org.apache.ignite.internal.binary.BinaryReaderExImpl.deserialize(BinaryReaderExImpl.java:1721) at org.apache.ignite.internal.binary.BinaryObjectImpl.deserializeValue(BinaryObjectImpl.java:820) at org.apache.ignite.internal.binary.BinaryObjectImpl.value(BinaryObjectImpl.java:150) at org.apache.ignite.internal.processors.cache.CacheObjectUtils.unwrapBinary(CacheObjectUtils.java:197) at org.apache.ignite.internal.processors.cache.CacheObjectUtils.unwrapBinaryIfNeeded(CacheObjectUtils.java:76) at org.apache.ignite.internal.processors.cache.CacheObjectContext.unwrapBinaryIfNeeded(CacheObjectContext.java:138) at org.apache.ignite.internal.processors.cache.query.continuous.CacheContinuousQueryEvent.getValue(CacheContinuousQueryEvent.java:73) at org.apache.ignite.internal.processors.cache.query.continuous.CacheContinuousQueryEvent.toString(CacheContinuousQueryEvent.java:104) at java.base/java.lang.String.valueOf(String.java:2951) at java.base/java.lang.StringBuilder.append(StringBuilder.java:168) at org.apache.ignite.internal.processors.cache.query.continuous.CacheContinuousQueryHandler$2.onEntryUpdated(CacheContinuousQueryHandler.java:449) at org.apache.ignite.internal.processors.cache.query.continuous.CacheContinuousQueryManager.onEntryUpdated(CacheContinuousQueryManager.java:447) at org.apache.ignite.internal.processors.cache.GridCacheMapEntry.innerUpdate(GridCacheMapEntry.java:2513) at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateSingle(GridDhtAtomicCache.java:2654) at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.update(GridDhtAtomicCache.java:2114) at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateAllAsyncInternal0(GridDhtAtomicCache.java:1931) ... 19 more Caused by: java.lang.ClassNotFoundException: platform.integrationservice.models.TestDto at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522) at java.base/java.lang.Class.forName0(Native Method) at java.base/java.lang.Class.forName(Class.java:398) at org.apache.ignite.internal.util.IgniteUtils.forName(IgniteUtils.java:9014) at org.apache.ignite.internal.util.IgniteUtils.forName(IgniteUtils.java:8957) at org.apache.ignite.internal.MarshallerContextImpl.getClass(MarshallerContextImpl.java:376) at org.apache.ignite.internal.binary.BinaryContext.descriptorForTypeId(BinaryContext.java:693)
{code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)