Found by running the program, not by reading it — the operator set Extractors 32 and observed that datanodes was far slower than fuckingfast on the same batch, and suspected the "common" settings were not really common. They were right.
What the code does
moon_extract.py:878:
DN_LANES = max(1, min(int(os.environ.get("MOON_DN_LANES", "3") or 3), 8))
Datanodes extraction runs through _lane_queue, which holds exactly DN_LANES permits. The docstring at moon_extract.py:1229 is explicit: "Blocks (awaits, does not spin) once DN_LANES pages are already open — excess workers queue here instead of piling more tabs."
So datanodes extraction is capped at 8 concurrent pages, and only 3 unless raised. Setting Extractors to 32 gives datanodes no additional concurrency at all: the other 24+ workers simply block on the lane queue.
For fuckingfast — pure HTTP, no lanes — all 32 workers really do run.
Why this is a bug and not just documentation
The GUI panel is titled "COMMON · BOTH METHODS" and Extractors is the first slider in it, with "rec. 16" next to it. That tells the operator the value applies to both providers. It does not. The provider-specific control for datanodes is Pages (dn_pages), which lives in a different panel.
The measured consequence, same 82-link batch: fuckingfast finished in 4m02s, datanodes took 6m09s for 72 links (10 were genuinely dead). The operator reasonably concluded something was structurally wrong with the settings.
What needs deciding
Either:
- Move Extractors out of the COMMON panel, or annotate it — something like "datanodes is limited to
Pages lanes regardless of this value", or
- Clamp what the slider offers when it cannot be honoured, so the number shown is the number that runs, or
- Let
dn_pages follow Extractors where the 8-lane ceiling allows it, so one control means one thing
Option 1 is the smallest and the least likely to break anything. Whoever takes this should say which they picked and why.
Related to #45, which is the same class of problem on the CLI side: a control whose name promises something it does not do.
Files
web/index.html — the panel markup and its heading
web/app.js — the slider wiring
moon_extract.py:878 — where the ceiling is set
Found by running the program, not by reading it — the operator set Extractors 32 and observed that datanodes was far slower than fuckingfast on the same batch, and suspected the "common" settings were not really common. They were right.
What the code does
moon_extract.py:878:Datanodes extraction runs through
_lane_queue, which holds exactlyDN_LANESpermits. The docstring atmoon_extract.py:1229is explicit: "Blocks (awaits, does not spin) once DN_LANES pages are already open — excess workers queue here instead of piling more tabs."So datanodes extraction is capped at 8 concurrent pages, and only 3 unless raised. Setting Extractors to 32 gives datanodes no additional concurrency at all: the other 24+ workers simply block on the lane queue.
For fuckingfast — pure HTTP, no lanes — all 32 workers really do run.
Why this is a bug and not just documentation
The GUI panel is titled "COMMON · BOTH METHODS" and Extractors is the first slider in it, with "rec. 16" next to it. That tells the operator the value applies to both providers. It does not. The provider-specific control for datanodes is
Pages(dn_pages), which lives in a different panel.The measured consequence, same 82-link batch: fuckingfast finished in 4m02s, datanodes took 6m09s for 72 links (10 were genuinely dead). The operator reasonably concluded something was structurally wrong with the settings.
What needs deciding
Either:
Pageslanes regardless of this value", ordn_pagesfollow Extractors where the 8-lane ceiling allows it, so one control means one thingOption 1 is the smallest and the least likely to break anything. Whoever takes this should say which they picked and why.
Related to #45, which is the same class of problem on the CLI side: a control whose name promises something it does not do.
Files
web/index.html— the panel markup and its headingweb/app.js— the slider wiringmoon_extract.py:878— where the ceiling is set