You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Reed Sandberg (JIRA)" <ji...@apache.org> on 2017/11/02 04:18:00 UTC
[jira] [Commented] (IGNITE-6815) "Unexpected exception during cache
update" via NullPointerException thrown using TouchedExpiryPolicy
[ https://issues.apache.org/jira/browse/IGNITE-6815?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16235149#comment-16235149 ]
Reed Sandberg commented on IGNITE-6815:
---------------------------------------
Seems to stem from the following level of the stack trace (version 2.3.0 release package from maven public repo):
{noformat}
at org.apache.ignite.internal.processors.cache.GridCacheMapEntry$AtomicCacheUpdateClosure.initResultOnCancelUpdate(GridCacheMapEntry.java:4267)
{noformat}
With an expiry configured, the block at line 4243 is entered and the `needUpdate` flag is then set. However, in this particular case, I'm using a StreamTransformer closure, where CacheInvokeEntry.setValue(...) is never called. This is perhaps why `storeLoadedVal` is null (line 4270), but it should have some value because an update is triggered by the TouchedExpiryPolicy to update the entry's timestamp. Something like the following might fix it:
starting at line 4266:
{noformat}
if (needUpdate) {
if (storeLoadedVal == null) {
storeLoadedVal = entry.val;
}
newRow = entry.localPartition().dataStore().createRow(
entry.cctx,
entry.key,
storeLoadedVal,
newVer,
entry.expireTimeExtras(),
oldRow);
...
{noformat}
> "Unexpected exception during cache update" via NullPointerException thrown using TouchedExpiryPolicy
> ----------------------------------------------------------------------------------------------------
>
> Key: IGNITE-6815
> URL: https://issues.apache.org/jira/browse/IGNITE-6815
> Project: Ignite
> Issue Type: Bug
> Security Level: Public(Viewable by anyone)
> Components: cache, streaming
> Affects Versions: 2.2, 2.3
> Environment: 4.10.0-33-generic #37~16.04.1-Ubuntu SMP Fri Aug 11 14:07:24 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
> Distributor ID: LinuxMint
> Description: Linux Mint 18.2 Sonya
> Release: 18.2
> Codename: sonya
> Reporter: Reed Sandberg
> Priority: Major
>
> This is triggered when I apply an expiry on the cache during an import with StreamLoader, with no expiry on the cache, the import runs fine.
> Somehow the following line of code is hit with val == null:
> org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManagerImpl.java:1253
> Stack trace:
> {noformat}
> 16:04:25.259 ERROR o.a.i.i.p.c.d.d.a.GridDhtAtomicCache - <devid-dbid-map> Unexpected exception during cache update
> org.apache.ignite.IgniteException: Runtime failure on search row: org.apache.ignite.internal.processors.cache.tree.SearchRow@68a4e885
> at org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree.invoke(BPlusTree.java:1632)
> at org.apache.ignite.internal.processors.cache.IgniteCacheOffheapManagerImpl$CacheDataStoreImpl.invoke(IgniteCacheOffheapManagerImpl.java:1201)
> at org.apache.ignite.internal.processors.cache.IgniteCacheOffheapManagerImpl.invoke(IgniteCacheOffheapManagerImpl.java:343)
> at org.apache.ignite.internal.processors.cache.GridCacheMapEntry.innerUpdate(GridCacheMapEntry.java:1693)
> at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateSingle(GridDhtAtomicCache.java:2419)
> at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.update(GridDhtAtomicCache.java:1882)
> at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateAllAsyncInternal0(GridDhtAtomicCache.java:1735)
> at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateAllAsyncInternal(GridDhtAtomicCache.java:1627)
> at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicAbstractUpdateFuture.sendSingleRequest(GridNearAtomicAbstractUpdateFuture.java:299)
> at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicSingleUpdateFuture.map(GridNearAtomicSingleUpdateFuture.java:483)
> at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicSingleUpdateFuture.mapOnTopology(GridNearAtomicSingleUpdateFuture.java:443)
> at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicAbstractUpdateFuture.map(GridNearAtomicAbstractUpdateFuture.java:248)
> at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.update0(GridDhtAtomicCache.java:1116)
> at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.invoke0(GridDhtAtomicCache.java:825)
> at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.invoke(GridDhtAtomicCache.java:783)
> at org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.invoke(IgniteCacheProxyImpl.java:1338)
> at org.apache.ignite.internal.processors.cache.GatewayProtectedCacheProxy.invoke(GatewayProtectedCacheProxy.java:1320)
> at org.apache.ignite.stream.StreamTransformer.receive(StreamTransformer.java:45)
> at org.apache.ignite.internal.processors.datastreamer.DataStreamerUpdateJob.call(DataStreamerUpdateJob.java:137)
> at org.apache.ignite.internal.util.IgniteUtils.wrapThreadLoader(IgniteUtils.java:6631)
> at org.apache.ignite.internal.processors.closure.GridClosureProcessor$2.body(GridClosureProcessor.java:967)
> at org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:110)
> at org.apache.ignite.internal.util.StripedExecutor$Stripe.run(StripedExecutor.java:505)
> at java.lang.Thread.run(Thread.java:748)
> Caused by: java.lang.NullPointerException: null
> at org.apache.ignite.internal.processors.cache.IgniteCacheOffheapManagerImpl$CacheDataStoreImpl.createRow(IgniteCacheOffheapManagerImpl.java:1253)
> at org.apache.ignite.internal.processors.cache.GridCacheMapEntry$AtomicCacheUpdateClosure.initResultOnCancelUpdate(GridCacheMapEntry.java:4267)
> at org.apache.ignite.internal.processors.cache.GridCacheMapEntry$AtomicCacheUpdateClosure.call(GridCacheMapEntry.java:4154)
> at org.apache.ignite.internal.processors.cache.GridCacheMapEntry$AtomicCacheUpdateClosure.call(GridCacheMapEntry.java:3918)
> at org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree$Invoke.invokeClosure(BPlusTree.java:2988)
> at org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree$Invoke.access$6200(BPlusTree.java:2882)
> at org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree.invokeDown(BPlusTree.java:1719)
> at org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree.invoke(BPlusTree.java:1602)
> ... 23 common frames omitted
> {noformat}
> The NPE seems to be triggered only when applying a TTL to the cache:
> {noformat}
> CacheConfiguration<DeviceId, DeviceIdCacheEntry> ccDevidCache =
> new CacheConfiguration<>();
> ccDevidCache = ccDevidCache.setExpiryPolicyFactory(FactoryBuilder.factoryOf(
> new TouchedExpiryPolicy(new Duration(DAYS, GRAPH_CACHE_TTL))))
> .setEagerTtl(true)
> .setName("devid-dbid-map");
> ignite.getOrCreateCache(ccDevidCache);
> {noformat}
> However it works fine with a 'plain' cache config:
> {noformat}
> ignite.createCache("devid-dbid-map");
> {noformat}
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)