[jira] [Commented] (DISPATCH-1160) Add edge address tracking module to interior routers which will inform edges of mobile address receiver changes

2018-11-01 Thread ASF GitHub Bot (JIRA)


[ 
https://issues.apache.org/jira/browse/DISPATCH-1160?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16671827#comment-16671827
 ] 

ASF GitHub Bot commented on DISPATCH-1160:
--

Github user asfgit closed the pull request at:

https://github.com/apache/qpid-dispatch/pull/410


> Add edge address tracking module to interior routers which will inform edges 
> of mobile address receiver changes
> ---
>
> Key: DISPATCH-1160
> URL: https://issues.apache.org/jira/browse/DISPATCH-1160
> Project: Qpid Dispatch
>  Issue Type: Improvement
>Affects Versions: 1.4.1
>Reporter: Ganesh Murthy
>Assignee: Ganesh Murthy
>Priority: Major
> Fix For: 1.5.0
>
>




--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

-
To unsubscribe, e-mail: dev-unsubscr...@qpid.apache.org
For additional commands, e-mail: dev-h...@qpid.apache.org



[jira] [Commented] (DISPATCH-1160) Add edge address tracking module to interior routers which will inform edges of mobile address receiver changes

2018-11-01 Thread ASF subversion and git services (JIRA)


[ 
https://issues.apache.org/jira/browse/DISPATCH-1160?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16671825#comment-16671825
 ] 

ASF subversion and git services commented on DISPATCH-1160:
---

Commit 6cf2f20ab297d963330e635c53393cba9dc7e8a4 in qpid-dispatch's branch 
refs/heads/master from [~ganeshmurthy]
[ https://git-wip-us.apache.org/repos/asf?p=qpid-dispatch.git;h=6cf2f20 ]

DISPATCH-1160 - Added edge address tracking module to interior router
This closes #410


> Add edge address tracking module to interior routers which will inform edges 
> of mobile address receiver changes
> ---
>
> Key: DISPATCH-1160
> URL: https://issues.apache.org/jira/browse/DISPATCH-1160
> Project: Qpid Dispatch
>  Issue Type: Improvement
>Affects Versions: 1.4.1
>Reporter: Ganesh Murthy
>Assignee: Ganesh Murthy
>Priority: Major
> Fix For: 1.5.0
>
>




--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

-
To unsubscribe, e-mail: dev-unsubscr...@qpid.apache.org
For additional commands, e-mail: dev-h...@qpid.apache.org



[jira] [Commented] (DISPATCH-1160) Add edge address tracking module to interior routers which will inform edges of mobile address receiver changes

2018-11-01 Thread ASF GitHub Bot (JIRA)


[ 
https://issues.apache.org/jira/browse/DISPATCH-1160?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16671788#comment-16671788
 ] 

ASF GitHub Bot commented on DISPATCH-1160:
--

Github user codecov-io commented on the issue:

https://github.com/apache/qpid-dispatch/pull/410
  
# 
[Codecov](https://codecov.io/gh/apache/qpid-dispatch/pull/410?src=pr&el=h1) 
Report
> Merging 
[#410](https://codecov.io/gh/apache/qpid-dispatch/pull/410?src=pr&el=desc) into 
[master](https://codecov.io/gh/apache/qpid-dispatch/commit/413d727b6e1772d87a23f88261cdced4940d33ee?src=pr&el=desc)
 will **increase** coverage by `0.27%`.
> The diff coverage is `89.5%`.

[![Impacted file tree 
graph](https://codecov.io/gh/apache/qpid-dispatch/pull/410/graphs/tree.svg?width=650&token=rk2Cgd27pP&height=150&src=pr)](https://codecov.io/gh/apache/qpid-dispatch/pull/410?src=pr&el=tree)

```diff
@@Coverage Diff @@
##   master #410  +/-   ##
==
+ Coverage   85.16%   85.44%   +0.27% 
==
  Files  78   79   +1 
  Lines   1742917591 +162 
==
+ Hits1484315030 +187 
+ Misses   2586 2561  -25
```


| [Impacted 
Files](https://codecov.io/gh/apache/qpid-dispatch/pull/410?src=pr&el=tree) | 
Coverage Δ | |
|---|---|---|
| 
[src/router\_core/router\_core.c](https://codecov.io/gh/apache/qpid-dispatch/pull/410/diff?src=pr&el=tree#diff-c3JjL3JvdXRlcl9jb3JlL3JvdXRlcl9jb3JlLmM=)
 | `93.27% <85.71%> (-0.16%)` | :arrow_down: |
| 
[...re/modules/edge\_addr\_tracking/edge\_addr\_tracking.c](https://codecov.io/gh/apache/qpid-dispatch/pull/410/diff?src=pr&el=tree#diff-c3JjL3JvdXRlcl9jb3JlL21vZHVsZXMvZWRnZV9hZGRyX3RyYWNraW5nL2VkZ2VfYWRkcl90cmFja2luZy5j)
 | `89.67% <89.67%> (ø)` | |
| 
[src/router\_node.c](https://codecov.io/gh/apache/qpid-dispatch/pull/410/diff?src=pr&el=tree#diff-c3JjL3JvdXRlcl9ub2RlLmM=)
 | `93.78% <0%> (+0.12%)` | :arrow_up: |
| 
[src/router\_core/connections.c](https://codecov.io/gh/apache/qpid-dispatch/pull/410/diff?src=pr&el=tree#diff-c3JjL3JvdXRlcl9jb3JlL2Nvbm5lY3Rpb25zLmM=)
 | `95.48% <0%> (+0.21%)` | :arrow_up: |
| 
[src/router\_core/transfer.c](https://codecov.io/gh/apache/qpid-dispatch/pull/410/diff?src=pr&el=tree#diff-c3JjL3JvdXRlcl9jb3JlL3RyYW5zZmVyLmM=)
 | `90.31% <0%> (+0.44%)` | :arrow_up: |
| 
[src/router\_core/agent\_link.c](https://codecov.io/gh/apache/qpid-dispatch/pull/410/diff?src=pr&el=tree#diff-c3JjL3JvdXRlcl9jb3JlL2FnZW50X2xpbmsuYw==)
 | `63.84% <0%> (+0.56%)` | :arrow_up: |
| 
[src/router\_core/core\_timer.c](https://codecov.io/gh/apache/qpid-dispatch/pull/410/diff?src=pr&el=tree#diff-c3JjL3JvdXRlcl9jb3JlL2NvcmVfdGltZXIuYw==)
 | `96.42% <0%> (+1.78%)` | :arrow_up: |
| 
[src/router\_core/core\_events.c](https://codecov.io/gh/apache/qpid-dispatch/pull/410/diff?src=pr&el=tree#diff-c3JjL3JvdXRlcl9jb3JlL2NvcmVfZXZlbnRzLmM=)
 | `100% <0%> (+11.36%)` | :arrow_up: |
| 
[src/router\_core/modules/edge\_router/addr\_proxy.c](https://codecov.io/gh/apache/qpid-dispatch/pull/410/diff?src=pr&el=tree#diff-c3JjL3JvdXRlcl9jb3JlL21vZHVsZXMvZWRnZV9yb3V0ZXIvYWRkcl9wcm94eS5j)
 | `86.61% <0%> (+20.42%)` | :arrow_up: |

--

[Continue to review full report at 
Codecov](https://codecov.io/gh/apache/qpid-dispatch/pull/410?src=pr&el=continue).
> **Legend** - [Click here to learn 
more](https://docs.codecov.io/docs/codecov-delta)
> `Δ = absolute  (impact)`, `ø = not affected`, `? = missing data`
> Powered by 
[Codecov](https://codecov.io/gh/apache/qpid-dispatch/pull/410?src=pr&el=footer).
 Last update 
[413d727...911abcb](https://codecov.io/gh/apache/qpid-dispatch/pull/410?src=pr&el=lastupdated).
 Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).



> Add edge address tracking module to interior routers which will inform edges 
> of mobile address receiver changes
> ---
>
> Key: DISPATCH-1160
> URL: https://issues.apache.org/jira/browse/DISPATCH-1160
> Project: Qpid Dispatch
>  Issue Type: Improvement
>Affects Versions: 1.4.1
>Reporter: Ganesh Murthy
>Assignee: Ganesh Murthy
>Priority: Major
> Fix For: 1.5.0
>
>




--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

-
To unsubscribe, e-mail: dev-unsubscr...@qpid.apache.org
For additional commands, e-mail: dev-h...@qpid.apache.org



[jira] [Commented] (DISPATCH-1160) Add edge address tracking module to interior routers which will inform edges of mobile address receiver changes

2018-10-31 Thread ASF GitHub Bot (JIRA)


[ 
https://issues.apache.org/jira/browse/DISPATCH-1160?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16670408#comment-16670408
 ] 

ASF GitHub Bot commented on DISPATCH-1160:
--

Github user ted-ross commented on a diff in the pull request:

https://github.com/apache/qpid-dispatch/pull/410#discussion_r229791449
  
--- Diff: src/router_core/modules/edge_addr_tracking/edge_addr_tracking.c 
---
@@ -0,0 +1,372 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#include 
+#include 
+#include "module.h"
+#include "core_link_endpoint.h"
+#include "edge_addr_tracking.h"
+#include 
+
+
+struct qdr_addr_endpoint_state_t {
+DEQ_LINKS(qdr_addr_endpoint_state_t);
+qdrc_endpoint_t*endpoint;
+qdr_connection_t   *conn;// The connection 
associated with the endpoint.
+qdr_addr_tracking_module_context_t *mc;
+};
+
+DEQ_DECLARE(qdr_addr_endpoint_state_t, qdr_addr_endpoint_state_list_t);
+ALLOC_DECLARE(qdr_addr_endpoint_state_t);
+ALLOC_DEFINE(qdr_addr_endpoint_state_t);
+
+struct  qdr_addr_tracking_module_context_t {
+qdr_core_t *core;
+qdr_addr_endpoint_state_list_t  endpoint_state_list;
+qdrc_event_subscription_t  *event_sub;
+qdrc_endpoint_desc_t   addr_tracking_endpoint;
+};
+
+
+static qd_message_t *qdcm_edge_create_address_dlv(qdr_core_t *core, 
qdr_address_t   *addr, bool insert_addr)
+{
+qd_message_t *msg = qd_message();
+
+//
+// Start header
+//
+qd_composed_field_t *fld   = qd_compose(QD_PERFORMATIVE_HEADER, 0);
+qd_compose_start_list(fld);
+qd_compose_insert_bool(fld, 0); // durable
+qd_compose_end_list(fld);
+
+qd_composed_field_t *body = 
qd_compose(QD_PERFORMATIVE_BODY_AMQP_VALUE, 0);
+
+qd_compose_start_list(body);
+
+const char *addr_str = (const char 
*)qd_hash_key_by_handle(addr->hash_handle);
+
+qd_compose_insert_string(body, addr_str);
+qd_compose_insert_bool(body, insert_addr);
+qd_compose_end_list(body);
+
+// Finally, compose and retuen the message so it can be sent out.
+qd_message_compose_3(msg, fld, body);
+
+return msg;
+}
+
+static qdr_addr_endpoint_state_t 
*qdrc_get_endpoint_state_for_connection(qdr_addr_endpoint_state_list_t  
endpoint_state_list, qdr_connection_t *conn, qdr_link_t *link)
+{
+qdr_addr_endpoint_state_t *endpoint_state = 
DEQ_HEAD(endpoint_state_list);
+while(endpoint_state) {
+if (endpoint_state->conn == conn) {
+return endpoint_state;
+}
+endpoint_state = DEQ_NEXT(endpoint_state);
+}
+return 0;
+}
+
+
+static void qdrc_address_endpoint_first_attach(void  
*bind_context,
+   qdrc_endpoint_t   *endpoint,
+   void 
**link_context,
+   qdr_terminus_t   
*remote_source,
+   qdr_terminus_t   
*remote_target)
+{
+qdr_addr_tracking_module_context_t *bc = 
(qdr_addr_tracking_module_context_t *) bind_context;
+
+qdr_addr_endpoint_state_t *endpoint_state = 
new_qdr_addr_endpoint_state_t();
+
+ZERO(endpoint_state);
+endpoint_state->endpoint = endpoint;
+endpoint_state->mc   = bc;
+endpoint_state->conn = qdrc_endpoint_get_connection_CT(endpoint);
+
+DEQ_INSERT_TAIL(bc->endpoint_state_list, endpoint_state);
+
+
+//
+// The link to hard coded address QD_TERMINUS_EDGE_ADDRESS_TRACKING 
should be created only if this is a receiver link
+// and if this link is created inside the QDR_ROLE_EDGE_CONNECTION 
connection.
+//
+if (

[jira] [Commented] (DISPATCH-1160) Add edge address tracking module to interior routers which will inform edges of mobile address receiver changes

2018-10-31 Thread ASF GitHub Bot (JIRA)


[ 
https://issues.apache.org/jira/browse/DISPATCH-1160?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16670406#comment-16670406
 ] 

ASF GitHub Bot commented on DISPATCH-1160:
--

Github user ted-ross commented on a diff in the pull request:

https://github.com/apache/qpid-dispatch/pull/410#discussion_r229788028
  
--- Diff: tests/system_tests_edge_router.py ---
@@ -345,5 +620,420 @@ def run(self):
 Container(self).run()
 
 
-if __name__ == '__main__':
+class MobileAddressOneSenderTwoReceiversTest(MessagingHandler):
+def __init__(self, receiver1_host, receiver2_host, sender_host, 
address):
+super(MobileAddressOneSenderTwoReceiversTest, self).__init__()
+self.receiver1_host = receiver1_host
+self.receiver2_host = receiver2_host
+self.sender_host = sender_host
+self.address = address
+
+# One sender connection and two receiver connections
+self.receiver1_conn = None
+self.receiver2_conn = None
+self.sender_conn   = None
+
+self.receiver1 = None
+self.receiver2 = None
+self.sender = None
+
+self.count = 300
+self.rel_count = 50
+self.n_rcvd1 = 0
+self.n_rcvd2 = 0
+self.n_sent = 0
+self.n_settled = 0
+self.n_released = 0
+self.error = None
+self.timer = None
+self.all_msgs_received = False
+self.recvd_msg_bodies = dict()
+self.dup_msg = None
+
+def timeout(self):
+if self.dup_msg:
+self.error = "Duplicate message %s received " % self.dup_msg
+else:
+self.error = "Timeout Expired - n_sent=%d n_rcvd=%d 
n_settled=%d n_released=%d addr=%s" % \
+ (self.n_sent, (self.n_rcvd1 + self.n_rcvd2), 
self.n_settled, self.n_released, self.address)
+
+self.receiver1_conn.close()
+self.receiver2_conn.close()
+self.sender_conn.close()
+
+def on_start(self, event):
+self.timer = event.reactor.schedule(5.0, Timeout(self))
+
+# Create two receivers
+self.receiver1_conn = event.container.connect(self.receiver1_host)
+self.receiver2_conn = event.container.connect(self.receiver2_host)
+self.receiver1 = 
event.container.create_receiver(self.receiver1_conn,
+ self.address)
+self.receiver2 = 
event.container.create_receiver(self.receiver2_conn,
+ self.address)
+
+# Create one sender
+self.sender_conn = event.container.connect(self.sender_host)
+self.sender = event.container.create_sender(self.sender_conn,
+self.address)
+
+def on_sendable(self, event):
+while self.n_sent < self.count:
+self.sender.send(Message(body="Message %d" % self.n_sent))
+self.n_sent += 1
+
+def on_message(self, event):
+if self.recvd_msg_bodies.get(event.message.body):
+self.dup_msg = event.message.body
+self.timeout()
+else:
+self.recvd_msg_bodies[event.message.body] = event.message.body
+
+if event.receiver == self.receiver1:
+self.n_rcvd1 += 1
+if event.receiver == self.receiver2:
+self.n_rcvd2 += 1
+
+if self.n_sent == self.n_rcvd1 + self.n_rcvd2:
+self.all_msgs_received = True
+
+def on_settled(self, event):
+self.n_settled += 1
+if self.n_settled == self.count:
+self.receiver1.close()
+self.receiver2.close()
+for i in range(self.rel_count):
+self.sender.send(Message(body="Message %d" % self.n_sent))
+self.n_sent += 1
+
+def on_released(self, event):
+self.n_released += 1
+if self.n_released == self.rel_count and self.all_msgs_received:
+self.receiver1_conn.close()
+self.receiver2_conn.close()
+self.sender_conn.close()
+self.timer.cancel()
+
+def run(self):
+Container(self).run()
+
+
+class MobileAddressMulticastTest(MessagingHandler):
+def __init__(self, receiver1_host, receiver2_host, receiver3_host,
+ sender_host, address, large_msg=False, check_addr=False):
+super(MobileAddressMulticastTest, self).__init__()
+self.receiver1_host = receiver1_host
+sel

[jira] [Commented] (DISPATCH-1160) Add edge address tracking module to interior routers which will inform edges of mobile address receiver changes

2018-10-31 Thread ASF GitHub Bot (JIRA)


[ 
https://issues.apache.org/jira/browse/DISPATCH-1160?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16670409#comment-16670409
 ] 

ASF GitHub Bot commented on DISPATCH-1160:
--

Github user ted-ross commented on a diff in the pull request:

https://github.com/apache/qpid-dispatch/pull/410#discussion_r229790940
  
--- Diff: src/router_core/modules/edge_addr_tracking/edge_addr_tracking.c 
---
@@ -0,0 +1,372 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#include 
+#include 
+#include "module.h"
+#include "core_link_endpoint.h"
+#include "edge_addr_tracking.h"
+#include 
+
+
+struct qdr_addr_endpoint_state_t {
+DEQ_LINKS(qdr_addr_endpoint_state_t);
+qdrc_endpoint_t*endpoint;
+qdr_connection_t   *conn;// The connection 
associated with the endpoint.
+qdr_addr_tracking_module_context_t *mc;
+};
+
+DEQ_DECLARE(qdr_addr_endpoint_state_t, qdr_addr_endpoint_state_list_t);
+ALLOC_DECLARE(qdr_addr_endpoint_state_t);
+ALLOC_DEFINE(qdr_addr_endpoint_state_t);
+
+struct  qdr_addr_tracking_module_context_t {
+qdr_core_t *core;
+qdr_addr_endpoint_state_list_t  endpoint_state_list;
+qdrc_event_subscription_t  *event_sub;
+qdrc_endpoint_desc_t   addr_tracking_endpoint;
+};
+
+
+static qd_message_t *qdcm_edge_create_address_dlv(qdr_core_t *core, 
qdr_address_t   *addr, bool insert_addr)
+{
+qd_message_t *msg = qd_message();
+
+//
+// Start header
+//
+qd_composed_field_t *fld   = qd_compose(QD_PERFORMATIVE_HEADER, 0);
+qd_compose_start_list(fld);
+qd_compose_insert_bool(fld, 0); // durable
+qd_compose_end_list(fld);
+
+qd_composed_field_t *body = 
qd_compose(QD_PERFORMATIVE_BODY_AMQP_VALUE, 0);
+
+qd_compose_start_list(body);
+
+const char *addr_str = (const char 
*)qd_hash_key_by_handle(addr->hash_handle);
+
+qd_compose_insert_string(body, addr_str);
+qd_compose_insert_bool(body, insert_addr);
+qd_compose_end_list(body);
+
+// Finally, compose and retuen the message so it can be sent out.
+qd_message_compose_3(msg, fld, body);
+
+return msg;
+}
+
+static qdr_addr_endpoint_state_t 
*qdrc_get_endpoint_state_for_connection(qdr_addr_endpoint_state_list_t  
endpoint_state_list, qdr_connection_t *conn, qdr_link_t *link)
+{
+qdr_addr_endpoint_state_t *endpoint_state = 
DEQ_HEAD(endpoint_state_list);
+while(endpoint_state) {
+if (endpoint_state->conn == conn) {
+return endpoint_state;
+}
+endpoint_state = DEQ_NEXT(endpoint_state);
+}
+return 0;
+}
+
+
+static void qdrc_address_endpoint_first_attach(void  
*bind_context,
+   qdrc_endpoint_t   *endpoint,
+   void 
**link_context,
+   qdr_terminus_t   
*remote_source,
+   qdr_terminus_t   
*remote_target)
+{
+qdr_addr_tracking_module_context_t *bc = 
(qdr_addr_tracking_module_context_t *) bind_context;
+
+qdr_addr_endpoint_state_t *endpoint_state = 
new_qdr_addr_endpoint_state_t();
+
+ZERO(endpoint_state);
+endpoint_state->endpoint = endpoint;
+endpoint_state->mc   = bc;
+endpoint_state->conn = qdrc_endpoint_get_connection_CT(endpoint);
+
+DEQ_INSERT_TAIL(bc->endpoint_state_list, endpoint_state);
+
+
+//
+// The link to hard coded address QD_TERMINUS_EDGE_ADDRESS_TRACKING 
should be created only if this is a receiver link
+// and if this link is created inside the QDR_ROLE_EDGE_CONNECTION 
connection.
+//
+if (

[jira] [Commented] (DISPATCH-1160) Add edge address tracking module to interior routers which will inform edges of mobile address receiver changes

2018-10-31 Thread ASF GitHub Bot (JIRA)


[ 
https://issues.apache.org/jira/browse/DISPATCH-1160?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16670407#comment-16670407
 ] 

ASF GitHub Bot commented on DISPATCH-1160:
--

Github user ted-ross commented on a diff in the pull request:

https://github.com/apache/qpid-dispatch/pull/410#discussion_r229788582
  
--- Diff: tests/system_tests_edge_router.py ---
@@ -345,5 +620,420 @@ def run(self):
 Container(self).run()
 
 
-if __name__ == '__main__':
+class MobileAddressOneSenderTwoReceiversTest(MessagingHandler):
+def __init__(self, receiver1_host, receiver2_host, sender_host, 
address):
+super(MobileAddressOneSenderTwoReceiversTest, self).__init__()
+self.receiver1_host = receiver1_host
+self.receiver2_host = receiver2_host
+self.sender_host = sender_host
+self.address = address
+
+# One sender connection and two receiver connections
+self.receiver1_conn = None
+self.receiver2_conn = None
+self.sender_conn   = None
+
+self.receiver1 = None
+self.receiver2 = None
+self.sender = None
+
+self.count = 300
+self.rel_count = 50
+self.n_rcvd1 = 0
+self.n_rcvd2 = 0
+self.n_sent = 0
+self.n_settled = 0
+self.n_released = 0
+self.error = None
+self.timer = None
+self.all_msgs_received = False
+self.recvd_msg_bodies = dict()
+self.dup_msg = None
+
+def timeout(self):
+if self.dup_msg:
+self.error = "Duplicate message %s received " % self.dup_msg
+else:
+self.error = "Timeout Expired - n_sent=%d n_rcvd=%d 
n_settled=%d n_released=%d addr=%s" % \
+ (self.n_sent, (self.n_rcvd1 + self.n_rcvd2), 
self.n_settled, self.n_released, self.address)
+
+self.receiver1_conn.close()
+self.receiver2_conn.close()
+self.sender_conn.close()
+
+def on_start(self, event):
+self.timer = event.reactor.schedule(5.0, Timeout(self))
+
+# Create two receivers
+self.receiver1_conn = event.container.connect(self.receiver1_host)
+self.receiver2_conn = event.container.connect(self.receiver2_host)
+self.receiver1 = 
event.container.create_receiver(self.receiver1_conn,
+ self.address)
+self.receiver2 = 
event.container.create_receiver(self.receiver2_conn,
+ self.address)
+
+# Create one sender
+self.sender_conn = event.container.connect(self.sender_host)
+self.sender = event.container.create_sender(self.sender_conn,
+self.address)
+
+def on_sendable(self, event):
+while self.n_sent < self.count:
+self.sender.send(Message(body="Message %d" % self.n_sent))
+self.n_sent += 1
+
+def on_message(self, event):
+if self.recvd_msg_bodies.get(event.message.body):
+self.dup_msg = event.message.body
+self.timeout()
+else:
+self.recvd_msg_bodies[event.message.body] = event.message.body
+
+if event.receiver == self.receiver1:
+self.n_rcvd1 += 1
+if event.receiver == self.receiver2:
+self.n_rcvd2 += 1
+
+if self.n_sent == self.n_rcvd1 + self.n_rcvd2:
+self.all_msgs_received = True
+
+def on_settled(self, event):
+self.n_settled += 1
+if self.n_settled == self.count:
+self.receiver1.close()
+self.receiver2.close()
+for i in range(self.rel_count):
+self.sender.send(Message(body="Message %d" % self.n_sent))
+self.n_sent += 1
+
+def on_released(self, event):
+self.n_released += 1
+if self.n_released == self.rel_count and self.all_msgs_received:
+self.receiver1_conn.close()
+self.receiver2_conn.close()
+self.sender_conn.close()
+self.timer.cancel()
+
+def run(self):
+Container(self).run()
+
+
+class MobileAddressMulticastTest(MessagingHandler):
+def __init__(self, receiver1_host, receiver2_host, receiver3_host,
+ sender_host, address, large_msg=False, check_addr=False):
+super(MobileAddressMulticastTest, self).__init__()
+self.receiver1_host = receiver1_host
+sel

[jira] [Commented] (DISPATCH-1160) Add edge address tracking module to interior routers which will inform edges of mobile address receiver changes

2018-10-31 Thread ASF GitHub Bot (JIRA)


[ 
https://issues.apache.org/jira/browse/DISPATCH-1160?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16670405#comment-16670405
 ] 

ASF GitHub Bot commented on DISPATCH-1160:
--

Github user ted-ross commented on a diff in the pull request:

https://github.com/apache/qpid-dispatch/pull/410#discussion_r229782221
  
--- Diff: src/router_core/modules/edge_addr_tracking/edge_addr_tracking.h 
---
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+*/
--- End diff --

This header file is not needed.  As a module, this component offers no API.


> Add edge address tracking module to interior routers which will inform edges 
> of mobile address receiver changes
> ---
>
> Key: DISPATCH-1160
> URL: https://issues.apache.org/jira/browse/DISPATCH-1160
> Project: Qpid Dispatch
>  Issue Type: Improvement
>Affects Versions: 1.4.1
>Reporter: Ganesh Murthy
>Assignee: Ganesh Murthy
>Priority: Major
> Fix For: 1.5.0
>
>




--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

-
To unsubscribe, e-mail: dev-unsubscr...@qpid.apache.org
For additional commands, e-mail: dev-h...@qpid.apache.org



[jira] [Commented] (DISPATCH-1160) Add edge address tracking module to interior routers which will inform edges of mobile address receiver changes

2018-10-30 Thread ASF GitHub Bot (JIRA)


[ 
https://issues.apache.org/jira/browse/DISPATCH-1160?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16669303#comment-16669303
 ] 

ASF GitHub Bot commented on DISPATCH-1160:
--

GitHub user ganeshmurthy opened a pull request:

https://github.com/apache/qpid-dispatch/pull/410

DISPATCH-1160 - Added edge address tracking module to interior router



You can merge this pull request into a Git repository by running:

$ git pull https://github.com/ganeshmurthy/qpid-dispatch EDGE-ADDR-TRACKING

Alternatively you can review and apply these changes as the patch at:

https://github.com/apache/qpid-dispatch/pull/410.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

This closes #410


commit cf5f9b7f958fa88ca747b4ec29a1cf2b0932aa33
Author: Ganesh Murthy 
Date:   2018-10-18T15:46:42Z

DISPATCH-1160 - Added edge address tracking module to interior router




> Add edge address tracking module to interior routers which will inform edges 
> of mobile address receiver changes
> ---
>
> Key: DISPATCH-1160
> URL: https://issues.apache.org/jira/browse/DISPATCH-1160
> Project: Qpid Dispatch
>  Issue Type: Improvement
>Affects Versions: 1.4.1
>Reporter: Ganesh Murthy
>Assignee: Ganesh Murthy
>Priority: Major
> Fix For: 1.5.0
>
>




--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

-
To unsubscribe, e-mail: dev-unsubscr...@qpid.apache.org
For additional commands, e-mail: dev-h...@qpid.apache.org



[jira] [Commented] (DISPATCH-1160) Add edge address tracking module to interior routers which will inform edges of mobile address receiver changes

2018-10-30 Thread Ganesh Murthy (JIRA)


[ 
https://issues.apache.org/jira/browse/DISPATCH-1160?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16669139#comment-16669139
 ] 

Ganesh Murthy commented on DISPATCH-1160:
-

Create a interior router module called edge address tracking. This module will 
allow a receiver link (Edge Address Tracking Link - EATL)  from interior to 
edge to be created on hard coded address _$qd.edge_addr_tracking

When receivers are added/removed to a mobile address, this module will inform 
the edge router if necessary via the EATL allowing the edge router to act 
accordingly.

This module will act only on mobile addresses.

> Add edge address tracking module to interior routers which will inform edges 
> of mobile address receiver changes
> ---
>
> Key: DISPATCH-1160
> URL: https://issues.apache.org/jira/browse/DISPATCH-1160
> Project: Qpid Dispatch
>  Issue Type: Improvement
>Affects Versions: 1.4.1
>Reporter: Ganesh Murthy
>Assignee: Ganesh Murthy
>Priority: Major
> Fix For: 1.5.0
>
>




--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

-
To unsubscribe, e-mail: dev-unsubscr...@qpid.apache.org
For additional commands, e-mail: dev-h...@qpid.apache.org