hark-store: cap size of half-open timeboxes

Prevents unnecessarily large timeboxes from accumulating, which can
negatively impact performance.
This commit is contained in:
Liam Fitzgerald 2021-10-26 12:59:35 -05:00
parent c095c37024
commit 4ba1223c3f
2 changed files with 17 additions and 3 deletions

View File

@ -403,11 +403,12 @@
(~(put by half-open) bin now.bowl) (~(put by half-open) bin now.bowl)
=/ existing (get-lid archive/time bin) =/ existing (get-lid archive/time bin)
=/ new (merge-notification existing note) =/ new (merge-notification existing note)
=? half-open (lth 30 (lent body.new))
(~(del by half-open) bin)
=. poke-core =. poke-core
(put-lid archive/time bin new) (put-lid archive/time bin new)
=. poke-core (del-lid lid bin) =. poke-core (del-lid lid bin)
=. poke-core (give %archived now.bowl unseen+~ (~(got re archive) time bin)) =. poke-core (give %archived time lid (~(got re archive) time bin))
=. poke-core (give %archived now.bowl seen+~ (~(got re archive) time bin))
$(bins t.bins) $(bins t.bins)
:: ::
++ read-count ++ read-count

View File

@ -30,7 +30,7 @@
[%read-count place] [%read-count place]
:: ::
+$ state +$ state
$: %8 $: %9
places=(map place:hark stats:hark) places=(map place:hark stats:hark)
seen=timebox:hark seen=timebox:hark
unseen=timebox:hark unseen=timebox:hark
@ -87,4 +87,17 @@
=/ actual-archive=notification:hark =/ actual-archive=notification:hark
(~(got re archive.state) (add *time ~s1) bin) (~(got re archive.state) (add *time ~s1) bin)
(expect-eq !>(expected-archive) !>(actual-archive)) (expect-eq !>(expected-archive) !>(actual-archive))
::
++ test-half-open-capped
=| run=@ud
|-
?: =(run 31)
=+ !<(=state on-save:agent)
(expect-eq !>(~) !>(half-open.state))
=^ movs agent
(~(on-poke agent (bowl run)) %hark-action !>((add-note run)))
=^ mavs agent
(~(on-poke agent (bowl run)) %hark-action !>(read-count))
$(run +(run))
::
-- --