У меня есть следующие 2 правила:
rule "Backup Not Succeeded For At Least 3 Days"
@ruleId(1)
when
Node($id : id)
not ( Backup(clientId == $id, $state: state == BackupStateEnum.FINISHED) over window:time( 3d ) from entry-point "Backup Stream" )
then
//nothing for now
end
rule "Prune Previous Successful Backups"
@ruleId(2)
when
$prevBackup : Backup($id : clientId, state == BackupStateEnum.FINISHED) over window:time( 3d ) from entry-point "Backup Stream"
$newerBackup : Backup(clientId == $id, state == BackupStateEnum.FINISHED, this after $prevBackup) over window:time( 3d ) from entry-point "Backup Stream"
then
drools.retract($prevBackup);
end
и «стресс-тест», который генерирует 10 тыс. Таких резервных копий в день и моделирует 50 дней. учитывая, что все вышеперечисленные правила относятся к 3-дневному окну, и в системе нет других правил, в памяти должно быть не более 30 КБ событий через 50 дней (меньше, поскольку успешные должны быть удалены). однако, когда я проверяю содержимое точки входа в поток (WorkingMemoryEntryPoint), у меня в памяти происходит ~ 380 КБ событий, что означает, что у меня есть очень старые события, которые не удаляются автоматически, как они должны.
КБ был настроен в режиме потоковой обработки, а событие определяется следующим образом:
declare Backup
@role( event )
@duration ( duration )
@timestamp( finished )
end
, поэтому нет явного управления жизненным циклом.
Что я делаю неправильно ? я знаю, что это как-то связано с правилом № 2, потому что, если я удаляю его, я получаю в памяти ровно 30 тыс. событий (10 тыс. в день * 3-дневное окно)