-
- Downloads
Split caching out from the stasis_caching_topic.
In working with res_stasis, I discovered a significant limitation to the current structure of stasis_caching_topics: you cannot subscribe to cache updates for a single channel/bridge/endpoint/etc. To address this, this patch splits the cache away from the stasis_caching_topic, making it a first class object. The stasis_cache object is shared amongst individual stasis_caching_topics that are created per channel/endpoint/etc. These are still forwarded to global whatever_all_cached topics, so their use from most of the code does not change. In making these changes, I noticed that we frequently used a similar pattern for bridges, endpoints and channels: single_topic ----------------> all_topic ^ | single_topic_cached ----+----> all_topic_cached | +----> cache This pattern was extracted as the 'Stasis Caching Pattern', defined in stasis_caching_pattern.h. This avoids a lot of duplicate code between the different domain objects. Since the cache is now disassociated from its upstream caching topics, this also necessitated a change to how the 'guaranteed' flag worked for retrieving from a cache. The code for handling the caching guarantee was extracted into a 'stasis_topic_wait' function, which works for any stasis_topic. (closes issue ASTERISK-22002) Review: https://reviewboard.asterisk.org/r/2672/ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@395954 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Showing
- apps/app_meetme.c 1 addition, 1 deletionapps/app_meetme.c
- apps/app_voicemail.c 1 addition, 1 deletionapps/app_voicemail.c
- apps/confbridge/confbridge_manager.c 2 additions, 2 deletionsapps/confbridge/confbridge_manager.c
- channels/chan_dahdi.c 1 addition, 1 deletionchannels/chan_dahdi.c
- channels/chan_iax2.c 1 addition, 1 deletionchannels/chan_iax2.c
- channels/chan_mgcp.c 1 addition, 1 deletionchannels/chan_mgcp.c
- channels/chan_sip.c 1 addition, 1 deletionchannels/chan_sip.c
- channels/chan_unistim.c 1 addition, 1 deletionchannels/chan_unistim.c
- channels/sig_pri.c 1 addition, 1 deletionchannels/sig_pri.c
- include/asterisk/app.h 7 additions, 1 deletioninclude/asterisk/app.h
- include/asterisk/bridge.h 2 additions, 0 deletionsinclude/asterisk/bridge.h
- include/asterisk/channel.h 15 additions, 0 deletionsinclude/asterisk/channel.h
- include/asterisk/channel_internal.h 1 addition, 1 deletioninclude/asterisk/channel_internal.h
- include/asterisk/devicestate.h 8 additions, 1 deletioninclude/asterisk/devicestate.h
- include/asterisk/presencestate.h 8 additions, 1 deletioninclude/asterisk/presencestate.h
- include/asterisk/stasis.h 88 additions, 42 deletionsinclude/asterisk/stasis.h
- include/asterisk/stasis_bridges.h 33 additions, 1 deletioninclude/asterisk/stasis_bridges.h
- include/asterisk/stasis_cache_pattern.h 153 additions, 0 deletionsinclude/asterisk/stasis_cache_pattern.h
- include/asterisk/stasis_channels.h 17 additions, 6 deletionsinclude/asterisk/stasis_channels.h
- include/asterisk/stasis_endpoints.h 34 additions, 1 deletioninclude/asterisk/stasis_endpoints.h
Loading
Please register or sign in to comment