Asterisk - The Open Source Telephony Project GIT-master-f36a736
|
Typical cache pattern for Stasis topics. More...
Go to the source code of this file.
Data Structures | |
struct | stasis_cp_all |
struct | stasis_cp_single |
Functions | |
static void | all_dtor (void *obj) |
static void | one_dtor (void *obj) |
struct stasis_cache * | stasis_cp_all_cache (struct stasis_cp_all *all) |
Get the cache. More... | |
struct stasis_cp_all * | stasis_cp_all_create (const char *name, snapshot_get_id id_fn) |
Create an all instance of the cache pattern. More... | |
struct stasis_topic * | stasis_cp_all_topic (struct stasis_cp_all *all) |
Get the aggregate topic. More... | |
struct stasis_topic * | stasis_cp_all_topic_cached (struct stasis_cp_all *all) |
Get the caching topic. More... | |
int | stasis_cp_single_accept_message_type (struct stasis_cp_single *one, struct stasis_message_type *type) |
Indicate to an instance that we are interested in a message type. More... | |
struct stasis_cp_single * | stasis_cp_single_create (struct stasis_cp_all *all, const char *name) |
Create the 'one' side of the cache pattern. More... | |
int | stasis_cp_single_set_filter (struct stasis_cp_single *one, enum stasis_subscription_message_filter filter) |
Set the message type filtering level on a cache. More... | |
struct stasis_topic * | stasis_cp_single_topic (struct stasis_cp_single *one) |
Get the topic for this instance. More... | |
struct stasis_topic * | stasis_cp_single_topic_cached (struct stasis_cp_single *one) |
Get the caching topic for this instance. More... | |
void | stasis_cp_single_unsubscribe (struct stasis_cp_single *one) |
Stops caching and forwarding messages. More... | |
struct stasis_cp_single * | stasis_cp_sink_create (struct stasis_cp_all *all, const char *name) |
Create a sink in the cache pattern. More... | |
Typical cache pattern for Stasis topics.
Definition in file stasis_cache_pattern.c.
|
static |
Definition at line 51 of file stasis_cache_pattern.c.
References ao2_cleanup, stasis_cp_all::cache, stasis_cp_all::forward_all_to_cached, NULL, stasis_forward_cancel(), stasis_cp_all::topic, and stasis_cp_all::topic_cached.
Referenced by stasis_cp_all_create().
|
static |
Definition at line 126 of file stasis_cache_pattern.c.
References ao2_cleanup, ast_assert, stasis_cp_single::forward_cached_to_all, stasis_cp_single::forward_topic_to_all, NULL, stasis_cp_single::topic, and stasis_cp_single::topic_cached.
Referenced by stasis_cp_sink_create().
struct stasis_cache * stasis_cp_all_cache | ( | struct stasis_cp_all * | all | ) |
Get the cache.
This is the shared cache for all corresponding stasis_cp_single objects.
all | All side caching pattern object. |
NULL | if all is NULL |
Definition at line 118 of file stasis_cache_pattern.c.
References stasis_cp_all::cache, and NULL.
Referenced by ast_endpoint_cache().
struct stasis_cp_all * stasis_cp_all_create | ( | const char * | name, |
snapshot_get_id | id_fn | ||
) |
Create an all instance of the cache pattern.
This object is AO2 managed, so dispose of it with ao2_cleanup().
name | Base name of the topics. |
id_fn | Identity function for the cache. |
NULL | on error. |
Definition at line 65 of file stasis_cache_pattern.c.
References all_dtor(), ao2_ref, ao2_t_alloc, ast_asprintf, ast_atomic_fetchadd_int(), ast_free, stasis_cp_all::cache, stasis_cp_all::forward_all_to_cached, name, NULL, stasis_cache_create(), stasis_forward_all(), stasis_topic_create(), stasis_cp_all::topic, and stasis_cp_all::topic_cached.
Referenced by ast_endpoint_stasis_init().
struct stasis_topic * stasis_cp_all_topic | ( | struct stasis_cp_all * | all | ) |
Get the aggregate topic.
This topic aggregates all messages published to corresponding stasis_cp_single_topic() topics.
all | All side caching pattern object. |
NULL | if all is NULL |
Definition at line 101 of file stasis_cache_pattern.c.
References NULL, and stasis_cp_all::topic.
Referenced by ast_endpoint_topic_all().
struct stasis_topic * stasis_cp_all_topic_cached | ( | struct stasis_cp_all * | all | ) |
Get the caching topic.
This topic aggregates all messages from the corresponding stasis_cp_single_topic_cached() topics.
Note that one normally only subscribes to the caching topic, since data is fed to it from its upstream topic.
all | All side caching pattern object. |
NULL | if all is NULL |
Definition at line 109 of file stasis_cache_pattern.c.
References NULL, and stasis_cp_all::topic_cached.
Referenced by ast_endpoint_topic_all_cached().
int stasis_cp_single_accept_message_type | ( | struct stasis_cp_single * | one, |
struct stasis_message_type * | type | ||
) |
Indicate to an instance that we are interested in a message type.
This will cause the caching topic to receive messages of the given message type. This enables internal filtering in the stasis message bus to reduce messages.
one | One side of the cache pattern. |
type | The message type we wish to receive. |
0 | on success |
-1 | failure |
Definition at line 222 of file stasis_cache_pattern.c.
References stasis_caching_accept_message_type(), stasis_cp_single::topic_cached, and type.
Referenced by endpoint_internal_create().
struct stasis_cp_single * stasis_cp_single_create | ( | struct stasis_cp_all * | all, |
const char * | name | ||
) |
Create the 'one' side of the cache pattern.
Create the 'one' and forward to all's topic and topic_cached.
Dispose of using stasis_cp_single_unsubscribe().
all | Corresponding all side. |
name | Base name for the topics. |
Definition at line 139 of file stasis_cache_pattern.c.
References ao2_ref, stasis_cp_single::forward_cached_to_all, stasis_cp_single::forward_topic_to_all, name, NULL, stasis_caching_get_topic(), stasis_cp_sink_create(), stasis_forward_all(), stasis_cp_all::topic, stasis_cp_single::topic, stasis_cp_all::topic_cached, and stasis_cp_single::topic_cached.
Referenced by endpoint_internal_create().
int stasis_cp_single_set_filter | ( | struct stasis_cp_single * | one, |
enum stasis_subscription_message_filter | filter | ||
) |
Set the message type filtering level on a cache.
This will cause the underlying subscription to filter messages according to the provided filter level. For example if selective is used then only messages matching those provided to stasis_subscription_accept_message_type will be raised to the subscription callback.
one | One side of the cache pattern. |
filter | What filter to use |
0 | on success |
-1 | failure |
Definition at line 231 of file stasis_cache_pattern.c.
References filter(), stasis_caching_set_filter(), and stasis_cp_single::topic_cached.
Referenced by endpoint_internal_create().
struct stasis_topic * stasis_cp_single_topic | ( | struct stasis_cp_single * | one | ) |
Get the topic for this instance.
This is the topic to which one would post instance-specific messages, or subscribe for single-instance, uncached messages.
one | One side of the cache pattern. |
NULL | if one is NULL |
Definition at line 205 of file stasis_cache_pattern.c.
References NULL, and stasis_cp_single::topic.
Referenced by ast_endpoint_topic(), and endpoint_internal_create().
struct stasis_topic * stasis_cp_single_topic_cached | ( | struct stasis_cp_single * | one | ) |
Get the caching topic for this instance.
Note that one normally only subscribes to the caching topic, since data is fed to it from its upstream topic.
one | One side of the cache pattern. |
NULL | if one is NULL |
Definition at line 213 of file stasis_cache_pattern.c.
References NULL, stasis_caching_get_topic(), and stasis_cp_single::topic_cached.
Referenced by ast_endpoint_topic_cached().
void stasis_cp_single_unsubscribe | ( | struct stasis_cp_single * | one | ) |
Stops caching and forwarding messages.
one | One side of the cache pattern. |
Definition at line 189 of file stasis_cache_pattern.c.
References ao2_cleanup, stasis_cp_single::forward_cached_to_all, stasis_cp_single::forward_topic_to_all, NULL, stasis_caching_unsubscribe(), stasis_forward_cancel(), and stasis_cp_single::topic_cached.
Referenced by endpoint_dtor().
struct stasis_cp_single * stasis_cp_sink_create | ( | struct stasis_cp_all * | all, |
const char * | name | ||
) |
Create a sink in the cache pattern.
Create the 'one' but do not automatically forward to the all's topic. This is useful when aggregating other topic's messages created with stasis_cp_single_create
in another caching topic without replicating those messages in the all's topics.
Dispose of using stasis_cp_single_unsubscribe().
all | Corresponding all side. |
name | Base name for the topics. |
Definition at line 162 of file stasis_cache_pattern.c.
References ao2_ref, ao2_t_alloc, stasis_cp_all::cache, name, NULL, one_dtor(), stasis_caching_topic_create(), stasis_topic_create(), stasis_cp_single::topic, and stasis_cp_single::topic_cached.
Referenced by endpoint_internal_create(), and stasis_cp_single_create().