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)