Skip to content

v0.1.9.2 - SmartCraft global submission cap

Choose a tag to compare

@HOMEFTW HOMEFTW released this 30 Apr 11:52
· 6 commits to master since this release

v0.1.9.2 — SmartCraft global submission cap (G13)

Throttles SmartCraft's parallel task dispatch so Programmable Hatches'
Auto CPU multiblock (TileCPU) can no longer be pushed into infinite
CraftingCPUCluster creation. Default cap = 50; set via
maxConcurrentSmartCraftSubmissions in
config/AE2-IntelligentScheduling.cfg (range 0-1024, 0 disables).

Why this exists

TileCPU.onPostTick mints a fresh CraftingCPUCluster every server
tick whenever every existing cluster is busy. SmartCraft's analyser
splits a single big order into hundreds of parallel tasks; each task
acquires a cluster and the Auto CPU just keeps allocating new ones
until the server tick is dominated by GC.

What the cap does

  • Counts SmartCraft tasks currently holding an AE2 craftingLink
    (i.e. occupying a cluster) across all orders and all players.
  • When the count would exceed the cap, excess tasks keep their
    cached AE2 plan
    but stay in WAITING_CPU with a
    Throttled: SmartCraft global submission cap reached (N) banner.
  • As soon as another task's link finishes, a slot frees up and a
    throttled task picks it up next tick — no plan recomputation cost.

What the cap does not affect

  • Player-initiated crafts. Manual crafts via the AE2 Crafting
    Confirm screen go through ContainerCraftConfirm → submitJob and
    never touch SmartCraftRuntimeCoordinator. The cap is structurally
    invisible to those.
  • Failed submits. When AE2's submitJob returns null (no link
    granted), the budget is not consumed — the existing
    SUBMIT_RETRY_MAX_ATTEMPTS backoff loop continues to work normally.

Stats logging

The periodic SmartCraft stats: line now includes
submissionsThrottledByCap=N activeSubmissions=X/cap=Y so admins can
spot whether the cap is the dominant throttle on a given server.

Tests

33 passing (added 2 cap-specific tests):

  • global_submission_cap_throttles_excess_tasks_v0192 — 4 tasks + 4
    idle CPUs + cap=2 → exactly 2 reach RUNNING, 2 carry the throttle
    banner, globalActiveSubmissions() == 2.
  • global_submission_cap_zero_disables_throttling_v0192 — cap=0
    sentinel lets every task reach RUNNING (verifies the disabled
    semantics).

Artefacts

Jar Purpose
ae2intelligentscheduling-0.1.9.2.jar Player drop-in (notch obfuscation)
ae2intelligentscheduling-0.1.9.2-dev.jar SRG mappings, for development
ae2intelligentscheduling-0.1.9.2-sources.jar Source jar

Drop the first one into your mods/ folder. Requires Minecraft 1.7.10
with GTNH 2.8.4 manifest dependencies (AE2 / Forge).