Skip to content

fix: move image_assembler and precompute_slide to the image-tools images - #27

Merged
sameeul merged 1 commit into
PolusAI:mainfrom
vjaganat90:fix/bbbc-race-free-images
Oct 13, 2026
Merged

sameeul merged 1 commit into
PolusAI:mainfrom
vjaganat90:fix/bbbc-race-free-images

Conversation

@vjaganat90

Copy link
Copy Markdown
Member

Fixes #26.

What

  • image_assembler.cwl: polusai/image-assembler-plugin:1.4.0-dev0 → polusai/image-assembler-tool:1.4.3. The new image uses the stdlib process pool and no preadator. Its options and output are unchanged.
  • precompute_slide.cwl: polusai/precompute-slide-plugin:1.7.0-dev0 → polusai/precompute-slide-tool:1.7.3-dev0. Its imageType values are now Intensity/Segmentation, so bbbc.wic and bbbc.py pass Intensity, and the input's label says so.
  • The doc and manifest links point at NovagenResearch/image-tools, where both tools live now.

Why
Both old images install preadator 0.3.0.dev1, whose worker start-up races on a zero-timeout queue read and breaks the process pool intermittently (Nicholas-Schaub/preadator#12). Under load that failed 10/30 assembler and 12/30 precompute runs.

Choices a reviewer should know

  • 1.7.3-dev0, not the 1.7.2 release. 1.7.2 fails every time on the deflate-compressed TIFF that image-assembler-tool 1.4.3 writes (ADOBE_DEFLATE needs imagecodecs). 1.7.3-dev0 reads it.
  • Not a complete fix for precompute. 1.7.3-dev0 ships preadator 0.4.0.dev2, which has the same zero-timeout read in a nested ProcessManager, so it can still fail, at a much lower rate. That ends when preadator releases a fix and precompute-slide-tool is rebuilt on it.

Measured (CI cannot show a failure rate)

Each tool on the BBBC001 intermediates, 3 runs in parallel:

Image Failed
image-assembler-tool:1.4.3 0/150 (old image: 10/30)
precompute-slide-tool:1.7.3-dev0 2/90 (old image: 12/30)

The whole workflow through Sophios with cwltool, 6 runs each, 3 at a time:

  • bbbc.wic: 6/6.
  • bbbc.py: 5/6. The one failure was the remaining precompute race.
  • Every passing run wrote the same 32 output files as a control run on the old images.

…age-tools images

The image-assembler-plugin 1.4.0-dev0 and precompute-slide-plugin
1.7.0-dev0 images pin preadator 0.3.0.dev1. Its worker initializer reads
each worker's name with a zero-timeout get on a shared queue, so a worker
that loses the queue's lock to a sibling gets queue.Empty and the process
pool breaks. Under load this failed 10/30 assembler and 12/30 precompute
runs on the BBBC001 data.

image-assembler-tool 1.4.3 uses the stdlib ProcessPoolExecutor and no
preadator: 0/150 under the same load. precompute-slide-tool 1.7.3-dev0
uses preadator 0.4.0.dev2, which still has the zero-timeout get in a
nested ProcessManager, so it fails far less often (2/90) but not never.
1.7.2 cannot be used: it fails on the deflate-compressed TIFF the new
assembler writes (ADOBE_DEFLATE needs imagecodecs).

The new precompute-slide's imageType values are Intensity and
Segmentation instead of image and segmentation, so the bbbc workflows
pass Intensity. The doc and manifest links point at the image-tools
repository the tools moved to.
@sameeul
sameeul merged commit f733d0d into PolusAI:main Oct 13, 2026
1 check failed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

bbbc workflows fail intermittently: image_assembler and precompute_slide images break their process pool (preadator race)

2 participants