jenkinsci / jenkinsci/plot-plugin

[JENKINS-52249] Parallel build led to AIOOBE in Plot.savePlotData

Open
#289 4 comments 0 reactions 0 assignees View on GitHub
component:plot-plugin imported-jira-issue priority:major resolution:unresolved
Dominant language
Java
Stars
62
Forks
93
Avg merge
1d 17h
Merged PRs (30d)
1

Description

2 parallel builds (scripted pipeline) executed the "same" plot step at very, very much the same time (as far as I can tell it was seemingly definitely at least the same second, but of course it must have been really the very, very same time) leading to one of the two builds failing with:

```
java.lang.ArrayIndexOutOfBoundsException: 2
at hudson.plugins.plot.Plot.savePlotData(Plot.java:967)
at hudson.plugins.plot.Plot.addBuild(Plot.java:717)
at hudson.plugins.plot.PlotBuilder.perform(PlotBuilder.java:223)
at org.jenkinsci.plugins.workflow.steps.CoreStep$Execution.run(CoreStep.java:80)
at org.jenkinsci.plugins.workflow.steps.CoreStep$Execution.run(CoreStep.java:67)
at org.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution$1$1.call(SynchronousNonBlockingStepExecution.java:50)
at hudson.security.ACL.impersonate(ACL.java:290)
at org.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution$1.run(SynchronousNonBlockingStepExecution.java:47)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)

```


  • ... whereas the other one was successful


  • Presumably the plot CSV file in the pipeline job folder was corrupted by that, because the next build (not in parallel anymore) failed with the same symptom.

  • But must have kind of fixed the corrupt plot CSV file in the pipeline job folder. But in a rather forceful way...

  • Because subsequent builds (also not in parallel anymore) then succeeded.

Sad side effects:



  • Please note:

    • there are in fact 4 consecutive plot step calls

    • seemingly the 3rd one collided



  • The "interesting"/sad result is:

    • in the plot CSV files of the plot step calls #1 and #2 "only" the values/entries/lines of the successful build are missing

    • in the plot CSV file of the colliding plot step call #3 there is a huge gap of values/entries/lines: in fact the bulk of the history is lost and the remaining file has less than 10% of the size it had before

    • in the plot CSV file of the plot step call #4 (which was skipped due to the failures) the values/entries/lines of the two failing builds are missing; which makes of course sense



---
Originally reported by reinholdfuereder, imported from: Parallel build led to AIOOBE in Plot.savePlotData


  • assignee: vgaidarji
  • status: Open
  • priority: Major
  • component(s): plot-plugin
  • resolution: Unresolved
  • votes: 0
  • watchers: 2
  • imported: 20260512-210953

Raw content of original issue

2 parallel builds (scripted pipeline) executed the "same" plot step at very, very much the same time (as far as I can tell it was seemingly definitely at least the same second, but of course it must have been really the very, very same time) leading to one of the two builds failing with:



java.lang.ArrayIndexOutOfBoundsException: 2

at hudson.plugins.plot.Plot.savePlotData(Plot.java:967)
at hudson.plugins.plot.Plot.addBuild(Plot.java:717)
at hudson.plugins.plot.PlotBuilder.perform(PlotBuilder.java:223)
at org.jenkinsci.plugins.workflow.steps.CoreStep$Execution.run(CoreStep.java:80)
at org.jenkinsci.plugins.workflow.steps.CoreStep$Execution.run(CoreStep.java:67)
at org.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution$1$1.call(SynchronousNonBlockingStepExecution.java:50)
at hudson.security.ACL.impersonate(ACL.java:290)
at org.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution$1.run(SynchronousNonBlockingStepExecution.java:47)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)



  • ... whereas the other one was successful


  • Presumably the plot CSV file in the pipeline job folder was corrupted by that, because the next build (not in parallel anymore) failed with the same symptom.

  • But must have kind of fixed the corrupt plot CSV file in the pipeline job folder. But in a rather forceful way...

  • Because subsequent builds (also not in parallel anymore) then succeeded.

Sad side effects:



  • Please note:

    • there are in fact 4 consecutive plot step calls

    • seemingly the 3rd one collided



  • The "interesting"/sad result is:

    • in the plot CSV files of the plot step calls #1 and #2 "only" the values/entries/lines of the successful build are missing

    • in the plot CSV file of the colliding plot step call #3 there is a huge gap of values/entries/lines: in fact the bulk of the history is lost and the remaining file has less than 10% of the size it had before

    • in the plot CSV file of the plot step call #4 (which was skipped due to the failures) the values/entries/lines of the two failing builds are missing; which makes of course sense




environment

```
The latest and greatest:

* Jenkins (core) 2.129

* Plot Plugin 2.1.0
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.