diff options
| author | Rafael H. Schloming <rhs@apache.org> | 2008-05-12 15:37:10 +0000 |
|---|---|---|
| committer | Rafael H. Schloming <rhs@apache.org> | 2008-05-12 15:37:10 +0000 |
| commit | 300e4a05c955fb014294a12e712f3f5fbbe746b8 (patch) | |
| tree | d64c5c414e3116a79e1a6412f9913febe32309e2 /python | |
| parent | 5067ee6c9e25f1d323f0cf4520f07ff123caba02 (diff) | |
| download | qpid-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.py | 8 | ||||
| -rw-r--r-- | python/qpid/delegates.py | 5 | ||||
| -rw-r--r-- | python/qpid/session.py | 10 | ||||
| -rw-r--r-- | python/tests/datatypes.py | 28 |
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): |
