hashicorp/nomad · error

error parsing DecompressionLimitSize: %w

Error message

error parsing DecompressionLimitSize: %w

What it means

ArtifactConfigFromAgent parses DecompressionSizeLimit with humanize.ParseBytes into a byte count limiting artifact decompression size. Note the message string says 'DecompressionLimitSize' (field order swapped) even though the config key is DecompressionSizeLimit. An invalid size string produces this wrapped error and aborts config construction.

Source

Thrown at client/config/artifact.go:70

	gitTimeout, err := time.ParseDuration(*c.GitTimeout)
	if err != nil {
		return nil, fmt.Errorf("error parsing GitTimeout: %w", err)
	}

	hgTimeout, err := time.ParseDuration(*c.HgTimeout)
	if err != nil {
		return nil, fmt.Errorf("error parsing HgTimeout: %w", err)
	}

	s3Timeout, err := time.ParseDuration(*c.S3Timeout)
	if err != nil {
		return nil, fmt.Errorf("error parsing S3Timeout: %w", err)
	}

	decompressionSizeLimit, err := humanize.ParseBytes(*c.DecompressionSizeLimit)
	if err != nil {
		return nil, fmt.Errorf("error parsing DecompressionLimitSize: %w", err)
	}

	return &ArtifactConfig{
		HTTPReadTimeout:               httpReadTimeout,
		HTTPMaxBytes:                  int64(httpMaxSize),
		GCSTimeout:                    gcsTimeout,
		GitTimeout:                    gitTimeout,
		HgTimeout:                     hgTimeout,
		S3Timeout:                     s3Timeout,
		DecompressionLimitFileCount:   *c.DecompressionFileCountLimit,
		DecompressionLimitSize:        int64(decompressionSizeLimit),
		DisableArtifactInspection:     *c.DisableArtifactInspection,
		DisableFilesystemIsolation:    *c.DisableFilesystemIsolation,
		FilesystemIsolationExtraPaths: slices.Clone(c.FilesystemIsolationExtraPaths),
		SetEnvironmentVariables:       *c.SetEnvironmentVariables,
	}, nil

}

View on GitHub (pinned to 482b49bf1a)

Solutions

  1. Set decompression_size_limit to a valid humanize byte string, e.g. "1GB", "512MiB", with no space between number and unit
  2. Confirm the rendered agent config contains a non-empty, well-formed value
  3. Pre-validate with humanize.ParseBytes before calling ArtifactConfigFromAgent for earlier, clearer errors

Example fix

// before
decompression_size_limit = "1 GB"
// after
decompression_size_limit = "1GB"
Defensive patterns

Strategy: validation

Validate before calling

if _, err := humanize.ParseBytes(*c.DecompressionSizeLimit); err != nil {
    return fmt.Errorf("invalid decompression_size_limit %q: %w", *c.DecompressionSizeLimit, err)
}

Type guard

func validByteSize(s *string) bool { if s == nil { return false }; _, err := humanize.ParseBytes(*s); return err == nil }

Try / catch

cfg, err := config.ArtifactConfigFromAgent(agentCfg)
if err != nil {
    if strings.Contains(err.Error(), "DecompressionLimitSize") {
        return fmt.Errorf("decompression_size_limit must be a byte size like 1GB: %w", err)
    }
    return err
}

Prevention

When it happens

Trigger: Calling ArtifactConfigFromAgent when DecompressionSizeLimit is not a valid humanize byte expression: "1 GB" with a space, "100kilobytes", empty string, or unknown unit suffixes.

Common situations: decompression_size_limit in the Nomad client artifact block typoed or unit-less in a way humanize rejects; automation emitting empty values; confusion between the config key name and the error text leading developers to search for the wrong field.

Related errors


AI-assisted analysis of hashicorp/nomad@482b49bf1a (2026-09-04). Data as JSON: /api/errors/816aa5247af0473c. Report an issue: GitHub.