influxdata/influxdb · warning · CatalogError

plugin trigger is already disabled

Error message

plugin trigger is already disabled

What it means

CatalogError::TriggerAlreadyDisabled is thrown when disabling a plugin trigger that is already in the disabled state. The catalog validates the trigger's status during the disable operation and rejects the redundant state transition.

Solutions

  1. Check the trigger's current status before disabling and skip if already disabled.
  2. Treat this error as success in idempotent teardown: catch it and continue when the intent was 'ensure disabled'.
  3. Enable the trigger first if you intended to toggle rather than just disable.

Example fix

// before
for (const t of triggers) await client.post(`/api/v3/configure/triggers/${t}/disable`); // errors on second run
// after
for (const t of triggers) {
  const s = (await client.get(`/api/v3/configure/triggers/${t}`)).status;
  if (s === "enabled") await client.post(`/api/v3/configure/triggers/${t}/disable`);
}
Defensive patterns

Strategy: try-catch

Validate before calling

const trig = await client.get(`/api/v3/configure/triggers/${name}`);
if (trig.status === "disabled") return; // already disabled

Try / catch

try {
  await disableTrigger(name);
} catch (e) {
  if (e.message.includes("already disabled")) return; // treat as success
  throw e;
}

Prevention

When it happens

Trigger: POSTing to the trigger disable API for a trigger whose status is already 'disabled', or calling catalog disable_trigger twice without an intervening enable.

Common situations: Cleanup/teardown scripts that disable all triggers on shutdown and are run more than once; concurrent API clients issuing the same disable; retries after ambiguous network failures.

Understand the failure class

Background: "Invalid state transition" errors: "status must be X, actually Y", "already rejected/charging/uninstalled", "cannot ... while running" — what they mean when a library rejects your call — this error's family across 31 libraries.

Related errors


AI-assisted analysis of influxdata/influxdb@06200ef96b (2026-09-19). Data as JSON: /api/errors/593d73ebd31288bd. Report an issue: GitHub.

Appendix: source

Thrown at influxdb3_catalog/src/error.rs:87

    )]
    BackupCheckpointAhead {
        checkpoint_sequence: u64,
        live_sequence: u64,
    },

    #[error("invalid configuration provided: {message}")]
    InvalidConfiguration { message: Box<str> },

    #[error("only tag and string columns are supported in the distinct cache")]
    InvalidDistinctCacheColumnType,

    #[error("only uint64, int64, bool, tag, and string columns are supported in the last cache")]
    InvalidLastCacheKeyColumnType,

    #[error("plugin trigger is already enabled")]
    TriggerAlreadyEnabled,

    #[error("plugin trigger is already disabled")]
    TriggerAlreadyDisabled,

    #[error("invalid column type for column '{column_name}', expected {expected}, got {got}")]
    InvalidColumnType {
        column_name: Arc<str>,
        expected: InfluxColumnType,
        got: InfluxColumnType,
    },

    #[error("'{0}' is a reserved column")]
    ReservedColumn(Arc<str>),

    #[error(
        "table '{table_name}' is not defined in database '{db_name}', which uses explicit schemas; \
         create the table with the /api/v3/configure/table API before writing to it"
    )]
    UndeclaredTable {
        db_name: Arc<str>,

View on GitHub (pinned to 06200ef96b)