You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Aleksey Plekhanov (JIRA)" <ji...@apache.org> on 2018/12/14 06:52:00 UTC
[jira] [Updated] (IGNITE-10680) Add the ability to use existing
kernel context in standalone WAL iterator
[ https://issues.apache.org/jira/browse/IGNITE-10680?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Aleksey Plekhanov updated IGNITE-10680:
---------------------------------------
Summary: Add the ability to use existing kernel context in standalone WAL iterator (was: Add the ability to use existing shared cache context in standalone WAL iterator)
> Add the ability to use existing kernel context in standalone WAL iterator
> -------------------------------------------------------------------------
>
> Key: IGNITE-10680
> URL: https://issues.apache.org/jira/browse/IGNITE-10680
> Project: Ignite
> Issue Type: Improvement
> Affects Versions: 2.7
> Reporter: Aleksey Plekhanov
> Assignee: Aleksey Plekhanov
> Priority: Major
> Fix For: 2.8
>
>
> In the current implementation it's only possible to use fake kernel context in standalone WAL iterator. If we need to use binary meta from the running Ignite node we must specify binary meta directory in parameters of standalone WAL iterator factory. But there is a possible race with binary meta files read/write since binary meta received with {{MetadataUpdateProposedMessage}} can be written to the file and concurrently read from the same file at the same time. This can lead to assertions like the following:
> {noformat}
> java.lang.AssertionError
> at org.apache.ignite.internal.binary.GridBinaryMarshaller.deserialize(GridBinaryMarshaller.java:305)
> at org.apache.ignite.internal.binary.BinaryMarshaller.unmarshal0(BinaryMarshaller.java:121)
> at org.apache.ignite.marshaller.AbstractNodeNameAwareMarshaller.unmarshal(AbstractNodeNameAwareMarshaller.java:94)
> at org.apache.ignite.internal.util.IgniteUtils.unmarshal(IgniteUtils.java:10103)
> at org.apache.ignite.internal.processors.cache.binary.BinaryMetadataFileStore.restoreMetadata(BinaryMetadataFileStore.java:117)
> at org.apache.ignite.internal.processors.cache.binary.CacheObjectBinaryProcessorImpl.start(CacheObjectBinaryProcessorImpl.java:251)
> at org.apache.ignite.internal.processors.cache.persistence.wal.reader.StandaloneGridKernalContext.binaryProcessor(StandaloneGridKernalContext.java:180)
> at org.apache.ignite.internal.processors.cache.persistence.wal.reader.StandaloneGridKernalContext.<init>(StandaloneGridKernalContext.java:155)
> at org.apache.ignite.internal.processors.cache.persistence.wal.reader.IgniteWalIteratorFactory.prepareSharedCtx(IgniteWalIteratorFactory.java:359)
> at org.apache.ignite.internal.processors.cache.persistence.wal.reader.IgniteWalIteratorFactory.iterator(IgniteWalIteratorFactory.java:177)
> {noformat}
> To solve this we can use in standalone WAL iterator existing kernel context of the started node instead of creating new fake one.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)