chat-hook: consistently pull backlog subs

We weren't accounting for backlog subscriptions with non-zero message
indexes in their wires. Now, we look through all of our outgoing
subscriptions to identify relevant backlog subscriptions, and leave all
of those.

The more proper fix here is to not include message indexes in the wire
in the first place, since we don't ever reuse that anywhere. But that's
a more invasive change, so we just leave a TODO for it instead.
This commit is contained in:
Fang 2020-04-15 19:26:58 +02:00
parent 084ce356a8
commit 0f05ed3149
No known key found for this signature in database
GPG Key ID: EB035760C1BBA972

View File

@ -358,6 +358,8 @@
%+ weld path.act %+ weld path.act
?~(mailbox /0 /(scot %ud (lent envelopes.u.mailbox))) ?~(mailbox /0 /(scot %ud (lent envelopes.u.mailbox)))
:_ state :_ state
::TODO we shouldn't include the trailing /0 or similar in the wire,
:: we never use it anywhere, and it complicates other logic. see #2746
:~ [%pass chat-history %agent [ship.act %chat-hook] %watch chat-history] :~ [%pass chat-history %agent [ship.act %chat-hook] %watch chat-history]
[%give %fact [/synced]~ %chat-hook-update !>([%initial synced])] [%give %fact [/synced]~ %chat-hook-update !>([%initial synced])]
== ==
@ -376,11 +378,10 @@
[~ state] [~ state]
=. synced (~(del by synced) path.act) =. synced (~(del by synced) path.act)
:_ state :_ state
%- zing :* [%give %kick ~[[%mailbox path.act]] ~]
:~ (pull-wire u.ship [%backlog (weld path.act /0)]) [%give %fact [/synced]~ %chat-hook-update !>([%initial synced])]
(pull-wire u.ship [%mailbox path.act]) (pull-wire u.ship [%mailbox path.act])
[%give %kick ~[[%mailbox path.act]] ~]~ (pull-backlog-subscriptions u.ship path.act)
[%give %fact [/synced]~ %chat-hook-update !>([%initial synced])]~
== ==
== ==
:: ::
@ -715,10 +716,23 @@
(snoc `^path`path %noun) (snoc `^path`path %noun)
== ==
:: ::
++ pull-backlog-subscriptions
|= [target=ship chat=path]
^- (list card)
%+ murn ~(tap by wex.bol)
|= [[=wire =ship =term] [acked=? =path]]
^- (unit card)
?. ?& =(ship target)
?=([%backlog *] wire)
=(`1 (find chat wire))
==
~
`(pull-wire target wire)
::
++ pull-wire ++ pull-wire
|= [=ship =wire] |= [=ship =wire]
^- (list card) ^- card
?: =(ship our.bol) ?: =(ship our.bol)
[%pass wire %agent [our.bol %chat-store] %leave ~]~ [%pass wire %agent [our.bol %chat-store] %leave ~]
[%pass wire %agent [ship %chat-hook] %leave ~]~ [%pass wire %agent [ship %chat-hook] %leave ~]
-- --