[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

2019-09-30 Thread gsim
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

2019-09-30 Thread gsim
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)

2019-09-30 Thread gsim
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

2019-09-30 Thread gsim
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

2019-09-30 Thread gmurthy
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

2019-09-30 Thread eallen
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

2019-09-30 Thread tabish
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 #

2019-09-30 Thread gmurthy
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

2019-09-30 Thread kgiusti
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

2019-09-30 Thread robbie
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