增加rollover速率限制器
增加rollover速率限制器
如图为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变化进行了测试。