在 Datalog 中使用 Aggregates 的支持

https://blueprints.launchpad.net/congress/+spec/datalog-aggregates

Datalog 中的 Aggregates 对于编写涉及单个 ATOM 中多个记录的策略是必需的。

问题描述

  • 考虑策略语句“属于租户 Y 的子网 X 上的端口最大数量不应超过 N”。为了实现此策略,我们需要使用 COUNT、MAX、SUM 等聚合函数,这些函数跨越表中的多个记录。

  • 当前 Congress 中的 Datalog 支持不允许编写包含此类聚合函数的策略。

  • 也没有任何方法可以使用现有的 Datalog 支持来模拟聚合函数。

  • 当策略引擎订阅数据源表上的聚合函数时,每次对应表发生更改时,都必须更新这些聚合函数。

提议的变更

Datalog 的聚合函数支持允许编写以下形式的策略原子

涉及聚合函数的示例策略

1. 子网上端口数量的限制 error(subnet) :- neutron:networks.subnets(subnet, port), neutron:ports(port, ip), count(num_port, port), not gt(num_port, 10)

2. 主机平均 CPU 负载的限制 error(host) :- ceilometer:meters(host, cpu_util), nova:servers(host, vm_host), average(avg_cpu, vm_host, cpu_util), not gt(avg_cpu, 80) average(x, y, z) :- sum(z, cpu_util), count(y, vm_host), div(x, z, y)

(注意:这些是暂定的策略语句,可能会随着设计/实现进展而发生变化)

  • 像“SUM”、“COUNT”这样的聚合函数必须定义为 ANTLR 术语,并且 Congress 必须能够解析和编译这些术语。

初始实现将使用 SUM 和 COUNT 作为原型聚合函数。其他类似的聚合函数可以在以后考虑作为增强功能。

  • 运行时执行应该能够使用计算值更新与聚合函数术语对应的表

备选方案

N/A

数据模型影响

预计不会有数据模型更改。

REST API 影响

此更改不会影响 REST API,因为涉及的更改只会扩展策略语法,而策略语法作为输入提供给策略 API

安全影响

无。

通知影响

其他最终用户影响

最终用户将能够编写涉及聚合函数的策略。

性能影响

评估涉及聚合函数的策略可能涉及额外的处理,从而影响性能。

其他部署者影响

无。

开发者影响

无。

实现

负责人

主要负责人

Madhu Mohan (mmohan@mvista.com)

工作项

  • 在 Congress.g 中添加新术语,以允许 ANTLR 识别聚合函数关键字

  • 扩展解析器/编译器以接受聚合函数关键字作为规则语法的一部分并进行验证

  • 扩展运行时以计算聚合函数值并更新相应的表

  • 添加足够的测试来验证对聚合函数的支持

依赖项

无。

测试

  • 添加涉及聚合函数的测试用例

  • 添加 Tempest 测试

  • 创建示例策略以测试一些实际场景

文档影响

  • 需要更新外部使用的文档,其中包含有关编写基于聚合函数的策略的说明