RTC : checkout failure: Unable to serialize com.ibm.team.build.internal.hjplugin.RTCLoadTask@2fc19f4a
below code is failing with error :
RTC : checkout failure: Unable to serialize com.ibm.team.build.internal.hjplugin.RTCLoadTask@2fc19f4a
java.io.IOException: Unable to serialize com.ibm.team.build.internal.hjplugin.RTCLoadTask@2fc19f4a
(check the joined file for the complete error)
@Extension
public class LRService extends RtcExtensionProvider{
private Run<?, ?> currentBuild = null;
@Override
public String getPathToLoadRuleFile(String workspaceUUID, String workspaceName, String buildResultUUID,
Map<String, String> componentInfo, String repoURL, String userId, String password, PrintStream logger)
throws IOException {
Map<String, String> envVarsMap = currentBuild.getEnvVars();
String ServiceUrl = repoURL+........+getExcludeFilterValueFromCurrentBuiltObject; // get the string parameter value from Jenkins UI
}
@Override
public boolean isApplicable(Run<?, ?> build) {
this.currentBuild = build;
return true;
}
}
I got to know the above code is not thread safe.As for storing any instance variables, only one extension object exists, multiple threads could end up overwriting the instance variable values.
But my Question is how to handle this with above code. I want t access build objects values inside getPathToLoadRuleFile{} extension method
One answer
Like it is being discussed in
478059: RTC bug : Two separated Jenkins pipeline jobs use same directory to generate loadrule files., if your dynamic load rules implementation requires additional information, which can't be stored in a ThreadLocal variable, then it might have to be passed from the TeamConcert plugin. I am not sure if instances of Run can be passed as is from Master to Slave, though. Need to check if it implements java.io.Serializable.