Skip to content

Handling unrecoverable transaction errors (including timeouts) #247

Description

@v1shnya

There are three types of transactions in clixon-controller:

  1. Device connection establishment and configuration pull
  2. Device configuration push (validate / commit)
  3. Device RPC calls

Transactions of the first type usually succeed or fail quickly. In practice, you either have a connection to the device or you don’t. Likewise, a NETCONF <get> operation typically completes very fast.

Transactions of the second and third types can take significantly longer. Operations like VALIDATE, COMMIT, or device-specific RPCs may take a while to complete on the device side.

Some issues we've observed

  1. Having a single device-timeout for all three transaction types is inconvenient. From a user perspective, I’d expect an almost immediate response if a device is unreachable (connection failure), while being able to wait longer for configuration push results.

  2. The push commit command may run for up to device-timeout seconds without producing any output. If device-timeout is set to a large value, staring at a blank screen for that long is quite frustrating.

  3. If an unrecoverable error occurs during a Push transaction — for example during discard, commit, or when the device timeout is triggered — the affected device is disconnected and the transaction is aborted without rollback.

    If the transaction involved multiple devices, it’s unclear where the configuration was actually applied and where it was not. The only thing you know is where it failed (from the field in the transaction).

Would it make sense to:

  1. Separate the device connection timeout from the configuration push / RPC timeouts and make them different configuration parameters?
  2. Show progress information in the CLI after push commit / validate has started?
  3. Extend transaction information (available via NETCONF, CLI, and RESTCONF) to include which devices were actually affected and whether the operation succeeded or failed on each one?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Fields

    No fields configured for Feature.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions