Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

NullPointerException when performing operations on an IgniteCache #11904

Open
coolkarniomkar opened this issue Mar 2, 2025 · 0 comments
Open

Comments

@coolkarniomkar
Copy link

Hey guys!

We discovered that a NullPointerException is thrown by Ignite when trying to perform operations on cache1 in the following code snippet.

CacheConfiguration<UUID, UUID> cache1Config = new CacheConfiguration<>("cache1");
cache1Config.setGroupName("myCacheGroup");

CacheConfiguration<UUID, UUID> cache2Config = new CacheConfiguration<>("cache2");
cache2Config.setGroupName("myCacheGroup");

IgniteConfiguration cfg = new IgniteConfiguration();
Ignite ignite = Ignition.start(cfg);

IgniteCache<UUID, UUID> cache1 = ignite.getOrCreateCache(cache1Config);

IgniteCache<UUID, UUID> cache2 = ignite.getOrCreateCache(cache2Config);
cache2.registerCacheEntryListener(new CacheEntryListenerConfigImpl());
cache2.destroy();

cache1.put(UUID.randomUUID(), UUID.randomUUID()); // throws NPE

System.out.println("meep moop");

CacheEntryListenerConfigImpl is a bare minimum implementation, nothing fancy.

public class CacheEntryListenerConfigImpl implements CacheEntryListenerConfiguration<UUID, UUID> {
    @Override
    public Factory<CacheEntryListener<? super UUID, ? super UUID>> getCacheEntryListenerFactory() {
        return () -> (CacheEntryCreatedListener<UUID, UUID>) iterable -> System.out.println("henlo");
    }

    @Override
    public boolean isOldValueRequired() {
        return true;
    }

    @Override
    public Factory<CacheEntryEventFilter<? super UUID, ? super UUID>> getCacheEntryEventFilterFactory() {
        return null;
    }

    @Override
    public boolean isSynchronous() {
        return true;
    }
}

The full exception is as follows.

Mar 02, 2025 7:01:47 PM org.apache.ignite.logger.java.JavaLogger error
SEVERE: Critical system error detected. Will be handled accordingly to configured handler [hnd=StopNodeOrHaltFailureHandler [tryStop=false, timeout=0, super=AbstractFailureHandler [ignoredFailureTypes=UnmodifiableSet [SYSTEM_WORKER_BLOCKED, SYSTEM_CRITICAL_OPERATION_TIMEOUT]]], failureCtx=FailureContext [type=CRITICAL_ERROR, err=class o.a.i.i.processors.cache.persistence.tree.CorruptedTreeException: B+Tree is corrupted [groupId=502692585, pageIds=[844420635166599], groupName=myCacheGroup, msg=Runtime failure on search row: SearchRow [key=KeyCacheObjectImpl [part=962, val=124117e0-e67c-4f9d-aed3-6e716da44e84, hasValBytes=true], hash=927627400, cacheId=-1368047377]]]]
class org.apache.ignite.internal.processors.cache.persistence.tree.CorruptedTreeException: B+Tree is corrupted [groupId=502692585, pageIds=[844420635166599], groupName=myCacheGroup, msg=Runtime failure on search row: SearchRow [key=KeyCacheObjectImpl [part=962, val=124117e0-e67c-4f9d-aed3-6e716da44e84, hasValBytes=true], hash=927627400, cacheId=-1368047377]]
	at org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree.corruptedTreeException(BPlusTree.java:6046)
	at org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree.invoke(BPlusTree.java:2171)
	at org.apache.ignite.internal.processors.cache.IgniteCacheOffheapManagerImpl$CacheDataStoreImpl.invoke0(IgniteCacheOffheapManagerImpl.java:1497)
	at org.apache.ignite.internal.processors.cache.IgniteCacheOffheapManagerImpl$CacheDataStoreImpl.invoke(IgniteCacheOffheapManagerImpl.java:1480)
	at org.apache.ignite.internal.processors.cache.IgniteCacheOffheapManagerImpl.invoke(IgniteCacheOffheapManagerImpl.java:395)
	at org.apache.ignite.internal.processors.cache.GridCacheMapEntry.innerUpdate(GridCacheMapEntry.java:1519)
	at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateSingle(GridDhtAtomicCache.java:2546)
	at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.update(GridDhtAtomicCache.java:2006)
	at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateAllAsyncInternal0(GridDhtAtomicCache.java:1825)
	at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateAllAsyncInternal(GridDhtAtomicCache.java:1698)
	at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicAbstractUpdateFuture.sendSingleRequest(GridNearAtomicAbstractUpdateFuture.java:294)
	at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicSingleUpdateFuture.map(GridNearAtomicSingleUpdateFuture.java:455)
	at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicSingleUpdateFuture.mapOnTopology(GridNearAtomicSingleUpdateFuture.java:415)
	at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicAbstractUpdateFuture.map(GridNearAtomicAbstractUpdateFuture.java:243)
	at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.update0(GridDhtAtomicCache.java:1150)
	at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.put0(GridDhtAtomicCache.java:601)
	at org.apache.ignite.internal.processors.cache.GridCacheAdapter.put(GridCacheAdapter.java:1927)
	at org.apache.ignite.internal.processors.cache.GridCacheAdapter.put(GridCacheAdapter.java:1906)
	at org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.put(IgniteCacheProxyImpl.java:1330)
	at org.apache.ignite.internal.processors.cache.GatewayProtectedCacheProxy.put(GatewayProtectedCacheProxy.java:836)
	at org.example.Main.main(Main.java:28)
Caused by: java.lang.NullPointerException
	at org.apache.ignite.internal.processors.cache.query.continuous.CacheContinuousQueryHandler.handleEvent(CacheContinuousQueryHandler.java:983)
	at org.apache.ignite.internal.processors.cache.query.continuous.CacheContinuousQueryHandler$2.skipUpdateCounter(CacheContinuousQueryHandler.java:580)
	at org.apache.ignite.internal.processors.cache.query.continuous.CacheContinuousQueryManager.skipUpdateCounter(CacheContinuousQueryManager.java:258)
	at org.apache.ignite.internal.processors.cache.CacheGroupContext.onPartitionCounterUpdate(CacheGroupContext.java:1016)
	at org.apache.ignite.internal.processors.cache.distributed.dht.topology.GridDhtLocalPartition.nextUpdateCounter(GridDhtLocalPartition.java:873)
	at org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtCacheEntry.nextPartitionCounter(GridDhtCacheEntry.java:105)
	at org.apache.ignite.internal.processors.cache.GridCacheMapEntry$AtomicCacheUpdateClosure.update(GridCacheMapEntry.java:5049)
	at org.apache.ignite.internal.processors.cache.GridCacheMapEntry$AtomicCacheUpdateClosure.call(GridCacheMapEntry.java:4785)
	at org.apache.ignite.internal.processors.cache.GridCacheMapEntry$AtomicCacheUpdateClosure.call(GridCacheMapEntry.java:4470)
	at org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree$Invoke.invokeClosure(BPlusTree.java:3942)
	at org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree.invokeDown(BPlusTree.java:2248)
	at org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree.invoke(BPlusTree.java:2138)
	... 19 more

Reproduced with Ignite 2.17.0, OpenLogic OpenJDK 11.0.22.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant