Skip to content

Fixed: Artifact Info graph loses or corrupts references when artifacts are loaded in parallel (OFBIZ-13772) - #2500

Merged
mridulpathak merged 1 commit into
apache:trunkfrom
mridulpathak:OFBIZ-13772
Oct 30, 2026
Merged

mridulpathak merged 1 commit into
apache:trunkfrom
mridulpathak:OFBIZ-13772

Conversation

@mridulpathak

Copy link
Copy Markdown
Contributor

ArtifactInfoFactory loads services and components on the fork-join pool, but each get*ArtifactInfo method did a get, built a new info and then a put, so two tasks could build the same artifact and the later one replaced the earlier. The reverse references were added with UtilMisc.addToSortedSetInMap, which does the same check-then-act and then adds to a plain TreeSet from many tasks at once, so a set could be replaced, losing the references already in it, or corrupted.

Each info is now registered with putIfAbsent and only the registered one is populated. The reverse-reference sets are created with computeIfAbsent and, like each info's own reference sets, are ConcurrentSkipListSets, so the Artifact Info screens can also iterate them while another request loads artifacts.

…parallel

ArtifactInfoFactory loads services and components on the fork-join pool, but each get*ArtifactInfo method did a get, built a new info and then a put, so two tasks could build the same artifact and the later one replaced the earlier. The reverse references were added with UtilMisc.addToSortedSetInMap, which does the same check-then-act and then adds to a plain TreeSet from many tasks at once, so a set could be replaced, losing the references already in it, or corrupted.

Each info is now registered with putIfAbsent and only the registered one is populated. The reverse-reference sets are created with computeIfAbsent and, like each info's own reference sets, are ConcurrentSkipListSets, so the Artifact Info screens can also iterate them while another request loads artifacts.
@github-actions github-actions Bot added the bug label Oct 30, 2026
@mridulpathak
mridulpathak merged commit 8a1d99d into apache:trunk Oct 30, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant