
| Key: |
HUDSON-5048
|
| Type: |
Task
|
| Status: |
Resolved
|
| Resolution: |
Fixed
|
| Priority: |
Major
|
| Assignee: |
Unassigned
|
| Reporter: |
kohsuke
|
| Votes: |
1
|
| Watchers: |
2
|
|
If you were logged in you would be able to see more operations.
|
|
|
|
Issue Links:
|
Dependency
|
|
|
|
This issue is blocking:
|
|
HUDSON-4993
Analysis plug-ins don't work with master slave configurations
|
|
|
|
|
|
HUDSON-5103 Failed to archive test reports -- exception attempting to use SAX since 1.337
|
|
|
|
|
|
|
I'm using this issue to keep track of the MultiClassLoaderSerializer support that was partially implemented then disabled in HUDSON-4293.
|
|
Description
|
I'm using this issue to keep track of the MultiClassLoaderSerializer support that was partially implemented then disabled in HUDSON-4293. |
Show » |
Sort Order:
|
To recap, the idea in this code is to record classloader for each class that gets serialized during remoting, so that when deserialized on the remote node, we can correctly recreate multiple classloaders that are involved in the object graph. This code was introduced in rev.21002 and disabled back in rev.21356 after
HUDSON-4293was reported.I temporarily resurrected this support to see if this solves
HUDSON-4993, and instead I discovered a problem.That is, the code successfully recover the relationship between instances and classes, and classes and their classloaders, but the resulting RemoteClassLoaders do not and cannot recreate relationship among them. Fixing up parent/child relationship won't be enough, as we have custom ClassLoader implementations like DependencyClassLoader. So this ends up loading duplicates of the same class in different classloader in the following scenario:
ClassLoader X owns: class A { A data; } ClassLoader Y, which delegates to X, owns: class B extends A {} instance to be serialized: A(B)... because when the definition of B deserializes, its base class A is loaded by the RemoteClassLoader for Y, and not by the RemoteClassLoader for X.