congress-specs/specs/kilo/policy-engine-trigger.rst

2.9 KiB

Policy Engine Triggers

Blueprint: https://blueprints.launchpad.net/congress/+spec/policy-engine-trigger

Currently there is no mechanism for treating changes to policy-defined tables as events (aka triggers). Treating changes to policy-defined tables as events is useful because it enables us to, for example, (i) publish those changes on the message bus (ii) set up reactive enforcement, either written in code or in policy, (iii) kicking off translations to other policy engines.

Problem description

This spec aims to provide a programmatic interface for triggers. A programmer will register an event handler to run whenever a change to a table occurs. The framework will then periodically (e.g. whenever inserts/deletes occur) compute updates to tables and run the registered event handlers.

Proposed change

To each Theory class or subclass in runtime.py we will add an interface for event-handler registration, e.g.

Theory.register_handler(tablename, function)

To each Theory we will add code that implements all the triggers that have been registered.

Alternatives

Programmers could write their own trigger-logic for each feature that needs this functionality. The benefit would be that the programmer can customize the functionality to fit exactly her purpose. The drawback would be that the user would need to understand the internals of all the Theory subclasses.

Policy

None

Policy Actions

None

Data Sources

None

Data model impact

None

REST API impact

None

Security impact

None

Notifications impact

None

Other end user impact

None

Performance impact

This added functionality may or may not come with a performance cost.

NonrecursiveRuleTheory will have a performance cost because currently we do not evaluate a table on insert/delete, but after the change we will need to do more query evaluation.

MaterializedViewTheory will incur no performance cost because it already evaluates all tables at every insert/delete.

Other deployer impact

None

Developer impact

None outside of Congress. Developers can ignore the new interface if they want.

Implementation

Assignee(s)

Primary assignee:

Tim Hinrichs

Work items

  • Add event-handler registry to theory base class
  • Add implementation of event-handler to all theory subclasses

Dependencies

None

Testing

Unit tests: register event handler, insert/delete policy data, check if event handler actually executed

Documentation impact

None

References

None