[qpid-dispatch] 01/03: DISPATCH-1428: allow a route-container connection to be looked up by connector name, even if the container id is the same as a connection from a different connector
This is an automated email from the ASF dual-hosted git repository. gsim pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/qpid-dispatch.git commit ea32ab17c4d977edcc9f6cf7f1f52565cb7b440a Author: Gordon Sim AuthorDate: Thu Sep 19 17:14:23 2019 +0100 DISPATCH-1428: allow a route-container connection to be looked up by connector name, even if the container id is the same as a connection from a different connector --- src/router_core/route_control.c | 94 +++- src/router_core/router_core_private.h | 1 + tests/system_tests_link_routes.py | 130 ++ 3 files changed, 191 insertions(+), 34 deletions(-) diff --git a/src/router_core/route_control.c b/src/router_core/route_control.c index 3249148..9ec0023 100644 --- a/src/router_core/route_control.c +++ b/src/router_core/route_control.c @@ -549,22 +549,8 @@ void qdr_route_del_auto_link_CT(qdr_core_t *core, qdr_auto_link_t *al) qdr_core_delete_auto_link(core, al); } - -void qdr_route_connection_opened_CT(qdr_core_t *core, -qdr_connection_t *conn, -qdr_field_t *container_field, -qdr_field_t *connection_field) +static void activate_route_connection(qdr_core_t *core, qdr_connection_t *conn, qdr_conn_identifier_t *cid) { -if (conn->role != QDR_ROLE_ROUTE_CONTAINER) -return; - -qdr_conn_identifier_t *cid = qdr_route_declare_id_CT(core, -container_field?container_field->iterator:0, connection_field?connection_field->iterator:0); - -qdr_add_connection_ref(>connection_refs, conn); - -conn->conn_id= cid; - // // Activate all link-routes associated with this remote container. // @@ -584,24 +570,8 @@ void qdr_route_connection_opened_CT(qdr_core_t *core, } } - -void qdr_route_connection_closed_CT(qdr_core_t *core, qdr_connection_t *conn) +static void deactivate_route_connection(qdr_core_t *core, qdr_connection_t *conn, qdr_conn_identifier_t *cid) { -// -// release any connection-based link routes. These can exist on -// QDR_ROLE_NORMAL connections. -// -while (DEQ_HEAD(conn->conn_link_routes)) { -qdr_link_route_t *lr = DEQ_HEAD(conn->conn_link_routes); -// removes the link route from conn->link_routes -qdr_route_del_conn_route_CT(core, lr); -} - -if (conn->role != QDR_ROLE_ROUTE_CONTAINER) -return; - -qdr_conn_identifier_t *cid = conn->conn_id; -if (cid) { // // Deactivate all link-routes associated with this remote container. // @@ -625,9 +595,65 @@ void qdr_route_connection_closed_CT(qdr_core_t *core, qdr_connection_t *conn) // qdr_del_connection_ref(>connection_refs, conn); -conn->conn_id= 0; - qdr_route_check_id_for_deletion_CT(core, cid); +} + +void qdr_route_connection_opened_CT(qdr_core_t *core, +qdr_connection_t *conn, +qdr_field_t *container_field, +qdr_field_t *connection_field) +{ +if (conn->role != QDR_ROLE_ROUTE_CONTAINER) +return; + +if (connection_field) { +qdr_conn_identifier_t *cid = qdr_route_declare_id_CT(core, 0, connection_field->iterator); +qdr_add_connection_ref(>connection_refs, conn); +conn->conn_id = cid; +activate_route_connection(core, conn, conn->conn_id); +if (container_field) { +cid = qdr_route_declare_id_CT(core, container_field->iterator, 0); +if (cid != conn->conn_id) { +//the connection and container may be indexed to different objects if +//there are multiple distinctly named connectors which connect to the +//same amqp container +qdr_add_connection_ref(>connection_refs, conn); +conn->alt_conn_id = cid; +activate_route_connection(core, conn, conn->alt_conn_id); +} +} +} else { +qdr_conn_identifier_t *cid = qdr_route_declare_id_CT(core, container_field->iterator, 0); +qdr_add_connection_ref(>connection_refs, conn); +conn->conn_id = cid; +activate_route_connection(core, conn, conn->conn_id); +} +} + +void qdr_route_connection_closed_CT(qdr_core_t *core, qdr_connection_t *conn) +{ +// +// release any connection-based link routes. These can exist on +// QDR_ROLE_NORMAL connections. +// +while (DEQ_HEAD(conn->conn_link_routes)) { +qdr_link_route_t *lr = DEQ_HEAD(conn->conn_link_routes); +// removes the link route from conn->link_routes +qdr_route_del_conn_route_CT(core, lr); +} + +if (conn->role != QDR_ROLE_ROUTE_CONTAINER) +return; + +qdr_conn_identifier_t *cid =
[qpid-dispatch] 03/03: DISPATCH-1430: handle array of capabilities as well as single symbol for qd.waypoint
This is an automated email from the ASF dual-hosted git repository. gsim pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/qpid-dispatch.git commit 2b849f2e17e657026bc2201e0ab396d1314d1c2d Author: Gordon Sim AuthorDate: Fri Sep 20 17:11:28 2019 +0100 DISPATCH-1430: handle array of capabilities as well as single symbol for qd.waypoint --- src/router_core/terminus.c | 30 -- 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/src/router_core/terminus.c b/src/router_core/terminus.c index 2a23dd3..1f4c61f 100644 --- a/src/router_core/terminus.c +++ b/src/router_core/terminus.c @@ -249,13 +249,9 @@ bool qdr_terminus_has_capability(qdr_terminus_t *term, const char *capability) return false; } - -int qdr_terminus_waypoint_capability(qdr_terminus_t *term) +static int get_waypoint_ordinal(pn_data_t* cap) { -pn_data_t *cap = term->capabilities; -pn_data_rewind(cap); -pn_data_next(cap); -if (cap && pn_data_type(cap) == PN_SYMBOL) { +if (pn_data_type(cap) == PN_SYMBOL) { pn_bytes_t sym = pn_data_get_symbol(cap); size_t len = strlen(QD_CAPABILITY_WAYPOINT_DEFAULT); if (sym.size >= len && strncmp(sym.start, QD_CAPABILITY_WAYPOINT_DEFAULT, len) == 0) { @@ -265,6 +261,28 @@ int qdr_terminus_waypoint_capability(qdr_terminus_t *term) return (int) (sym.start[len + 1] - '0'); } } +return 0; +} + + +int qdr_terminus_waypoint_capability(qdr_terminus_t *term) +{ +pn_data_t *cap = term->capabilities; +pn_data_rewind(cap); +pn_data_next(cap); +if (cap) { +int ordinal = get_waypoint_ordinal(cap); +if (ordinal) { +return ordinal; +} else if (pn_data_type(cap) == PN_ARRAY && pn_data_enter(cap)) { +while (pn_data_next(cap)) { +ordinal = get_waypoint_ordinal(cap); +if (ordinal) { +return ordinal; +} +} +} +} return 0; } - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
[qpid-dispatch] branch master updated (c3fd202 -> 2b849f2)
This is an automated email from the ASF dual-hosted git repository. gsim pushed a change to branch master in repository https://gitbox.apache.org/repos/asf/qpid-dispatch.git. from c3fd202 DISPATCH-1433 - Wait for the receivers to get created before starting to send messages to them new ea32ab1 DISPATCH-1428: allow a route-container connection to be looked up by connector name, even if the container id is the same as a connection from a different connector new 28613bb DISPATCH-1429: reset iterator for address starting with _ if it does not match one of the special types new 2b849f2 DISPATCH-1430: handle array of capabilities as well as single symbol for qd.waypoint The 3 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "add" were already present in the repository and have only been added to this reference. Summary of changes: src/iterator.c| 2 + src/router_core/route_control.c | 94 +++- src/router_core/router_core_private.h | 1 + src/router_core/terminus.c| 30 ++-- tests/system_tests_link_routes.py | 130 ++ 5 files changed, 217 insertions(+), 40 deletions(-) - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
[qpid-dispatch] 02/03: DISPATCH-1429: reset iterator for address starting with _ if it does not match one of the special types
This is an automated email from the ASF dual-hosted git repository. gsim pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/qpid-dispatch.git commit 28613bb2df42d3249ec27c16063d4fb923a01ea5 Author: Gordon Sim AuthorDate: Fri Sep 20 18:32:42 2019 +0100 DISPATCH-1429: reset iterator for address starting with _ if it does not match one of the special types --- src/iterator.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/iterator.c b/src/iterator.c index 5b0eb36..3fb2cd9 100644 --- a/src/iterator.c +++ b/src/iterator.c @@ -203,6 +203,8 @@ static void parse_address_view(qd_iterator_t *iter) return; } } + +iter->view_pointer = save_pointer; } iter->prefix= iter->prefix_override ? iter->prefix_override : QD_ITER_HASH_PREFIX_MOBILE; - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
[qpid-dispatch] branch master updated: DISPATCH-1433 - Wait for the receivers to get created before starting to send messages to them
This is an automated email from the ASF dual-hosted git repository. gmurthy pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/qpid-dispatch.git The following commit(s) were added to refs/heads/master by this push: new c3fd202 DISPATCH-1433 - Wait for the receivers to get created before starting to send messages to them c3fd202 is described below commit c3fd202f5ce17cb553ea3fc4b04cde376fe86e5b Author: Ganesh Murthy AuthorDate: Mon Sep 30 19:01:53 2019 -0400 DISPATCH-1433 - Wait for the receivers to get created before starting to send messages to them --- tests/system_tests_delivery_abort.py | 24 +--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/tests/system_tests_delivery_abort.py b/tests/system_tests_delivery_abort.py index 9b7418b..47585ee 100644 --- a/tests/system_tests_delivery_abort.py +++ b/tests/system_tests_delivery_abort.py @@ -480,6 +480,8 @@ class MulticastTruncateTest(MessagingHandler): self.receiver_host1 = receiver_host1 self.receiver_host2 = receiver_host2 self.address = address +self.r_attach_count = 0 +self.senders_created = False self.sender_conn= None self.receiver1_conn = None @@ -515,9 +517,6 @@ class MulticastTruncateTest(MessagingHandler): self.sender_conn= event.container.connect(self.sender_host) self.receiver1_conn = event.container.connect(self.receiver_host1) self.receiver2_conn = event.container.connect(self.receiver_host2) -self.sender1= event.container.create_sender(self.sender_conn, self.address, name="S1") -self.sender2= event.container.create_sender(self.sender_conn, self.address, name="S2") -self.sender3= event.container.create_sender(self.sender_conn, self.address, name="S3") self.receiver1 = event.container.create_receiver(self.receiver1_conn, self.address) self.receiver2 = event.container.create_receiver(self.receiver2_conn, self.address) @@ -537,6 +536,7 @@ class MulticastTruncateTest(MessagingHandler): if next_op == 'Send_Short_1': m = Message(body="%s" % next_op) self.sender1.send(m) + elif next_op == 'Send_Long_Truncated': for i in range(100): self.long_data += self.data @@ -561,6 +561,24 @@ class MulticastTruncateTest(MessagingHandler): def on_sendable(self, event): self.send() +def on_link_opened(self, event): +if event.receiver == self.receiver1: +self.r_attach_count += 1 + +if event.receiver == self.receiver2: +self.r_attach_count += 1 + +if self.r_attach_count == 2 and not self.senders_created: +self.senders_created = True +self.sender1 = event.container.create_sender(self.sender_conn, + self.address, + name="S1") +self.sender2 = event.container.create_sender(self.sender_conn, + self.address, + name="S2") +self.sender3 = event.container.create_sender(self.sender_conn, + self.address, + name="S3") def on_message(self, event): m = event.message if event.receiver == self.receiver1: - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
[qpid-dispatch] branch eallen-DISPATCH-1385 updated: Fix address legend
This is an automated email from the ASF dual-hosted git repository. eallen pushed a commit to branch eallen-DISPATCH-1385 in repository https://gitbox.apache.org/repos/asf/qpid-dispatch.git The following commit(s) were added to refs/heads/eallen-DISPATCH-1385 by this push: new ad6919d Fix address legend ad6919d is described below commit ad6919d40de426ee03fd9702bf7e53234f50b7c2 Author: Ernest Allen AuthorDate: Mon Sep 30 17:58:35 2019 -0400 Fix address legend --- console/react/src/App.css | 5 +- console/react/src/amqp/management.js | 33 +++ console/react/src/amqp/topology.js| 143 +++--- console/react/src/qdrService.js | 12 +-- console/react/src/topology/qdrTopology.js | 50 +++ console/react/src/topology/traffic.js | 43 ++--- 6 files changed, 154 insertions(+), 132 deletions(-) diff --git a/console/react/src/App.css b/console/react/src/App.css index e018298..6782444 100644 --- a/console/react/src/App.css +++ b/console/react/src/App.css @@ -490,6 +490,10 @@ path.hittarget { stroke-width: 15px; stroke: transparent; } +path.hittarget.highlighted { + stroke: #6f6; + opacity: 0.5; +} path.link.small { stroke-width: 2.5; @@ -525,7 +529,6 @@ circle.node.reflexive { circle.node.selected { stroke: #6f6 !important; stroke-width: 2px; - fill: #e0e0ff !important; } circle.node.highlighted { stroke: #6f6; diff --git a/console/react/src/amqp/management.js b/console/react/src/amqp/management.js index 4b3bb32..0bdb748 100644 --- a/console/react/src/amqp/management.js +++ b/console/react/src/amqp/management.js @@ -16,45 +16,46 @@ /* global Promise */ -import { ConnectionManager } from './connection.js'; -import Topology from './topology.js'; +import { ConnectionManager } from "./connection.js"; +import Topology from "./topology.js"; export class Management { - constructor(protocol) { + constructor(protocol, interval) { this.connection = new ConnectionManager(protocol); -this.topology = new Topology(this.connection); +this.topology = new Topology(this.connection, interval); } getSchema(callback) { var self = this; -return new Promise(function (resolve, reject) { - self.connection.sendMgmtQuery('GET-SCHEMA') -.then(function (responseAndContext) { +return new Promise(function(resolve, reject) { + self.connection.sendMgmtQuery("GET-SCHEMA").then( +function(responseAndContext) { var response = responseAndContext.response; for (var entityName in response.entityTypes) { var entity = response.entityTypes[entityName]; if (entity.deprecated) { // deprecated entity delete response.entityTypes[entityName]; -} -else { +} else { for (var attributeName in entity.attributes) { var attribute = entity.attributes[attributeName]; if (attribute.deprecated) { // deprecated attribute - delete response.entityTypes[entityName].attributes[attributeName]; + delete response.entityTypes[entityName].attributes[ +attributeName + ]; } } } } self.connection.setSchema(response); - if (callback) -callback(response); + if (callback) callback(response); resolve(response); -}, function (error) { - if (callback) -callback(error); +}, +function(error) { + if (callback) callback(error); reject(error); -}); +} + ); }); } schema() { diff --git a/console/react/src/amqp/topology.js b/console/react/src/amqp/topology.js index 0e8b2e4..dbbc00f 100644 --- a/console/react/src/amqp/topology.js +++ b/console/react/src/amqp/topology.js @@ -22,14 +22,17 @@ class Topology { constructor(connectionManager, interval) { this.connection = connectionManager; this.updatedActions = {}; +this.changedActions = {}; this.entities = []; // which entities to request each topology update this.entityAttribs = { connection: [] }; this._nodeInfo = {}; // info about all known nodes and entities this.filtering = false; // filter out nodes that don't have connection info this.timeout = 5000; this.updateInterval = interval; +console.log(`topology constructed with interval of ${interval}`); this._getTimer = null; this.updating = false; +this.counter = 0; } addUpdatedAction(key, action) { if (typeof action === "function") { @@ -59,8 +62,25 @@ class Topology { this.entityAttribs[entity] = entityAttribs[i].attrs || []; } } + addChangedAction(key, action) { +if (typeof action === "function") { + this.changedActions[key] = action; +} + } +
[qpid-jms] branch master updated: QPIDJMS-476 Enhance anonymous fallback producer to allow asynchronous sends
This is an automated email from the ASF dual-hosted git repository. tabish pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/qpid-jms.git The following commit(s) were added to refs/heads/master by this push: new e04e3f8 QPIDJMS-476 Enhance anonymous fallback producer to allow asynchronous sends e04e3f8 is described below commit e04e3f847859cddecc4704d6a9c628cf435bf97f Author: Timothy Bish AuthorDate: Mon Sep 30 15:07:50 2019 -0400 QPIDJMS-476 Enhance anonymous fallback producer to allow asynchronous sends Improves performance of anonymous fallback producer mode by allowing asynchronous sends and sends that reuse existing cache anonymous fallback producer instances avoiding the need for open -> send -> close on each send. --- .../amqp/AmqpAnonymousFallbackProducer.java| 388 +- .../qpid/jms/provider/amqp/AmqpConnection.java | 37 + .../qpid/jms/provider/amqp/AmqpFixedProducer.java |9 +- .../qpid/jms/provider/amqp/AmqpProvider.java | 41 + .../AnonymousFallbackProducerIntegrationTest.java | 1428 .../jms/integration/ProducerIntegrationTest.java | 278 .../jms/integration/SessionIntegrationTest.java| 10 +- .../provider/failover/FailoverIntegrationTest.java | 61 + qpid-jms-docs/Configuration.md |2 + 9 files changed, 1908 insertions(+), 346 deletions(-) diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/AmqpAnonymousFallbackProducer.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/AmqpAnonymousFallbackProducer.java index 63e5cbb..b3ae647 100644 --- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/AmqpAnonymousFallbackProducer.java +++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/AmqpAnonymousFallbackProducer.java @@ -16,16 +16,26 @@ */ package org.apache.qpid.jms.provider.amqp; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ScheduledFuture; +import org.apache.qpid.jms.JmsDestination; import org.apache.qpid.jms.message.JmsOutboundMessageDispatch; import org.apache.qpid.jms.meta.JmsProducerId; import org.apache.qpid.jms.meta.JmsProducerInfo; import org.apache.qpid.jms.provider.AsyncResult; +import org.apache.qpid.jms.provider.NoOpAsyncResult; import org.apache.qpid.jms.provider.ProviderException; import org.apache.qpid.jms.provider.WrappedAsyncResult; import org.apache.qpid.jms.provider.amqp.builders.AmqpProducerBuilder; +import org.apache.qpid.jms.provider.exceptions.ProviderIllegalStateException; import org.apache.qpid.jms.util.IdGenerator; +import org.apache.qpid.proton.engine.Delivery; import org.apache.qpid.proton.engine.EndpointState; +import org.apache.qpid.proton.engine.Sender; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -40,8 +50,11 @@ public class AmqpAnonymousFallbackProducer extends AmqpProducer { private static final Logger LOG = LoggerFactory.getLogger(AmqpAnonymousFallbackProducer.class); private static final IdGenerator producerIdGenerator = new IdGenerator(); +private final AmqpConnection connection; +private final Map producerCache = new LinkedHashMap<>(1, 0.75f, true); private final String producerIdKey = producerIdGenerator.generateId(); private long producerIdCount; +private final ScheduledFuture cacheProducerTimeoutTask; /** * Creates the Anonymous Producer object. @@ -53,36 +66,94 @@ public class AmqpAnonymousFallbackProducer extends AmqpProducer { */ public AmqpAnonymousFallbackProducer(AmqpSession session, JmsProducerInfo info) { super(session, info); + +this.connection = session.getConnection(); + +final long sweeperInterval = connection.getAnonymousProducerCacheTimeout(); +if (sweeperInterval > 0 && connection.getAnonymousProducerCacheSize() > 0) { +LOG.trace("Cached Producer timeout monitoring enabled: interval = {}ms", sweeperInterval); +cacheProducerTimeoutTask = connection.scheduleWithFixedDelay(new CachedProducerSweeper(), sweeperInterval); +} else { +LOG.trace("No Cached Producer timeout monitoring enabled based on configuration."); +cacheProducerTimeoutTask = null; +} } @Override public void send(JmsOutboundMessageDispatch envelope, AsyncResult request) throws ProviderException { LOG.trace("Started send chain for anonymous producer: {}", getProducerId()); +AmqpFallbackProducer producer = producerCache.get(envelope.getDestination()); + +if (producer != null && !producer.isAwaitingClose()) { +producer.send(envelope, request); +} else { +handleSendWhenCachedProducerNotAvailable(envelope, request); +} +} + +private void
[qpid-dispatch] branch master updated: DISPATCH-1426 - Added an abandoned deliveries handler so all abandoned deliveries are handled in a single place, right before the qd_link is freed. This closes #
This is an automated email from the ASF dual-hosted git repository. gmurthy pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/qpid-dispatch.git The following commit(s) were added to refs/heads/master by this push: new 17f20fb DISPATCH-1426 - Added an abandoned deliveries handler so all abandoned deliveries are handled in a single place, right before the qd_link is freed. This closes #573. 17f20fb is described below commit 17f20fb58b32d07bb1f95067c7210819e24b4b5d Author: Ganesh Murthy AuthorDate: Tue Sep 24 14:29:48 2019 -0400 DISPATCH-1426 - Added an abandoned deliveries handler so all abandoned deliveries are handled in a single place, right before the qd_link is freed. This closes #573. --- include/qpid/dispatch/container.h | 15 +-- src/container.c | 13 ++--- src/router_node.c | 11 --- 3 files changed, 15 insertions(+), 24 deletions(-) diff --git a/include/qpid/dispatch/container.h b/include/qpid/dispatch/container.h index bfe1da4..04940e2 100644 --- a/include/qpid/dispatch/container.h +++ b/include/qpid/dispatch/container.h @@ -73,12 +73,13 @@ typedef struct qd_link_t qd_link_t; ALLOC_DECLARE(qd_link_t); -typedef bool (*qd_container_delivery_handler_t)(void *node_context, qd_link_t *link); -typedef void (*qd_container_disposition_handler_t) (void *node_context, qd_link_t *link, pn_delivery_t *pnd); -typedef int (*qd_container_link_handler_t)(void *node_context, qd_link_t *link); -typedef int (*qd_container_link_detach_handler_t) (void *node_context, qd_link_t *link, qd_detach_type_t dt); -typedef void (*qd_container_node_handler_t)(void *type_context, qd_node_t *node); -typedef int (*qd_container_conn_handler_t)(void *type_context, qd_connection_t *conn, void *context); +typedef bool (*qd_container_delivery_handler_t) (void *node_context, qd_link_t *link); +typedef void (*qd_container_disposition_handler_t) (void *node_context, qd_link_t *link, pn_delivery_t *pnd); +typedef int (*qd_container_link_handler_t) (void *node_context, qd_link_t *link); +typedef int (*qd_container_link_detach_handler_t) (void *node_context, qd_link_t *link, qd_detach_type_t dt); +typedef void (*qd_container_node_handler_t) (void *type_context, qd_node_t *node); +typedef int (*qd_container_conn_handler_t) (void *type_context, qd_connection_t *conn, void *context); +typedef void (*qd_container_link_abandoned_deliveries_handler_t) (void *node_context, qd_link_t *link); /** * A set of Node handlers for deliveries, links and container events. @@ -114,6 +115,8 @@ typedef struct { /** Invoked when a link we created was opened by the peer */ qd_container_link_handler_t link_attach_handler; +qd_container_link_abandoned_deliveries_handler_t link_abandoned_deliveries_handler; + /** Invoked when a link receives a flow event */ qd_container_link_handler_t link_flow_handler; diff --git a/src/container.c b/src/container.c index 0404cf8..c5a7709 100644 --- a/src/container.c +++ b/src/container.c @@ -900,17 +900,8 @@ void qd_link_free(qd_link_t *link) DEQ_REMOVE(container->links, link); sys_mutex_unlock(container->lock); - -qd_link_ref_list_t *list = qd_link_get_ref_list(link); - -if (list) { -qd_link_ref_t *link_ref = DEQ_HEAD (*list); -while (link_ref) { -DEQ_REMOVE_HEAD(*list); -free_qd_link_ref_t(link_ref); -link_ref = DEQ_HEAD (*list); -} -} +qd_node_t *node = link->node; +node->ntype->link_abandoned_deliveries_handler(node->context, link); free_qd_link_t(link); } diff --git a/src/router_node.c b/src/router_node.c index ef1ce17..c302e20 100644 --- a/src/router_node.c +++ b/src/router_node.c @@ -102,8 +102,9 @@ static qdr_delivery_t *qdr_node_delivery_qdr_from_pn(pn_delivery_t *dlv) } -static void qdr_node_reap_abandoned_deliveries(qdr_core_t *core, qd_link_t *link) +void qd_link_abandoned_deliveries_handler(void *context, qd_link_t *link) { +qd_router_t*router = (qd_router_t*) context; qd_link_ref_list_t *list = qd_link_get_ref_list(link); qd_link_ref_t *ref = DEQ_HEAD(*list); @@ -112,7 +113,7 @@ static void qdr_node_reap_abandoned_deliveries(qdr_core_t *core, qd_link_t *link qdr_delivery_t *dlv = (qdr_delivery_t*) ref->ref; ref->ref = 0; qdr_delivery_set_context(dlv, 0); -qdr_delivery_decref(core, dlv, "qdr_node_reap_abandoned_deliveries"); +qdr_delivery_decref(router->router_core, dlv, "qd_link_abandoned_deliveries_handler"); free_qd_link_ref_t(ref); ref = DEQ_HEAD(*list); } @@ -120,7 +121,6 @@ static void qdr_node_reap_abandoned_deliveries(qdr_core_t *core, qd_link_t *link - /** * Determine the role of a
[qpid-dispatch] branch master updated: NO-JIRA: fix system tests to avoid over writing debug dump files
This is an automated email from the ASF dual-hosted git repository. kgiusti pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/qpid-dispatch.git The following commit(s) were added to refs/heads/master by this push: new 8545f36 NO-JIRA: fix system tests to avoid over writing debug dump files 8545f36 is described below commit 8545f36a4c0211fb008aba24a7f7dcd6aa7abe39 Author: Kenneth A. Giusti AuthorDate: Fri Sep 20 10:41:10 2019 -0400 NO-JIRA: fix system tests to avoid over writing debug dump files This closes #568 --- tests/system_test.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/system_test.py b/tests/system_test.py index 366f63f..6619d0e 100755 --- a/tests/system_test.py +++ b/tests/system_test.py @@ -330,7 +330,7 @@ class Qdrouterd(Process): 'listener': {'host':'0.0.0.0', 'saslMechanisms':'ANONYMOUS', 'idleTimeoutSeconds': '120', 'authenticatePeer': 'no', 'role': 'normal'}, 'connector': {'host':'127.0.0.1', 'saslMechanisms':'ANONYMOUS', 'idleTimeoutSeconds': '120'}, -'router': {'mode': 'standalone', 'id': 'QDR', 'debugDumpFile': 'qddebug.txt'} +'router': {'mode': 'standalone', 'id': 'QDR'} } def sections(self, name): @@ -376,6 +376,8 @@ class Qdrouterd(Process): self.perform_teardown = perform_teardown if not name: name = self.config.router_id assert name +# setup log and debug dump files +self.config.sections('router')[0]['debugDumpFile'] = '%s-qddebug.txt' % name default_log = [l for l in config if (l[0] == 'log' and l[1]['module'] == 'DEFAULT')] if not default_log: config.append( - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
[qpid-site] branch asf-site updated: update site content for qpid-jms-0.46.0
This is an automated email from the ASF dual-hosted git repository. robbie pushed a commit to branch asf-site in repository https://gitbox.apache.org/repos/asf/qpid-site.git The following commit(s) were added to refs/heads/asf-site by this push: new de4c1e5 update site content for qpid-jms-0.46.0 de4c1e5 is described below commit de4c1e551364b81a868dc37c760c2d78c05d53e8 Author: Robbie Gemmell AuthorDate: Mon Sep 30 09:03:44 2019 +0100 update site content for qpid-jms-0.46.0 --- content/components/jms/index.html | 8 +- content/dashboard.html | 2 +- content/documentation.html | 4 +- content/download.html | 6 +- content/maven.html | 2 +- content/releases/index.html| 3 +- content/releases/qpid-jms-0.11.1/index.html| 2 +- content/releases/qpid-jms-0.20.0/index.html| 2 +- content/releases/qpid-jms-0.21.0/index.html| 2 +- content/releases/qpid-jms-0.22.0/index.html| 2 +- content/releases/qpid-jms-0.23.0/index.html| 2 +- content/releases/qpid-jms-0.24.0/index.html| 2 +- content/releases/qpid-jms-0.25.0/index.html| 2 +- content/releases/qpid-jms-0.26.0/index.html| 2 +- content/releases/qpid-jms-0.27.0/index.html| 2 +- content/releases/qpid-jms-0.28.0/index.html| 2 +- content/releases/qpid-jms-0.29.0/index.html| 2 +- content/releases/qpid-jms-0.30.0/index.html| 2 +- content/releases/qpid-jms-0.31.0/index.html| 2 +- content/releases/qpid-jms-0.32.0/index.html| 2 +- content/releases/qpid-jms-0.33.0/index.html| 2 +- content/releases/qpid-jms-0.34.0/index.html| 2 +- content/releases/qpid-jms-0.35.0/index.html| 2 +- content/releases/qpid-jms-0.36.0/index.html| 2 +- content/releases/qpid-jms-0.37.0/index.html| 2 +- content/releases/qpid-jms-0.38.0/index.html| 2 +- content/releases/qpid-jms-0.39.0/index.html| 2 +- content/releases/qpid-jms-0.40.0/index.html| 2 +- content/releases/qpid-jms-0.41.0/index.html| 2 +- content/releases/qpid-jms-0.42.0/index.html| 2 +- content/releases/qpid-jms-0.43.0/index.html| 2 +- content/releases/qpid-jms-0.44.0/index.html| 2 +- content/releases/qpid-jms-0.45.0/index.html| 2 +- .../index.html => qpid-jms-0.46.0/building.html} | 62 ++- content/releases/qpid-jms-0.46.0/docs/index.html | 581 + .../index.html | 24 +- .../release-notes.html}| 38 +- content/releases/qpid-jms-master/index.html| 2 +- input/_transom_config.py | 2 +- input/releases/index.md| 3 +- input/releases/qpid-jms-0.46.0/building.md | 44 ++ input/releases/qpid-jms-0.46.0/docs/index.md | 383 ++ input/releases/qpid-jms-0.46.0/index.md| 68 +++ input/releases/qpid-jms-0.46.0/release-notes.md| 40 ++ 44 files changed, 1225 insertions(+), 101 deletions(-) diff --git a/content/components/jms/index.html b/content/components/jms/index.html index 32da226..0504800 100644 --- a/content/components/jms/index.html +++ b/content/components/jms/index.html @@ -147,9 +147,9 @@ API http://docs.oracle.com/javaee/7/api/javax/jms/package-summary.html;>API reference -https://github.com/apache/qpid-jms/tree/0.45.0/qpid-jms-examples;>Examples -Configuration -Building Qpid JMS +https://github.com/apache/qpid-jms/tree/0.46.0/qpid-jms-examples;>Examples +Configuration +Building Qpid JMS @@ -163,7 +163,7 @@ API Releases -Qpid JMS 0.45.0 +Qpid JMS 0.46.0 Past releases diff --git a/content/dashboard.html b/content/dashboard.html index 5a05553..50086ed 100644 --- a/content/dashboard.html +++ b/content/dashboard.html @@ -169,7 +169,7 @@ https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/> Qpid JMS - 0.45.0 + 0.46.0 https://issues.apache.org/jira/projects/QPIDJMS;>Summary https://issues.apache.org/jira/issues/?jql=project+%3D+QPIDJMS+and+resolution+is+null;>Open issues https://issues.apache.org/jira/issues/?jql=project+%3D+QPIDJMS;>All issues https://issues.apache.org/jira/secure/CreateIssue!default.jspa?pid=12314524;>Create issue https://builds.apache.org/blue/organizations/jenkins/Qpid-JMS-Test-JDK8/activity;>https://builds.apache.org/buildStatus/icon?job=Qpid-JMS-Test-JDK8; height="20"/> https://travis-ci.org/apache/qpid-jms;>https://travis-ci.org/apache/qpid-jms.svg?branch=master; height="20"/> https://builds.apache.org/blue/organizations/jenkins/Qpid-JMS-Test-JDK8-Windows/activity;>https://builds.apache.org/buildStatus/icon?job=Qpid-JMS-Te [...] https://gitbox.apache.org/repos/asf/qpid-jms.git;>Git