I see that the traffic() function used in this test posts just one
receive/send WR each iteration.
Meaning that once the first CQE with error occurs, there are no more
CQEs left to drain.
If that is the case, I'm not sure why you still see stray completions in
the CQ.
On 5/25/2023 7:25 AM, Bob Pearson wrote:
External email: Use caution opening links or attachments
This patch adds a util method drain_cq which drains out
the cq associated with a client or server. This is then
added to the method restate_qps in tests/test_mr.py.
This allows correct operation when recovering test state
from an error which may have also left stray completions
in the cqs before resetting the qps for use.
Fixes: 4bc72d894481 ("tests: Add rereg MR tests")
Signed-off-by: Bob Pearson <rpearsonhpe@xxxxxxxxx>
---
tests/test_mr.py | 2 ++
tests/utils.py | 14 ++++++++++++++
2 files changed, 16 insertions(+)
diff --git a/tests/test_mr.py b/tests/test_mr.py
index 534df46a..73dfbff2 100644
--- a/tests/test_mr.py
+++ b/tests/test_mr.py
@@ -109,6 +109,8 @@ class MRTest(RDMATestCase):
self.server.qp.to_rts(self.server_qp_attr)
self.client.qp.modify(QPAttr(qp_state=e.IBV_QPS_RESET), e.IBV_QP_STATE)
self.client.qp.to_rts(self.client_qp_attr)
+ u.drain_cq(self.client.cq)
+ u.drain_cq(self.server.cq)
def test_mr_rereg_access(self):
self.create_players(MRRes)
diff --git a/tests/utils.py b/tests/utils.py
index a1dfa7d8..f6966b1a 100644
--- a/tests/utils.py
+++ b/tests/utils.py
@@ -672,6 +672,20 @@ def poll_cq_ex(cqex, count=1, data=None, sgid=None):
finally:
cqex.end_poll()
Keep two blank lines before and after module-level function definition
(PEP-8 convention)
+def drain_cq(cq):
+ """
+ Drain completions from a CQ.
+ :param cq: CQ to drain
+ :return: None
+ """
+ channel = cq.comp_channel
+ while 1:
+ if channel:
+ channel.get_cq_event(cq)
+ cq.req_notify()
+ nc, tmp_wcs = cq.poll(1)
tmp_wcs is unused. You can do this instead:
nc, _ = cq.poll(1)
+ if nc == 0:
+ break
def validate(received_str, is_server, msg_size):
"""
--
2.39.2