Commit Graph

17 Commits (c944db5f02c9b44c42c9e655244f4185c2050257)

Author SHA1 Message Date
Tyler Goodlet 422977d27a Port to new `tractor.trionics.maybe_open_context()` api 2022-01-23 21:01:38 -05:00
Tyler Goodlet 8f023cd66f Factor out context cacher to `tractor.trionics` 2022-01-23 19:45:34 -05:00
Tyler Goodlet 77e014daa3 No longer feed specific 2021-09-06 09:28:11 -04:00
Tyler Goodlet 2227721dac Only set event if entry still exists 2021-09-02 10:52:21 -04:00
Tyler Goodlet 4527d4a677 Allocate an event per context 2021-09-01 10:17:03 -04:00
Tyler Goodlet 2df16e11ed Re-implement client caching using `maybe_open_ctx` 2021-09-01 09:01:25 -04:00
Tyler Goodlet c3682348fe Use the actor's service nursery instead
In order to ensure the lifetime of the feed can in fact be kept open
until the last consumer task has completed we need to maintain
a lifetime which is hierarchically greater then all consumer tasks.

This solution is somewhat hacky but seems to work well: we just use the
`tractor` actor's "service nursery" (the one normally used to invoke rpc
tasks) to launch the task which will start and keep open the target
cached async context manager. To make this more "proper" we may want to
offer a "root nursery" in all piker actors that is exposed through some
singleton api or even introduce a public api for it into `tractor`
directly.
2021-08-31 12:46:47 -04:00
Tyler Goodlet ff322ae7be Re-impl ctx-mng caching using `trio.Nursery.start()`
Maybe i've finally learned my lesson that exit stacks and per task ctx
manager caching is just not trionic.. Use the approach we've taken for
the daemon service manager as well: create a process global nursery for
each unique ctx manager we wish to cache and simply tear it down when
the number of consumers goes to zero.

This seems to resolve all prior issues and gets us error-free cached
feeds!
2021-08-30 17:54:43 -04:00
Tyler Goodlet 0c9516051b TO SQUASH cached ctx. 2021-08-26 17:04:59 -04:00
Tyler Goodlet 954dc6a8b0 Fix missing cache hit bool element of return 2021-08-26 17:04:59 -04:00
Tyler Goodlet a7d3afc9b1 Add a `maybe_open_feed()` which uses new broadcast chans
Try out he new broadcast channels from `tractor` for data feeds
we already have cached. Any time there's a cache hit we load the
cached feed and just slap a broadcast receiver on it for the local
consumer task.
2021-08-26 17:04:59 -04:00
Tyler Goodlet 224dbbc4e3 Drop feed refs 2021-08-26 17:04:59 -04:00
Tyler Goodlet 7d5add1c3a Add an njs cache gist link 2021-08-26 17:04:59 -04:00
Tyler Goodlet 66f1d91541 Let's abstractify: -> 2021-08-26 17:04:59 -04:00
Tyler Goodlet 68ce5b3550 Add lifo cache to new module; drop "utils", bleh 2021-08-26 17:04:59 -04:00
Tyler Goodlet 0ce8057823 Move feed cacheing to cache mod; put entry retreival into ctx mng 2021-08-26 17:04:59 -04:00
Tyler Goodlet a0660e553f Start top level cacheing apis module 2021-08-26 17:04:59 -04:00