summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
authorRafael H. Schloming <rhs@apache.org>2008-05-12 15:37:10 +0000
committerRafael H. Schloming <rhs@apache.org>2008-05-12 15:37:10 +0000
commit300e4a05c955fb014294a12e712f3f5fbbe746b8 (patch)
treed64c5c414e3116a79e1a6412f9913febe32309e2 /python
parent5067ee6c9e25f1d323f0cf4520f07ff123caba02 (diff)
downloadqpid-python-300e4a05c955fb014294a12e712f3f5fbbe746b8.tar.gz
QPID-947: added handler for known_completed and generate known_completed when timely-reply is set
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@655533 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'python')
-rw-r--r--python/qpid/datatypes.py8
-rw-r--r--python/qpid/delegates.py5
-rw-r--r--python/qpid/session.py10
-rw-r--r--python/tests/datatypes.py28
4 files changed, 51 insertions, 0 deletions
diff --git a/python/qpid/datatypes.py b/python/qpid/datatypes.py
index ba9eaa053f..7bea1ccc19 100644
--- a/python/qpid/datatypes.py
+++ b/python/qpid/datatypes.py
@@ -142,6 +142,14 @@ class Range:
def span(self, r):
return Range(min(self.lower, r.lower), max(self.upper, r.upper))
+ def intersect(self, r):
+ lower = max(self.lower, r.lower)
+ upper = min(self.upper, r.upper)
+ if lower > upper:
+ return None
+ else:
+ return Range(lower, upper)
+
def __repr__(self):
return "%s-%s" % (self.lower, self.upper)
diff --git a/python/qpid/delegates.py b/python/qpid/delegates.py
index 6e6b55e36a..a284fb3b59 100644
--- a/python/qpid/delegates.py
+++ b/python/qpid/delegates.py
@@ -87,8 +87,13 @@ class Delegate:
def session_completed(self, ch, cmp):
ch.session.sender.completed(cmp.commands)
+ if cmp.timely_reply:
+ ch.session_known_completed(cmp.commands)
notify(ch.session.condition)
+ def session_known_completed(self, ch, kn_cmp):
+ ch.session.receiver.known_completed(kn_cmp.commands)
+
def session_flush(self, ch, f):
rcv = ch.session.receiver
if f.expected:
diff --git a/python/qpid/session.py b/python/qpid/session.py
index a77ef91c0f..d5b4a75b62 100644
--- a/python/qpid/session.py
+++ b/python/qpid/session.py
@@ -289,6 +289,16 @@ class Receiver:
if seg.last:
self._completed.add(seg.id)
+ def known_completed(self, commands):
+ completed = RangeSet()
+ for c in self._completed.ranges:
+ for kc in commands.ranges:
+ if c.lower in kc and c.upper in kc:
+ break
+ else:
+ completed.add_range(c)
+ self._completed = completed
+
class Sender:
def __init__(self, session):
diff --git a/python/tests/datatypes.py b/python/tests/datatypes.py
index 5c6ee82283..6d8703ed4f 100644
--- a/python/tests/datatypes.py
+++ b/python/tests/datatypes.py
@@ -103,6 +103,34 @@ class RangedSetTest(TestCase):
assert range.lower == 0
assert range.upper == 8
+class RangeTest(TestCase):
+
+ def testIntersect1(self):
+ a = Range(0, 10)
+ b = Range(9, 20)
+ i1 = a.intersect(b)
+ i2 = b.intersect(a)
+ assert i1.upper == 10
+ assert i2.upper == 10
+ assert i1.lower == 9
+ assert i2.lower == 9
+
+ def testIntersect2(self):
+ a = Range(0, 10)
+ b = Range(11, 20)
+ assert a.intersect(b) == None
+ assert b.intersect(a) == None
+
+ def testIntersect3(self):
+ a = Range(0, 10)
+ b = Range(3, 5)
+ i1 = a.intersect(b)
+ i2 = b.intersect(a)
+ assert i1.upper == 5
+ assert i2.upper == 5
+ assert i1.lower == 3
+ assert i2.lower == 3
+
class UUIDTest(TestCase):
def test(self):