Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GridCompute.run()/broadcast() with Java 8 lambda throws GridException: Failed to find class with given class loader for unmarshalling (make sure same version of all classes are available on all nodes or enable peer-class-loading): GridDeploymentClassLoader #74

Open
ceefour opened this issue Jul 4, 2014 · 5 comments

Comments

@ceefour
Copy link

ceefour commented Jul 4, 2014

Code:

try (Grid grid = GridGain.start("/home/ceefour/gridgain-platform-os-6.1.9-nix/examples/config/example-compute.xml")) {
    grid.compute().broadcast( () -> System.out.println("Hello") ).get();
}

GridGain 6.1.9.

Test project: https://github.com/ceefour/gggettingstarted

Error:

[13:54:44] Topology snapshot [ver=11, nodes=3, CPUs=4, heap=3.7GB]
Hello
[13:54:44,606][SEVERE][gridgain-#18%sys-null%][GridTaskWorker] Failed to obtain remote job result policy for result from GridComputeTask.result(..) method (will fail the whole task): GridJobResultImpl [job=o.g.g.kernal.processors.closure.GridClosureProcessor$10@6cb6decd, sib=GridJobSiblingImpl [sesId=f0e0f920741-57c84b71-1d89-4d8c-be19-d7cf36388595, jobId=41e0f920741-f2f6e9d0-2cf6-464e-bf9e-44b0043879c4, nodeId=f2f6e9d0-2cf6-464e-bf9e-44b0043879c4, isJobDone=false], jobCtx=GridJobContextImpl [jobId=41e0f920741-f2f6e9d0-2cf6-464e-bf9e-44b0043879c4, attrs={}], node=GridTcpDiscoveryNode [id=f2f6e9d0-2cf6-464e-bf9e-44b0043879c4, addrs=[127.0.0.1], sockAddrs=[/127.0.0.1:47500], discPort=47500, order=1, loc=false, ver=GridProductVersion [major=6, minor=1, maintenance=9, revTs=1403872573]], ex=class o.g.g.GridException: Failed to find class with given class loader for unmarshalling (make sure same version of all classes are available on all nodes or enable peer-class-loading): GridDeploymentClassLoader [id=ce96b920741-f2f6e9d0-2cf6-464e-bf9e-44b0043879c4, singleNode=false, nodeLdrMap={57c84b71-1d89-4d8c-be19-d7cf36388595=01e0f920741-57c84b71-1d89-4d8c-be19-d7cf36388595}, p2pTimeout=5000, usrVer=0, depMode=SHARED, quiet=false]
For more information see:
    Troubleshooting:      http://bit.ly/GridGain-Troubleshooting
    Documentation Center: http://bit.ly/GridGain-Documentation
, hasRes=true, isCancelled=false, isOccupied=true]
class org.gridgain.grid.GridException: Remote job threw user exception (override or implement GridComputeTask.result(..) method if you would like to have automatic failover for this exception).
    at org.gridgain.grid.compute.GridComputeTaskAdapter.result(GridComputeTaskAdapter.java:109)
    at org.gridgain.grid.kernal.processors.task.GridTaskWorker$3.apply(GridTaskWorker.java:819)
    at org.gridgain.grid.kernal.processors.task.GridTaskWorker$3.apply(GridTaskWorker.java:812)
    at org.gridgain.grid.util.GridUtils.wrapThreadLoader(GridUtils.java:5955)
    at org.gridgain.grid.kernal.processors.task.GridTaskWorker.result(GridTaskWorker.java:812)
    at org.gridgain.grid.kernal.processors.task.GridTaskWorker.onResponse(GridTaskWorker.java:708)
    at org.gridgain.grid.kernal.processors.task.GridTaskProcessor.processJobExecuteResponse(GridTaskProcessor.java:834)
    at org.gridgain.grid.kernal.processors.task.GridTaskProcessor$JobMessageListener.onMessage(GridTaskProcessor.java:1066)
    at org.gridgain.grid.kernal.managers.communication.GridIoManager.processRegularMessage0(GridIoManager.java:654)
    at org.gridgain.grid.kernal.managers.communication.GridIoManager.access$1800(GridIoManager.java:62)
    at org.gridgain.grid.kernal.managers.communication.GridIoManager$6.body(GridIoManager.java:615)
    at org.gridgain.grid.util.worker.GridWorker.run(GridWorker.java:151)
    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)
Caused by: class org.gridgain.grid.GridException: Failed to find class with given class loader for unmarshalling (make sure same version of all classes are available on all nodes or enable peer-class-loading): GridDeploymentClassLoader [id=ce96b920741-f2f6e9d0-2cf6-464e-bf9e-44b0043879c4, singleNode=false, nodeLdrMap={57c84b71-1d89-4d8c-be19-d7cf36388595=01e0f920741-57c84b71-1d89-4d8c-be19-d7cf36388595}, p2pTimeout=5000, usrVer=0, depMode=SHARED, quiet=false]
For more information see:
    Troubleshooting:      http://bit.ly/GridGain-Troubleshooting
    Documentation Center: http://bit.ly/GridGain-Documentation

    at org.gridgain.grid.marshaller.optimized.GridOptimizedMarshaller.unmarshal(GridOptimizedMarshaller.java:369)
    at org.gridgain.grid.kernal.processors.job.GridJobWorker.initialize(GridJobWorker.java:388)
    at org.gridgain.grid.kernal.processors.job.GridJobProcessor.processJobExecuteRequest(GridJobProcessor.java:1048)
    at org.gridgain.grid.kernal.processors.job.GridJobProcessor$JobExecutionListener.onMessage(GridJobProcessor.java:1685)
    ... 7 more
Caused by: java.lang.ClassNotFoundException: com.hendyirawan.gggettingstarted.simple.HelloWorld$$Lambda$1/1390913202
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:340)
    at org.gridgain.grid.marshaller.optimized.GridOptimizedMarshallerUtils.forName(GridOptimizedMarshallerUtils.java:105)
    at org.gridgain.grid.marshaller.optimized.GridOptimizedClassResolver.forName(GridOptimizedClassResolver.java:447)
    at org.gridgain.grid.marshaller.optimized.GridOptimizedClassResolver.readClass(GridOptimizedClassResolver.java:355)
    at org.gridgain.grid.marshaller.optimized.GridOptimizedObjectInputStream.readObjectOverride(GridOptimizedObjectInputStream.java:140)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:365)
    at org.gridgain.grid.marshaller.optimized.GridOptimizedObjectInputStream.readFields(GridOptimizedObjectInputStream.java:274)
    at org.gridgain.grid.marshaller.optimized.GridOptimizedObjectInputStream.readSerializable(GridOptimizedObjectInputStream.java:359)
    at org.gridgain.grid.marshaller.optimized.GridOptimizedClassDescriptor.read(GridOptimizedClassDescriptor.java:959)
    at org.gridgain.grid.marshaller.optimized.GridOptimizedObjectInputStream.readObjectOverride(GridOptimizedObjectInputStream.java:144)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:365)
    at org.gridgain.grid.marshaller.optimized.GridOptimizedMarshaller.unmarshal(GridOptimizedMarshaller.java:363)
    ... 10 more
[13:54:44] GridGain node stopped OK [uptime=00:00:00:312]
Exception in thread "main" class org.gridgain.grid.GridException: Remote job threw user exception (override or implement GridComputeTask.result(..) method if you would like to have automatic failover for this exception).
    at org.gridgain.grid.compute.GridComputeTaskAdapter.result(GridComputeTaskAdapter.java:109)
    at org.gridgain.grid.kernal.processors.task.GridTaskWorker$3.apply(GridTaskWorker.java:819)
    at org.gridgain.grid.kernal.processors.task.GridTaskWorker$3.apply(GridTaskWorker.java:812)
    at org.gridgain.grid.util.GridUtils.wrapThreadLoader(GridUtils.java:5955)
    at org.gridgain.grid.kernal.processors.task.GridTaskWorker.result(GridTaskWorker.java:812)
    at org.gridgain.grid.kernal.processors.task.GridTaskWorker.onResponse(GridTaskWorker.java:708)
    at org.gridgain.grid.kernal.processors.task.GridTaskProcessor.processJobExecuteResponse(GridTaskProcessor.java:834)
    at org.gridgain.grid.kernal.processors.task.GridTaskProcessor$JobMessageListener.onMessage(GridTaskProcessor.java:1066)
    at org.gridgain.grid.kernal.managers.communication.GridIoManager.processRegularMessage0(GridIoManager.java:654)
    at org.gridgain.grid.kernal.managers.communication.GridIoManager.access$1800(GridIoManager.java:62)
    at org.gridgain.grid.kernal.managers.communication.GridIoManager$6.body(GridIoManager.java:615)
    at org.gridgain.grid.util.worker.GridWorker.run(GridWorker.java:151)
    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)
Caused by: class org.gridgain.grid.GridException: Failed to find class with given class loader for unmarshalling (make sure same version of all classes are available on all nodes or enable peer-class-loading): GridDeploymentClassLoader [id=ce96b920741-f2f6e9d0-2cf6-464e-bf9e-44b0043879c4, singleNode=false, nodeLdrMap={57c84b71-1d89-4d8c-be19-d7cf36388595=01e0f920741-57c84b71-1d89-4d8c-be19-d7cf36388595}, p2pTimeout=5000, usrVer=0, depMode=SHARED, quiet=false]
For more information see:
    Troubleshooting:      http://bit.ly/GridGain-Troubleshooting
    Documentation Center: http://bit.ly/GridGain-Documentation

    at org.gridgain.grid.marshaller.optimized.GridOptimizedMarshaller.unmarshal(GridOptimizedMarshaller.java:369)
    at org.gridgain.grid.kernal.processors.job.GridJobWorker.initialize(GridJobWorker.java:388)
    at org.gridgain.grid.kernal.processors.job.GridJobProcessor.processJobExecuteRequest(GridJobProcessor.java:1048)
    at org.gridgain.grid.kernal.processors.job.GridJobProcessor$JobExecutionListener.onMessage(GridJobProcessor.java:1685)
    ... 7 more
Caused by: java.lang.ClassNotFoundException: com.hendyirawan.gggettingstarted.simple.HelloWorld$$Lambda$1/1390913202
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:340)
    at org.gridgain.grid.marshaller.optimized.GridOptimizedMarshallerUtils.forName(GridOptimizedMarshallerUtils.java:105)
    at org.gridgain.grid.marshaller.optimized.GridOptimizedClassResolver.forName(GridOptimizedClassResolver.java:447)
    at org.gridgain.grid.marshaller.optimized.GridOptimizedClassResolver.readClass(GridOptimizedClassResolver.java:355)
    at org.gridgain.grid.marshaller.optimized.GridOptimizedObjectInputStream.readObjectOverride(GridOptimizedObjectInputStream.java:140)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:365)
    at org.gridgain.grid.marshaller.optimized.GridOptimizedObjectInputStream.readFields(GridOptimizedObjectInputStream.java:274)
    at org.gridgain.grid.marshaller.optimized.GridOptimizedObjectInputStream.readSerializable(GridOptimizedObjectInputStream.java:359)
    at org.gridgain.grid.marshaller.optimized.GridOptimizedClassDescriptor.read(GridOptimizedClassDescriptor.java:959)
    at org.gridgain.grid.marshaller.optimized.GridOptimizedObjectInputStream.readObjectOverride(GridOptimizedObjectInputStream.java:144)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:365)
    at org.gridgain.grid.marshaller.optimized.GridOptimizedMarshaller.unmarshal(GridOptimizedMarshaller.java:363)
    ... 10 more
@ceefour
Copy link
Author

ceefour commented Jul 5, 2014

The error happens for remote nodes. The local node can execute the closure.

@dsetrakyan
Copy link

Please take a look at Java8 examples under "examples/java8". Here is a sample code from there:

grid.compute().run((GridRunnable)() -> System.out.println("Hello World")).get()

@ceefour ceefour changed the title Java 8 lambda throws GridException: Failed to find class with given class loader for unmarshalling (make sure same version of all classes are available on all nodes or enable peer-class-loading): GridDeploymentClassLoader GridCompute.broadcast() with Java 8 lambda throws GridException: Failed to find class with given class loader for unmarshalling (make sure same version of all classes are available on all nodes or enable peer-class-loading): GridDeploymentClassLoader Jul 5, 2014
@ceefour ceefour changed the title GridCompute.broadcast() with Java 8 lambda throws GridException: Failed to find class with given class loader for unmarshalling (make sure same version of all classes are available on all nodes or enable peer-class-loading): GridDeploymentClassLoader GridCompute.run()/broadcast() with Java 8 lambda throws GridException: Failed to find class with given class loader for unmarshalling (make sure same version of all classes are available on all nodes or enable peer-class-loading): GridDeploymentClassLoader Jul 5, 2014
@ceefour
Copy link
Author

ceefour commented Jul 5, 2014

Thanks, this works:

grid.forRemotes().compute().run((GridRunnable) () -> System.out.println("Hello") ).get();

Is there any reason why (GridRunnable) cast is mandatory?

The strange thing is new Runnable() { ... } works, while plain lambda doesn't, even if the lambda returns a Runnable.

@ceefour
Copy link
Author

ceefour commented Jul 5, 2014

IMHO if GridGain doesn't handle a specific Runnable implementation like given by Java8 lambda, the error message needs to mention this fact and provide assistance error message: "Please cast your job to GridRunnable"

@dsetrakyan
Copy link

Agree on the message, will fix.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants