You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@ignite.apache.org by jpmoore40 <jo...@ca-cib.com> on 2017/11/27 16:53:58 UTC
MarshallerContextImpl: Failed to write class name to file
Hi,
I have found I regularly get exceptions such as the one below if I have 2
nodes on the same server trying to run IgniteCallable jobs at the same time.
Can anyone give me a hint on how to prevent this - it can prevent a job from
completing successfully.
Thanks
[16:45:27,217][SEVERE][pub-#68%null%][MarshallerContextImpl] Failed to write
class name to file [id=866349937,
clsName=org.joda.time.chrono.ISOChronology,
file=C:\apache-ignite\apache-ignite-fabric-2.3.0-bin\work\marshaller\866349937.classname]
java.io.FileNotFoundException:
C:\apache-ignite\apache-ignite-fabric-2.3.0-bin\work\marshaller\866349937.classname
(The process cannot access the file because it is being used by another
process)
at java.io.FileOutputStream.open0(Native Method)
at java.io.FileOutputStream.open(FileOutputStream.java:270)
at java.io.FileOutputStream.<init>(FileOutputStream.java:213)
at java.io.FileOutputStream.<init>(FileOutputStream.java:162)
at
org.apache.ignite.internal.MarshallerContextImpl$ContinuousQueryListener.onUpdated(MarshallerContextImpl.java:297)
at
org.apache.ignite.internal.processors.cache.query.continuous.CacheContinuousQueryHandler.onEntryUpdate(CacheContinuousQueryHandler.java:786)
at
org.apache.ignite.internal.processors.cache.query.continuous.CacheContinuousQueryHandler.access$700(CacheContinuousQueryHandler.java:91)
at
org.apache.ignite.internal.processors.cache.query.continuous.CacheContinuousQueryHandler$1.onEntryUpdated(CacheContinuousQueryHandler.java:412)
at
org.apache.ignite.internal.processors.cache.query.continuous.CacheContinuousQueryManager.onEntryUpdated(CacheContinuousQueryManager.java:347)
at
org.apache.ignite.internal.processors.cache.GridCacheMapEntry.innerUpdate(GridCacheMapEntry.java:2598)
at
org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateSingle(GridDhtAtomicCache.java:2385)
at
org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateAllAsyncInternal0(GridDhtAtomicCache.java:1787)
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.GridNearAtomicUpdateFuture.doUpdate(GridNearAtomicUpdateFuture.java:592)
at
org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicUpdateFuture.map(GridNearAtomicUpdateFuture.java:721)
at
org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicUpdateFuture.mapOnTopology(GridNearAtomicUpdateFuture.java:547)
at
org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicAbstractUpdateFuture.map(GridNearAtomicAbstractUpdateFuture.java:208)
at
org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache$23.apply(GridDhtAtomicCache.java:1150)
at
org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache$23.apply(GridDhtAtomicCache.java:1148)
at
org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.asyncOp(GridDhtAtomicCache.java:846)
at
org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateAsync0(GridDhtAtomicCache.java:1148)
at
org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.tryGetAndPut(GridDhtAtomicCache.java:632)
at
org.apache.ignite.internal.MarshallerContextImpl.registerClassName(MarshallerContextImpl.java:160)
at
org.apache.ignite.internal.MarshallerContextAdapter.registerClass(MarshallerContextAdapter.java:157)
at
org.apache.ignite.internal.binary.BinaryContext.registerUserClassDescriptor(BinaryContext.java:767)
at
org.apache.ignite.internal.binary.BinaryContext.registerClassDescriptor(BinaryContext.java:744)
at
org.apache.ignite.internal.binary.BinaryContext.descriptorForClass(BinaryContext.java:616)
at
org.apache.ignite.internal.binary.BinaryWriterExImpl.marshal0(BinaryWriterExImpl.java:164)
at
org.apache.ignite.internal.binary.BinaryWriterExImpl.marshal(BinaryWriterExImpl.java:147)
at
org.apache.ignite.internal.binary.BinaryWriterExImpl.marshal(BinaryWriterExImpl.java:134)
at
org.apache.ignite.internal.binary.BinaryWriterExImpl.doWriteObject(BinaryWriterExImpl.java:498)
at
org.apache.ignite.internal.binary.BinaryWriterExImpl.writeObjectField(BinaryWriterExImpl.java:1131)
at
org.apache.ignite.internal.binary.BinaryFieldAccessor$DefaultFinalClassAccessor.write(BinaryFieldAccessor.java:623)
at
org.apache.ignite.internal.binary.BinaryClassDescriptor.write(BinaryClassDescriptor.java:780)
at
org.apache.ignite.internal.binary.BinaryWriterExImpl.marshal0(BinaryWriterExImpl.java:206)
at
org.apache.ignite.internal.binary.BinaryWriterExImpl.marshal(BinaryWriterExImpl.java:147)
at
org.apache.ignite.internal.binary.BinaryWriterExImpl.marshal(BinaryWriterExImpl.java:134)
at
org.apache.ignite.internal.binary.BinaryWriterExImpl.doWriteObject(BinaryWriterExImpl.java:498)
at
org.apache.ignite.internal.binary.BinaryWriterExImpl.writeObjectField(BinaryWriterExImpl.java:1131)
at
org.apache.ignite.internal.binary.BinaryFieldAccessor$DefaultFinalClassAccessor.write(BinaryFieldAccessor.java:623)
at
org.apache.ignite.internal.binary.BinaryClassDescriptor.write(BinaryClassDescriptor.java:780)
at
org.apache.ignite.internal.binary.BinaryWriterExImpl.marshal0(BinaryWriterExImpl.java:206)
at
org.apache.ignite.internal.binary.BinaryWriterExImpl.marshal(BinaryWriterExImpl.java:147)
at
org.apache.ignite.internal.binary.BinaryWriterExImpl.marshal(BinaryWriterExImpl.java:134)
at
org.apache.ignite.internal.binary.BinaryWriterExImpl.doWriteObject(BinaryWriterExImpl.java:498)
at
org.apache.ignite.internal.binary.BinaryWriterExImpl.doWriteCollection(BinaryWriterExImpl.java:750)
at
org.apache.ignite.internal.binary.BinaryClassDescriptor.write(BinaryClassDescriptor.java:681)
at
org.apache.ignite.internal.binary.BinaryWriterExImpl.marshal0(BinaryWriterExImpl.java:206)
at
org.apache.ignite.internal.binary.BinaryWriterExImpl.marshal(BinaryWriterExImpl.java:147)
at
org.apache.ignite.internal.binary.BinaryWriterExImpl.marshal(BinaryWriterExImpl.java:134)
at
org.apache.ignite.internal.binary.GridBinaryMarshaller.marshal(GridBinaryMarshaller.java:239)
at
org.apache.ignite.internal.binary.BinaryMarshaller.marshal0(BinaryMarshaller.java:83)
at
org.apache.ignite.marshaller.AbstractNodeNameAwareMarshaller.marshal(AbstractNodeNameAwareMarshaller.java:58)
at
org.apache.ignite.internal.util.IgniteUtils.marshal(IgniteUtils.java:9861)
at
org.apache.ignite.internal.processors.job.GridJobWorker.finishJob(GridJobWorker.java:811)
at
org.apache.ignite.internal.processors.job.GridJobWorker.finishJob(GridJobWorker.java:745)
at
org.apache.ignite.internal.processors.job.GridJobWorker.execute0(GridJobWorker.java:608)
at
org.apache.ignite.internal.processors.job.GridJobWorker.body(GridJobWorker.java:479)
at
org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:110)
at
org.apache.ignite.internal.processors.job.GridJobProcessor.processJobExecuteRequest(GridJobProcessor.java:1180)
at
org.apache.ignite.internal.processors.job.GridJobProcessor$JobExecutionListener.onMessage(GridJobProcessor.java:1894)
at
org.apache.ignite.internal.managers.communication.GridIoManager.invokeListener(GridIoManager.java:1082)
at
org.apache.ignite.internal.managers.communication.GridIoManager.processRegularMessage0(GridIoManager.java:710)
at
org.apache.ignite.internal.managers.communication.GridIoManager.access$1700(GridIoManager.java:102)
at
org.apache.ignite.internal.managers.communication.GridIoManager$5.run(GridIoManager.java:673)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
--
Sent from: http://apache-ignite-users.70518.x6.nabble.com/
Re: MarshallerContextImpl: Failed to write class name to file
Posted by jpmoore40 <jo...@ca-cib.com>.
Thanks Ilya!
--
Sent from: http://apache-ignite-users.70518.x6.nabble.com/
Re: MarshallerContextImpl: Failed to write class name to file
Posted by "ilya.kasnacheev" <il...@gmail.com>.
Hello!
Yes, specifying workDirectory should work OK.
For log files, it would depend on which logger you are using (e.g. Log4j2),
and it should be configured using that logger's configuration.
Regards,
--
Sent from: http://apache-ignite-users.70518.x6.nabble.com/
Re: MarshallerContextImpl: Failed to write class name to file
Posted by jpmoore40 <jo...@ca-cib.com>.
Having done a bit more digging it seems the best option is to not set
IGNITE_HOME at all but use IgniteConfiguration.setWorkDirectory(). I'm
potentially going to be running multiple nodes on the same server and would
prefer not to create individual start-up scripts for each (as I may want to
add new nodes on the fly). Seems I could programmatically set the directory
using the process id to guarantee I don't get a clash. Does this seem like a
reasonable approach? Is there any way to do something similar for log files?
As a bit of extra information - I'm writing a server that uses a native
library that is not thread safe, and due to native libraries being
statically loaded can only have one instance per process. As I need to allow
the server to process concurrent requests I will have many nodes running to
process them but they will all (initially at least) be on the same physical
server.
Thanks
Jon
--
Sent from: http://apache-ignite-users.70518.x6.nabble.com/
Re: MarshallerContextImpl: Failed to write class name to file
Posted by Ilya Kasnacheev <il...@gmail.com>.
Hello,
I think you're right, it would use TMP now so setting IGNITE_HOME is
required and you can ignore 2).
I think I was remembering wrong.
Regards,
--
Ilya Kasnacheev
2017-11-28 15:21 GMT+03:00 jpmoore40 <jo...@ca-cib.com>:
> OK thanks. I was misunderstanding IGNITE_HOME as I thought it was relating
> to
> the location of your ignite installation if you were using the start-up
> scripts.
>
> Regarding your point 2) though, how does changing the starting directory
> change things? If I don't set IGNITE_HOME it uses the temp directory to
> write to, irrespective of where I start the program from.
>
> Thanks
> Jon
>
>
>
>
>
> --
> Sent from: http://apache-ignite-users.70518.x6.nabble.com/
>
Re: MarshallerContextImpl: Failed to write class name to file
Posted by jpmoore40 <jo...@ca-cib.com>.
OK thanks. I was misunderstanding IGNITE_HOME as I thought it was relating to
the location of your ignite installation if you were using the start-up
scripts.
Regarding your point 2) though, how does changing the starting directory
change things? If I don't set IGNITE_HOME it uses the temp directory to
write to, irrespective of where I start the program from.
Thanks
Jon
--
Sent from: http://apache-ignite-users.70518.x6.nabble.com/
Re: MarshallerContextImpl: Failed to write class name to file
Posted by "ilya.kasnacheev" <il...@gmail.com>.
Hello,
You should have IGNITE_HOME set to some dedicated directory for every node.
If you run your nodes from your main classes, you should either 1) set
IGNITE_HOME to some unique directory for every run, 2) start those main
classes with different starting directories, which will be used in absense
of IGNITE_HOME.
You can read a bit about IGNITE_HOME here:
https://apacheignite.readme.io/docs/getting-started
It is usually not necessary if you only have one node, but it becomes
important once you have two nodes on the same system.
Regards,
--
Sent from: http://apache-ignite-users.70518.x6.nabble.com/
Re: MarshallerContextImpl: Failed to write class name to file
Posted by jpmoore40 <jo...@ca-cib.com>.
Hi,
Thanks for your reply. I'm a bit unclear on all this. I realised that I have
IGNITE_HOME set but I actually run my server and nodes from my own main
classes, rather than using the ignite start-up scripts so this doesn't seem
to be needed. I have removed the IGNITE_HOME environment variable and I get
the same issue though this time it clashes when writing to
%TMP%\ignite\work\marshaller. Can you point me to the appropriate bit of the
documentation that shows how to set a different directory for each node? Any
further info on potential log file issues would be appreciated too.
Thanks
Jon
--
Sent from: http://apache-ignite-users.70518.x6.nabble.com/
Re: MarshallerContextImpl: Failed to write class name to file
Posted by Ilya Kasnacheev <il...@gmail.com>.
Hello!
The recommendation here is running two nodes from two different
directories: such as apache-ignite-fabric-2.3.0-node1 and apache-
ignite-fabric-2.3.0-node2.
Otherwise such collisions may occur. Logs for two instances might also get
clobbered when run from the same directory.
Regards,
--
Ilya Kasnacheev
2017-11-27 19:53 GMT+03:00 jpmoore40 <jo...@ca-cib.com>:
> Hi,
>
> I have found I regularly get exceptions such as the one below if I have 2
> nodes on the same server trying to run IgniteCallable jobs at the same
> time.
> Can anyone give me a hint on how to prevent this - it can prevent a job
> from
> completing successfully.
>
> Thanks
>
> [16:45:27,217][SEVERE][pub-#68%null%][MarshallerContextImpl] Failed to
> write
> class name to file [id=866349937,
> clsName=org.joda.time.chrono.ISOChronology,
> file=C:\apache-ignite\apache-ignite-fabric-2.3.0-bin\work\
> marshaller\866349937.classname]
> java.io.FileNotFoundException:
> C:\apache-ignite\apache-ignite-fabric-2.3.0-bin\work\
> marshaller\866349937.classname
> (The process cannot access the file because it is being used by another
> process)
> at java.io.FileOutputStream.open0(Native Method)
> at java.io.FileOutputStream.open(FileOutputStream.java:270)
> at java.io.FileOutputStream.<init>(FileOutputStream.java:213)
> at java.io.FileOutputStream.<init>(FileOutputStream.java:162)
> at
> org.apache.ignite.internal.MarshallerContextImpl$ContinuousQueryListener.
> onUpdated(MarshallerContextImpl.java:297)
> at
> org.apache.ignite.internal.processors.cache.query.continuous.
> CacheContinuousQueryHandler.onEntryUpdate(CacheContinuousQueryHandler.
> java:786)
> at
> org.apache.ignite.internal.processors.cache.query.continuous.
> CacheContinuousQueryHandler.access$700(CacheContinuousQueryHandler.
> java:91)
> at
> org.apache.ignite.internal.processors.cache.query.continuous.
> CacheContinuousQueryHandler$1.onEntryUpdated(CacheContinuousQueryHandler.
> java:412)
> at
> org.apache.ignite.internal.processors.cache.query.continuous.
> CacheContinuousQueryManager.onEntryUpdated(CacheContinuousQueryManager.
> java:347)
> at
> org.apache.ignite.internal.processors.cache.GridCacheMapEntry.innerUpdate(
> GridCacheMapEntry.java:2598)
> at
> org.apache.ignite.internal.processors.cache.distributed.
> dht.atomic.GridDhtAtomicCache.updateSingle(GridDhtAtomicCache.java:2385)
> at
> org.apache.ignite.internal.processors.cache.distributed.
> dht.atomic.GridDhtAtomicCache.updateAllAsyncInternal0(
> GridDhtAtomicCache.java:1787)
> 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.
> GridNearAtomicUpdateFuture.doUpdate(GridNearAtomicUpdateFuture.java:592)
> at
> org.apache.ignite.internal.processors.cache.distributed.dht.atomic.
> GridNearAtomicUpdateFuture.map(GridNearAtomicUpdateFuture.java:721)
> at
> org.apache.ignite.internal.processors.cache.distributed.dht.atomic.
> GridNearAtomicUpdateFuture.mapOnTopology(GridNearAtomicUpdateFuture.
> java:547)
> at
> org.apache.ignite.internal.processors.cache.distributed.dht.atomic.
> GridNearAtomicAbstractUpdateFuture.map(GridNearAtomicAbstractUpdateFu
> ture.java:208)
> at
> org.apache.ignite.internal.processors.cache.distributed.
> dht.atomic.GridDhtAtomicCache$23.apply(GridDhtAtomicCache.java:1150)
> at
> org.apache.ignite.internal.processors.cache.distributed.
> dht.atomic.GridDhtAtomicCache$23.apply(GridDhtAtomicCache.java:1148)
> at
> org.apache.ignite.internal.processors.cache.distributed.
> dht.atomic.GridDhtAtomicCache.asyncOp(GridDhtAtomicCache.java:846)
> at
> org.apache.ignite.internal.processors.cache.distributed.
> dht.atomic.GridDhtAtomicCache.updateAsync0(GridDhtAtomicCache.java:1148)
> at
> org.apache.ignite.internal.processors.cache.distributed.
> dht.atomic.GridDhtAtomicCache.tryGetAndPut(GridDhtAtomicCache.java:632)
> at
> org.apache.ignite.internal.MarshallerContextImpl.registerClassName(
> MarshallerContextImpl.java:160)
> at
> org.apache.ignite.internal.MarshallerContextAdapter.registerClass(
> MarshallerContextAdapter.java:157)
> at
> org.apache.ignite.internal.binary.BinaryContext.
> registerUserClassDescriptor(BinaryContext.java:767)
> at
> org.apache.ignite.internal.binary.BinaryContext.registerClassDescriptor(
> BinaryContext.java:744)
> at
> org.apache.ignite.internal.binary.BinaryContext.descriptorForClass(
> BinaryContext.java:616)
> at
> org.apache.ignite.internal.binary.BinaryWriterExImpl.
> marshal0(BinaryWriterExImpl.java:164)
> at
> org.apache.ignite.internal.binary.BinaryWriterExImpl.
> marshal(BinaryWriterExImpl.java:147)
> at
> org.apache.ignite.internal.binary.BinaryWriterExImpl.
> marshal(BinaryWriterExImpl.java:134)
> at
> org.apache.ignite.internal.binary.BinaryWriterExImpl.doWriteObject(
> BinaryWriterExImpl.java:498)
> at
> org.apache.ignite.internal.binary.BinaryWriterExImpl.writeObjectField(
> BinaryWriterExImpl.java:1131)
> at
> org.apache.ignite.internal.binary.BinaryFieldAccessor$
> DefaultFinalClassAccessor.write(BinaryFieldAccessor.java:623)
> at
> org.apache.ignite.internal.binary.BinaryClassDescriptor.
> write(BinaryClassDescriptor.java:780)
> at
> org.apache.ignite.internal.binary.BinaryWriterExImpl.
> marshal0(BinaryWriterExImpl.java:206)
> at
> org.apache.ignite.internal.binary.BinaryWriterExImpl.
> marshal(BinaryWriterExImpl.java:147)
> at
> org.apache.ignite.internal.binary.BinaryWriterExImpl.
> marshal(BinaryWriterExImpl.java:134)
> at
> org.apache.ignite.internal.binary.BinaryWriterExImpl.doWriteObject(
> BinaryWriterExImpl.java:498)
> at
> org.apache.ignite.internal.binary.BinaryWriterExImpl.writeObjectField(
> BinaryWriterExImpl.java:1131)
> at
> org.apache.ignite.internal.binary.BinaryFieldAccessor$
> DefaultFinalClassAccessor.write(BinaryFieldAccessor.java:623)
> at
> org.apache.ignite.internal.binary.BinaryClassDescriptor.
> write(BinaryClassDescriptor.java:780)
> at
> org.apache.ignite.internal.binary.BinaryWriterExImpl.
> marshal0(BinaryWriterExImpl.java:206)
> at
> org.apache.ignite.internal.binary.BinaryWriterExImpl.
> marshal(BinaryWriterExImpl.java:147)
> at
> org.apache.ignite.internal.binary.BinaryWriterExImpl.
> marshal(BinaryWriterExImpl.java:134)
> at
> org.apache.ignite.internal.binary.BinaryWriterExImpl.doWriteObject(
> BinaryWriterExImpl.java:498)
> at
> org.apache.ignite.internal.binary.BinaryWriterExImpl.doWriteCollection(
> BinaryWriterExImpl.java:750)
> at
> org.apache.ignite.internal.binary.BinaryClassDescriptor.
> write(BinaryClassDescriptor.java:681)
> at
> org.apache.ignite.internal.binary.BinaryWriterExImpl.
> marshal0(BinaryWriterExImpl.java:206)
> at
> org.apache.ignite.internal.binary.BinaryWriterExImpl.
> marshal(BinaryWriterExImpl.java:147)
> at
> org.apache.ignite.internal.binary.BinaryWriterExImpl.
> marshal(BinaryWriterExImpl.java:134)
> at
> org.apache.ignite.internal.binary.GridBinaryMarshaller.
> marshal(GridBinaryMarshaller.java:239)
> at
> org.apache.ignite.internal.binary.BinaryMarshaller.
> marshal0(BinaryMarshaller.java:83)
> at
> org.apache.ignite.marshaller.AbstractNodeNameAwareMarshaller.marshal(
> AbstractNodeNameAwareMarshaller.java:58)
> at
> org.apache.ignite.internal.util.IgniteUtils.marshal(IgniteUtils.java:9861)
> at
> org.apache.ignite.internal.processors.job.GridJobWorker.
> finishJob(GridJobWorker.java:811)
> at
> org.apache.ignite.internal.processors.job.GridJobWorker.
> finishJob(GridJobWorker.java:745)
> at
> org.apache.ignite.internal.processors.job.GridJobWorker.
> execute0(GridJobWorker.java:608)
> at
> org.apache.ignite.internal.processors.job.GridJobWorker.
> body(GridJobWorker.java:479)
> at
> org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:110)
> at
> org.apache.ignite.internal.processors.job.GridJobProcessor.
> processJobExecuteRequest(GridJobProcessor.java:1180)
> at
> org.apache.ignite.internal.processors.job.GridJobProcessor$
> JobExecutionListener.onMessage(GridJobProcessor.java:1894)
> at
> org.apache.ignite.internal.managers.communication.
> GridIoManager.invokeListener(GridIoManager.java:1082)
> at
> org.apache.ignite.internal.managers.communication.GridIoManager.
> processRegularMessage0(GridIoManager.java:710)
> at
> org.apache.ignite.internal.managers.communication.
> GridIoManager.access$1700(GridIoManager.java:102)
> at
> org.apache.ignite.internal.managers.communication.GridIoManager$5.run(
> GridIoManager.java:673)
> at
> java.util.concurrent.ThreadPoolExecutor.runWorker(
> ThreadPoolExecutor.java:1142)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(
> ThreadPoolExecutor.java:617)
> at java.lang.Thread.run(Thread.java:745)
>
>
>
>
> --
> Sent from: http://apache-ignite-users.70518.x6.nabble.com/
>