Hi
We are running hazelcast 3.2.1 in server mode, occasionally submitting MapReduce jobs via various clients.
In the case where the mapper is not available on the server (IE jar not present), on job submission the server will spit out a ClassNotFoundException, however this is never propogated back to the client. The client receives a Future with a job ID, with no indication the job cannot run. When future::get() is called, obviously this then blocks forever.
I have also tried this against 3.3.
Is there any way on job submission I can get this exception and therefore not call get()?
A better solution would be to not require the jar on the server, IE serialise the class def along with the data, though not sure how technically possible this is. I haven't investigated.
Thanks
(Package names changed to protect the innocent!)
2014/09/08 12:14 27 [FATAL] ?.?:? - [169.94.140.160]:5900 [dev] [3.2.1] java.lang.ClassNotFoundException: somepackage.SomeClass
com.hazelcast.nio.serialization.HazelcastSerializationException: java.lang.ClassNotFoundException: somepackage.SomeClass
at com.hazelcast.nio.serialization.DefaultSerializers$ObjectSerializer.read(DefaultSerializers.java:190)
at com.hazelcast.nio.serialization.StreamSerializerAdapter.read(StreamSerializerAdapter.java:40)
at com.hazelcast.nio.serialization.SerializationServiceImpl.readObject(SerializationServiceImpl.java:279)
at com.hazelcast.nio.serialization.ByteArrayObjectDataInput.readObject(ByteArrayObjectDataInput.java:433)
at com.hazelcast.mapreduce.impl.client.ClientMapReduceRequest.readData(ClientMapReduceRequest.java:220)
at com.hazelcast.mapreduce.impl.client.ClientMapReduceRequest.read(ClientMapReduceRequest.java:175)
at com.hazelcast.client.ClientRequest.readPortable(ClientRequest.java:101)
at com.hazelcast.nio.serialization.PortableSerializer.read(PortableSerializer.java:99)
at com.hazelcast.nio.serialization.PortableSerializer.read(PortableSerializer.java:29)
at com.hazelcast.nio.serialization.StreamSerializerAdapter.read(StreamSerializerAdapter.java:59)
at com.hazelcast.nio.serialization.SerializationServiceImpl.toObject(SerializationServiceImpl.java:221)
at com.hazelcast.client.ClientEngineImpl$ClientPacketProcessor.loadRequest(ClientEngineImpl.java:457)
at com.hazelcast.client.ClientEngineImpl$ClientPacketProcessor.run(ClientEngineImpl.java:433)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
at com.hazelcast.util.executor.PoolExecutorThreadFactory$ManagedThread.run(PoolExecutorThreadFactory.java:59)
Caused by: java.lang.ClassNotFoundException: somepackage.SomeClass
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
at com.hazelcast.nio.ClassLoaderUtil.loadClass(ClassLoaderUtil.java:113)
at com.hazelcast.nio.IOUtil$1.resolveClass(IOUtil.java:89)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1593)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1514)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1750)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)
at com.hazelcast.nio.serialization.DefaultSerializers$ObjectSerializer.read(DefaultSerializers.java:185)
... 16 more