Skip to content

v0.0.7

New

  • woodglue.apps.rpc.RpcError(code, message, data=None): nodes can report an application JSON-RPC error by raising it or a subclass, which may set code at class level. The response carries the code, the message and, when not None, data, and the error is logged at WARNING without a traceback. Any other exception still returns an opaque -32603 "Internal error".
  • WoodglueRpcError (the error woodglue.client raises) now carries data.
  • wgl token prints the auth token, creating it if needed. wgl token --new rotates it, replacing all tokens with a single new one.
  • woodglue.log_setup: woodglue now sets up logging for wgl start itself instead of calling lythonic's LogConfig.
  • Under systemd (JOURNAL_STREAM is set): logs go to stderr with journald priority prefixes, and no wgl.log is written by default.
  • File logs now rotate (storage.log_max_bytes, storage.log_backup_count).
  • storage.log_file: null turns the file log off.
  • A top-level logging: section in woodglue.yaml is passed to logging.config.dictConfig and replaces all of the above.
  • current_mount exposes the instance data dir as MountContext.data_dir. The mount is active while a namespace is built, during scheduled trigger runs, during system trigger calls and during wgl run, not only during RPC calls.

Changed

  • Breaking: system API caller mistakes (unknown namespace, no engine, unknown method) now return -32602 with a message naming the culprit, instead of -32603. In Python they raise RpcError instead of ValueError.
  • Breaking: wgl start no longer prints the auth token. Use wgl token.
  • Breaking: the default log level is now INFO, not DEBUG. An unknown level name stops wgl start instead of silently falling back to DEBUG.
  • Breaking: woodglue.engine.activate_triggers returns TriggerActivationResult(activated, left_disabled) instead of list[str].
  • Breaking: MountContext(prefix, data_dir) replaces (prefix, mounts_dir), create_engine(mount, namespace) replaces (prefix, namespace), and NamespaceEngine gains a required mount field.

Fixes

  • wgl start handles SIGTERM and SIGINT: it stops accepting connections and stops the engines, waiting for their poll tasks, before exiting, and removes wgl.pid.
  • Triggers disabled through the deactivate_trigger system API stay disabled across restarts, keeping their last_run_at, until they are reactivated. wgl start reports each trigger it leaves disabled.

Documentation

  • Getting started: new section on getting the auth token. The curl example now sends the Authorization: Bearer header, which it was missing although auth is on by default.
  • Added a reference page for woodglue.log_setup.
  • /do_release now runs unattended after you confirm the version. It creates the GitHub release itself and checks the PyPI publish.

Dependencies

  • lythonic upgraded 0.0.22 -> 0.0.26

Decisions and tickets

  • 4 JSON-RPC: pass through application error code and message from node exceptions

  • 5 wgl start: handle SIGTERM so shutdown runs and wgl.pid is removed

  • 6 Give mounted namespaces access to the data dir

  • 7 Add a command to show the auth token; stop printing it on every start

  • 8 wgl start: make wgl.log optional (off under systemd) and rotated

  • 9 activate_triggers re-enables triggers deactivated via API on every restart