在 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 测试
创建示例策略以测试一些实际场景
文档影响¶
需要更新外部使用的文档,其中包含有关编写基于聚合函数的策略的说明