[ 
https://issues.apache.org/jira/browse/IGNITE-10376?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16721491#comment-16721491
 ] 

Sergey Chugunov commented on IGNITE-10376:
------------------------------------------

[~ivanan.fed],

Updating metadata never waits for PME: it is a process built on top of 
discovery custom messages that are independent from PME.

Moving metadate update process from discovery thread to system pool is a wrong 
way to solve the issue, don't waste your efforts.
In a nutshell it is essential to execute all updates to binary metadata in a 
single-threaded fashion, so if there are any ongoing updates other threads 
(e.g. executing transactions) may need to wait for current updates to finish.

First thing to do here is to figure out the exact sequence of events that lead 
to metadata update hang. It may be the case that in 
{{CacheObjectBinaryProcessorImpl.metadata(CacheObjectBinaryProcessorImpl.java:685)}}
 thread don't need to wait at all, and a simple additional check will fix the 
deadlock.


> Fail to update metadata during invocation on cache 
> ---------------------------------------------------
>
>                 Key: IGNITE-10376
>                 URL: https://issues.apache.org/jira/browse/IGNITE-10376
>             Project: Ignite
>          Issue Type: Task
>            Reporter: Ivan Fedotov
>            Assignee: Ivan Fedotov
>            Priority: Major
>              Labels: MakeTeamcityGreenAgain, stability, test-fail
>             Fix For: 2.8
>
>         Attachments: IGNITE-10376 log.txt
>
>
> BinaryObjectException exception sometimes appears in 
> [testAtomicOnheapTwoBackupAsyncFullSync|https://ci.ignite.apache.org/viewLog.html?buildId=2398013&tab=buildResultsDiv&buildTypeId=IgniteTests24Java8_ContinuousQuery4#testNameId3300126853696550025]
>  at the 
> [moment|https://github.com/apache/ignite/blob/master/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryOrderingEventTest.java#L371]
>  of CacheEntryProcessor invocation.
> {code}class org.apache.ignite.binary.BinaryObjectException: Failed to update 
> meta data for type: 
> org.apache.ignite.internal.processors.cache.query.continuous.CacheContinuousQueryOrderingEventTest$QueryTestValue
>       at 
> org.apache.ignite.internal.processors.cache.binary.CacheObjectBinaryProcessorImpl.addMeta(CacheObjectBinaryProcessorImpl.java:516)
>       at 
> org.apache.ignite.internal.processors.cache.binary.CacheObjectBinaryProcessorImpl$1.addMeta(CacheObjectBinaryProcessorImpl.java:194)
>       at 
> org.apache.ignite.internal.binary.BinaryContext.updateMetadata(BinaryContext.java:1332)
>       at 
> org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateAllAsyncInternal0(GridDhtAtomicCache.java:1815)
>       at 
> org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateAllAsyncInternal(GridDhtAtomicCache.java:1668)
>       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:1150)
>       at 
> org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.invoke0(GridDhtAtomicCache.java:831)
>       at 
> org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.invoke(GridDhtAtomicCache.java:787)
>       at 
> org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.invoke(IgniteCacheProxyImpl.java:1438)
>       at 
> org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.invoke(IgniteCacheProxyImpl.java:1482)
>       at 
> org.apache.ignite.internal.processors.cache.GatewayProtectedCacheProxy.invoke(GatewayProtectedCacheProxy.java:1228)
>       at 
> org.apache.ignite.internal.processors.cache.query.continuous.CacheContinuousQueryOrderingEventTest$1.run(CacheContinuousQueryOrderingEventTest.java:373)
>       at 
> org.apache.ignite.testframework.GridTestUtils$7.call(GridTestUtils.java:1300)
>       at 
> org.apache.ignite.testframework.GridTestThread.run(GridTestThread.java:84){code}
> It can be because of absence of locks in 
> GridCacheMapEntry#touch(GridCacheMapEntry.java:5063).
> It seems that test does not work after integration MVCC in Continuous Query.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to