Skip to content

增加rollover速率限制器

孙靖淇 requested to merge SJQ into init

增加rollover速率限制器

image

如图为RolloverRateLimiter的大致流程。其功能为约束某一段时间(rolloverPeriod)内,ledger rollover的次数。如果在时间段内,存在rollover次数,则允许rollover。同时,启用了一个线程池,来启动定时任务,每隔固定的时间,重置rollover的许可次数(perms)。

在ManagedLedgerImpl中的CurrentLedgerIsFull函数中,新增检查perms的条件,当perms=0时,返回false. perms=-1时,限制器无效。


  • 限速器代码的实现文件为:LedgerRolloverRateLimiter.java 和 RolloverRate.java

    其中,RolloverRate定义了翻转率,包含阈值(rolloverThrottlingRate ),时间段(ratePeriodInSecond)两个参数。 阈值为-1时,限制器无效。

  • LedgerRolloverRateLimiter的实现参考了SubcriptRateLimiter。每次需要翻转的时候,需要向限制器请求许可,如果许可次数大于0,则允许翻转,否则不可翻转。同时,维护一个定时任务,按照规定的时间段,定时重置许可次数。如果阈值为-1,则始终返回true允许翻转,限制器处于无效状态。

  • 在ManagedLedgerImpl中,目前是在CurrentLedgerIsFull函数中,添加了限制条件,如果许可,才能够返回true.

  • 在ManagedledgerConfig中,添加了两个配置参数,分别是:rolloverThrottlingRate,rolloverRatePeriodInSecond。 当ledger对应的配置更新时,同时更新限制器的参数。

  • 测试部分,主要实现了三个函数,simpleTest,testAsyncAddEntryAndSyncClose,testPoliciesUpdate. 分别对不同entry添加速率, 不同的限制速率,以及运行中config变化进行了测试。

Edited by 孙靖淇

Merge request reports