crate.operator.handlers.handle_update_cratedb module

crate.operator.handlers.handle_update_cratedb.get_backoff()

When in testing mode, use a shorter backoff period as it help with speeding up some tests (they don’t have to wait so long due to transient errors).

Return type

int

crate.operator.handlers.handle_update_cratedb.register_after_update_handlers(namespace, name, change_hash, context, depends_on)
Parameters
  • namespace (str) –

  • name (str) –

  • change_hash (str) –

  • context (dict) –

  • depends_on (list) –

crate.operator.handlers.handle_update_cratedb.register_before_update_handlers(namespace, name, change_hash, context, depends_on)
Parameters
  • namespace (str) –

  • name (str) –

  • change_hash (str) –

  • context (dict) –

  • depends_on (list) –

crate.operator.handlers.handle_update_cratedb.register_change_compute_handlers(namespace, name, change_hash, context, depends_on)
Parameters
  • namespace (str) –

  • name (str) –

  • change_hash (str) –

  • context (dict) –

  • depends_on (list) –

crate.operator.handlers.handle_update_cratedb.register_restart_handlers(namespace, name, change_hash, context, depends_on, do_upgrade, do_change_compute)
Parameters
  • namespace (str) –

  • name (str) –

  • change_hash (str) –

  • context (dict) –

  • depends_on (list) –

  • do_upgrade (bool) –

  • do_change_compute (bool) –

crate.operator.handlers.handle_update_cratedb.register_scale_handlers(namespace, name, change_hash, context, depends_on)
Parameters
  • namespace (str) –

  • name (str) –

  • change_hash (str) –

  • context (dict) –

  • depends_on (list) –

crate.operator.handlers.handle_update_cratedb.register_storage_expansion_handlers(namespace, name, change_hash, context, depends_on)
Parameters
  • namespace (str) –

  • name (str) –

  • change_hash (str) –

  • context (dict) –

  • depends_on (list) –

crate.operator.handlers.handle_update_cratedb.register_upgrade_handlers(namespace, name, change_hash, context, depends_on)
Parameters
  • namespace (str) –

  • name (str) –

  • change_hash (str) –

  • context (dict) –

  • depends_on (list) –

async crate.operator.handlers.handle_update_cratedb.update_cratedb(namespace, name, patch, status, diff, started)

Handle cluster updates.

This is done as a chain of sub-handlers that depend on the previous ones completing. The state of each handler is stored in the status field of the CrateDB custom resource. Since the status field persists between runs of this handler (even for unrelated runs), we calculate and store a hash of what changed as well. This hash is then used by the sub-handlers to work out which run they are part of.

i.e., consider this status:

status:
  cluster_update:
    ref: 24b527bf0eada363bf548f19b98dd9cb
  cluster_update/after_cluster_update:
    ref: 24b527bf0eada363bf548f19b98dd9cb
    success: true
  cluster_update/before_cluster_update:
    ref: 24b527bf0eada363bf548f19b98dd9cb
    success: true
  cluster_update/scale:
    ref: 24b527bf0eada363bf548f19b98dd9cb
    success: true

here status.cluster_update.ref is the hash of the last diff that was being acted upon. Since kopf does not clean up statuses, when we start a new run we check if the hash matches - if not, it means we can disregard any refs that are not for this run.

The hash includes the new diff + the time this particular run started. This helps avoid duplicate hashes for situations when the same op is performed repeatedly, i.e. suspend/resume/suspend/resume/…

Parameters