Skip to content

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

Merged
mridulpathak merged 1 commit into
apache:release24.09from
mridulpathak:OFBIZ-13772-release24.09
Oct 30, 2026
Merged

mridulpathak merged 1 commit into
apache:release24.09from
mridulpathak:OFBIZ-13772-release24.09

Conversation

@mridulpathak

Copy link
Copy Markdown
Contributor

Backported from trunk (#2500).

…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.
@mridulpathak
mridulpathak merged commit d7af34f into apache:release24.09 Oct 30, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant