xai-org/x-algorithm · error · ValueError

Retry interval must be greater than 0

Error message

Retry interval must be greater than 0

What it means

retry_interval is the sleep between failed kinit attempt batches. __init__ requires it to be positive; <= 0 would cause a tight retry loop hammering the KDC. The check runs after keytab existence and interval/attempts checks in the same validation block.

Source

Thrown at grox/libs/kerberos_cli/kerberos.py:32

    renew_interval: int = 3600
    attempts: int = 5
    retry_interval: int = 60


class KerberosRenewer:
    def __init__(self, keytab_path: str, principal: str, **kwargs):
        self._renewer: asyncio.Task | None = None
        self.config = KerberosConfig(
            keytab_path=keytab_path, principal=principal, **kwargs
        )
        if not Path(self.config.keytab_path).exists():
            raise FileNotFoundError(f"Keytab file not found: {self.config.keytab_path}")
        if self.config.renew_interval <= 0:
            raise ValueError("Renew interval must be greater than 0")
        if self.config.attempts <= 0:
            raise ValueError("Attempts must be greater than 0")
        if self.config.retry_interval <= 0:
            raise ValueError("Retry interval must be greater than 0")

    async def _kerberos_renewal_loop(self):
        while True:
            attempts = self.config.attempts
            while attempts > 0:
                attempts -= 1
                try:
                    await self._renew_kerberos_ticket()
                    logger.info(
                        f"Kerberos ticket renewed successfully for {self.config.principal}"
                    )
                    break
                except Exception:
                    if attempts == 0:
                        logger.error(
                            f"Kerberos renewal failed after {self.config.attempts} attempts: {traceback.format_exc()}"
                        )
                    else:

View on GitHub (pinned to 24c60942c5)

Solutions

  1. Set retry_interval to a positive value (e.g. 30–60 seconds).
  2. Audit shared KerberosConfig defaults so all three numeric fields have positive fallbacks.

Example fix

# before
client = KerberosClient(kt, principal, retry_interval=0)  # ValueError

# after
client = KerberosClient(kt, principal, retry_interval=30)
Defensive patterns

Strategy: validation

Validate before calling

retry_interval = retry_interval if retry_interval and retry_interval > 0 else 30
client = KerberosClient(kt, principal, retry_interval=retry_interval)

Try / catch

try:
    client = KerberosClient(kt, p, retry_interval=ri)
except ValueError as e:
    if 'Retry interval' in str(e):
        client = KerberosClient(kt, p, retry_interval=30)
    else:
        raise

Prevention

When it happens

Trigger: KerberosClient(..., retry_interval=0) or negative — commonly a missing config key defaulting to 0, or seconds/milliseconds confusion.

Common situations: Defaults object where retry_interval was added later and old configs lack it; someone setting 0 intending 'retry immediately' which this library forbids.

Understand the failure class

Background: "Invalid value" and "allowed values are" config errors: what your library rejected and how to fix it — this error's family across 41 libraries.

Related errors


AI-assisted analysis of xai-org/x-algorithm@24c60942c5 (2026-08-28). Data as JSON: /api/errors/6dd4ae07e29fb10f. Report an issue: GitHub.