phacility/phabricator · warning · PhutilArgumentUsageException

Specify which resources you want to release. See "--help" fo

Error message

Specify which resources you want to release. See "--help" for guidance.

What it means

Thrown by the `drydock release-resource` management workflow when the command is given neither `--id <n>` argument(s) nor `--all`. Like its lease counterpart it is a PhutilArgumentUsageException: the workflow prints usage guidance and aborts before issuing any query or mutation, because releasing resources (and implicitly their leases) is destructive and requires an explicit scope.

Source

Thrown at src/applications/drydock/management/DrydockManagementReleaseResourceWorkflow.php:29

        array(
          array(
            'name' => 'id',
            'param' => 'id',
            'repeat' => true,
            'help' => pht('Resource ID to release.'),
          ),
          array(
            'name' => 'all',
            'help' => pht('Release all resources. Dangerous!'),
          ),
        ));
  }

  public function execute(PhutilArgumentParser $args) {
    $is_all = $args->getArg('all');
    $ids = $args->getArg('id');
    if (!$ids && !$is_all) {
      throw new PhutilArgumentUsageException(
        pht(
          'Specify which resources you want to release. See "--help" for '.
          'guidance.'));
    }

    $viewer = $this->getViewer();
    $statuses = $this->getReleaseableResourceStatuses();

    $query = id(new DrydockResourceQuery())
      ->setViewer($viewer)
      ->withStatuses(mpull($statuses, 'getKey'));

    if ($ids) {
      $query->withIDs($ids);
    }

    $resources = $query->execute();

View on GitHub (pinned to 5720a38cfe)

Solutions

  1. Re-run with explicit resource IDs: `./bin/drydock release-resource --id 7`
  2. To release every releaseable resource: `./bin/drydock release-resource --all` (understand it cascades to leases on those resources)
  3. Check `./bin/drydock release-resource --help` for flag spelling and repeatability
  4. Make automation assert a non-empty ID list before shelling out

Example fix

// before
$ ./bin/drydock release-resource
Usage Exception: Specify which resources you want to release. See "--help" for guidance.

// after
$ ./bin/drydock release-resource --id 7 --id 8
Defensive patterns

Strategy: validation

Validate before calling

// Before invoking the workflow:
$ids = $args->getArg('id');
$is_all = $args->getArg('all');
if (!$ids && !$is_all) {
  throw new PhutilArgumentUsageException(pht(
    'Pass --id <n> (repeatable) or --all.'));
}

Try / catch

catch (PhutilArgumentUsageException $ex) { print usage guidance; correct the invocation to include --id or --all and re-run }

Prevention

When it happens

Trigger: Running `./bin/drydock release-resource` with an empty argument list; passing only non-scoping flags; a wrapper script that forwards an unpopulated ID array.

Common situations: Operators draining Drydock hosts after decommissioning Almanac services or working-copy blueprints; cron/automation that forgets to pass IDs; confusion with a different workflow that defaults to acting on all objects.

Related errors


AI-assisted analysis of phacility/phabricator@5720a38cfe (2026-08-21). Data as JSON: /api/errors/3dabbf9e154ff532. Report an issue: GitHub.