[Asterisk-code-review] stasis cache pattern: Backport to 13 (asterisk[13])
Matt Jordan
asteriskteam at digium.com
Tue Jan 5 13:38:11 CST 2016
Matt Jordan has submitted this change and it was merged.
Change subject: stasis_cache_pattern: Backport to 13
......................................................................
stasis_cache_pattern: Backport to 13
Somehow stasis_cache_pattern got out of sync between 13 and master
and it was causing duplicate channel message issues in 13 when
related to a specific endpoint. I.E. from statsd,
'endpoints.PJSIP.1174.channels 0|g' was being emitted twice.
Backporting stasis_cache_pattern from master to 13 solved
the issue and running the unit and testsuite tests confirmed
that no new ones were created.
ASTERISK-25317 #close
Change-Id: Ia8707462f62d15eed14541c37f332a7bbbceb548
---
M include/asterisk/stasis_cache_pattern.h
M main/endpoints.c
M main/stasis_cache_pattern.c
3 files changed, 15 insertions(+), 39 deletions(-)
Approvals:
Richard Mudgett: Looks good to me, but someone else must approve
Anonymous Coward #1000019: Verified
Matt Jordan: Looks good to me, approved
diff --git a/include/asterisk/stasis_cache_pattern.h b/include/asterisk/stasis_cache_pattern.h
index 2776135..e61d3e9 100644
--- a/include/asterisk/stasis_cache_pattern.h
+++ b/include/asterisk/stasis_cache_pattern.h
@@ -121,9 +121,12 @@
const char *name);
/*!
- * \brief Create the 'one' side of the cache pattern.
+ * \brief Create a sink in the cache pattern
*
- * Create the 'one' but do not automatically forward.
+ * Create the 'one' but do not automatically forward to the all's topic.
+ * This is useful when aggregating other topic's messages created with
+ * \c stasis_cp_single_create in another caching topic without replicating
+ * those messages in the all's topics.
*
* Dispose of using stasis_cp_single_unsubscribe().
*
@@ -131,20 +134,8 @@
* \param name Base name for the topics.
* \return One side instance
*/
-struct stasis_cp_single *stasis_cp_single_create_only(struct stasis_cp_all *all,
+struct stasis_cp_single *stasis_cp_sink_create(struct stasis_cp_all *all,
const char *name);
-
-/*!
- * \brief Set up a topic and topic cache forward.
- *
- * Forward 'from' to 'to'.
- *
- * \param from Source 'one' side instance.
- * \param to Destination 'one' side instance.
- * \retval 0 Success
- * \retval -1 Failure
- */
-int stasis_cp_single_forward(struct stasis_cp_single *from, struct stasis_cp_single *to);
/*!
* \brief Stops caching and forwarding messages.
diff --git a/main/endpoints.c b/main/endpoints.c
index 8f3ae36..80e7f87 100644
--- a/main/endpoints.c
+++ b/main/endpoints.c
@@ -74,6 +74,8 @@
struct stasis_message_router *router;
/*! ast_str_container of channels associated with this endpoint */
struct ao2_container *channel_ids;
+ /*! Forwarding subscription from an endpoint to its tech endpoint */
+ struct stasis_forward *tech_forward;
};
static int endpoint_hash(const void *obj, int flags)
@@ -303,7 +305,7 @@
if (!ast_strlen_zero(resource)) {
- endpoint->topics = stasis_cp_single_create_only(ast_endpoint_cache_all(),
+ endpoint->topics = stasis_cp_single_create(ast_endpoint_cache_all(),
endpoint->id);
if (!endpoint->topics) {
return NULL;
@@ -322,14 +324,13 @@
return NULL;
}
- if (stasis_cp_single_forward(endpoint->topics, tech_endpoint->topics)) {
- return NULL;
- }
+ endpoint->tech_forward = stasis_forward_all(stasis_cp_single_topic(endpoint->topics),
+ stasis_cp_single_topic(tech_endpoint->topics));
endpoint_publish_snapshot(endpoint);
ao2_link(endpoints, endpoint);
} else {
- endpoint->topics = stasis_cp_single_create(ast_endpoint_cache_all(),
+ endpoint->topics = stasis_cp_sink_create(ast_endpoint_cache_all(),
endpoint->id);
if (!endpoint->topics) {
return NULL;
@@ -382,6 +383,7 @@
}
ao2_unlink(endpoints, endpoint);
+ endpoint->tech_forward = stasis_forward_cancel(endpoint->tech_forward);
clear_msg = create_endpoint_snapshot_message(endpoint);
if (clear_msg) {
diff --git a/main/stasis_cache_pattern.c b/main/stasis_cache_pattern.c
index ccc9ebf..7ccf1c1 100644
--- a/main/stasis_cache_pattern.c
+++ b/main/stasis_cache_pattern.c
@@ -138,7 +138,7 @@
{
RAII_VAR(struct stasis_cp_single *, one, NULL, ao2_cleanup);
- one = stasis_cp_single_create_only(all, name);
+ one = stasis_cp_sink_create(all, name);
if (!one) {
return NULL;
}
@@ -157,7 +157,7 @@
return one;
}
-struct stasis_cp_single *stasis_cp_single_create_only(struct stasis_cp_all *all,
+struct stasis_cp_single *stasis_cp_sink_create(struct stasis_cp_all *all,
const char *name)
{
RAII_VAR(struct stasis_cp_single *, one, NULL, ao2_cleanup);
@@ -178,23 +178,6 @@
ao2_ref(one, +1);
return one;
-}
-
-int stasis_cp_single_forward(struct stasis_cp_single *from, struct stasis_cp_single *to)
-{
- from->forward_topic_to_all = stasis_forward_all(from->topic, to->topic);
- if (!from->forward_topic_to_all) {
- return -1;;
- }
-
- from->forward_cached_to_all = stasis_forward_all(
- stasis_caching_get_topic(from->topic_cached),
- stasis_caching_get_topic(to->topic_cached));
- if (!from->forward_cached_to_all) {
- return -1;
- }
-
- return 0;
}
void stasis_cp_single_unsubscribe(struct stasis_cp_single *one)
--
To view, visit https://gerrit.asterisk.org/1917
To unsubscribe, visit https://gerrit.asterisk.org/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Ia8707462f62d15eed14541c37f332a7bbbceb548
Gerrit-PatchSet: 2
Gerrit-Project: asterisk
Gerrit-Branch: 13
Gerrit-Owner: George Joseph <george.joseph at fairview5.com>
Gerrit-Reviewer: Anonymous Coward #1000019
Gerrit-Reviewer: Joshua Colp <jcolp at digium.com>
Gerrit-Reviewer: Matt Jordan <mjordan at digium.com>
Gerrit-Reviewer: Richard Mudgett <rmudgett at digium.com>
More information about the asterisk-code-review
mailing list