diff mbox series

deleg: break infinite loop in DELEG8 test

Message ID 20250415114814.285400-1-tigran.mkrtchyan@desy.de (mailing list archive)
State Handled Elsewhere
Headers show
Series deleg: break infinite loop in DELEG8 test | expand

Commit Message

Mkrtchyan, Tigran April 15, 2025, 11:48 a.m. UTC
The test assumes that the server can return either OK or DELAY,
however, the 'break' condition checks only for OK.

Signed-off-by: Tigran Mkrtchyan <tigran.mkrtchyan@desy.de>
---
 nfs4.1/server41tests/st_delegation.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Comments

Jeff Layton April 15, 2025, 2:10 p.m. UTC | #1
On Tue, 2025-04-15 at 13:48 +0200, Tigran Mkrtchyan wrote:
> The test assumes that the server can return either OK or DELAY,
> however, the 'break' condition checks only for OK.
> 
> Signed-off-by: Tigran Mkrtchyan <tigran.mkrtchyan@desy.de>
> ---
>  nfs4.1/server41tests/st_delegation.py | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/nfs4.1/server41tests/st_delegation.py b/nfs4.1/server41tests/st_delegation.py
> index ea4c073..60b0de6 100644
> --- a/nfs4.1/server41tests/st_delegation.py
> +++ b/nfs4.1/server41tests/st_delegation.py
> @@ -181,8 +181,8 @@ def testDelegRevocation(t, env):
>                          owner, how, claim)
>      while 1:
>          res = sess2.compound(env.home + [open_op])
> -        if res.status == NFS4_OK:
> -            break;
> +        if res.status == NFS4_OK or res.status == NFS4ERR_DELAY:
> +            break
>          check(res, [NFS4_OK, NFS4ERR_DELAY])
>          # just to keep sess1 renewed.  This is a bit fragile, as we
>          # depend on the above compound waiting no longer than the

Don't you want to loop on NFS4ERR_DELAY?

It looks like this is supposed to loop (with no DELEGRETURN) until the
open returns NFS4_OK. Presumably at that point the delegation will be
revoked and you'll get the expected errors.
Mkrtchyan, Tigran April 15, 2025, 2:49 p.m. UTC | #2
In general, I want, but it's already happens on handling compound call:

```
        for item in range(max_retries):
            res = self.c.compound([seq_op] + ops, **kwargs)
            res = self.update_seq_state(res, slot)
            if res.status != NFS4ERR_DELAY or not handle_state_errors:
                break
            if res.resarray[0].sr_status != NFS4ERR_DELAY:
                # As per errata ID 2006 for RFC 5661 section 15.1.1.3
                # don't update the slot and sequence ID if the sequence
                # operation itself receives NFS4ERR_DELAY
                slot, seq_op = self._prepare_compound(saved_kwargs)
            time.sleep(delay_time)
```

Tigran.

----- Original Message -----
> From: "Jeff Layton" <jlayton@kernel.org>
> To: "Tigran Mkrtchyan" <tigran.mkrtchyan@desy.de>, "Calum Mackay" <calum.mackay@oracle.com>
> Cc: "linux-nfs" <linux-nfs@vger.kernel.org>
> Sent: Tuesday, 15 April, 2025 16:10:11
> Subject: Re: [PATCH] deleg: break infinite loop in DELEG8 test

> On Tue, 2025-04-15 at 13:48 +0200, Tigran Mkrtchyan wrote:
>> The test assumes that the server can return either OK or DELAY,
>> however, the 'break' condition checks only for OK.
>> 
>> Signed-off-by: Tigran Mkrtchyan <tigran.mkrtchyan@desy.de>
>> ---
>>  nfs4.1/server41tests/st_delegation.py | 4 ++--
>>  1 file changed, 2 insertions(+), 2 deletions(-)
>> 
>> diff --git a/nfs4.1/server41tests/st_delegation.py
>> b/nfs4.1/server41tests/st_delegation.py
>> index ea4c073..60b0de6 100644
>> --- a/nfs4.1/server41tests/st_delegation.py
>> +++ b/nfs4.1/server41tests/st_delegation.py
>> @@ -181,8 +181,8 @@ def testDelegRevocation(t, env):
>>                          owner, how, claim)
>>      while 1:
>>          res = sess2.compound(env.home + [open_op])
>> -        if res.status == NFS4_OK:
>> -            break;
>> +        if res.status == NFS4_OK or res.status == NFS4ERR_DELAY:
>> +            break
>>          check(res, [NFS4_OK, NFS4ERR_DELAY])
>>          # just to keep sess1 renewed.  This is a bit fragile, as we
>>          # depend on the above compound waiting no longer than the
> 
> Don't you want to loop on NFS4ERR_DELAY?
> 
> It looks like this is supposed to loop (with no DELEGRETURN) until the
> open returns NFS4_OK. Presumably at that point the delegation will be
> revoked and you'll get the expected errors.
> --
> Jeff Layton <jlayton@kernel.org>
diff mbox series

Patch

diff --git a/nfs4.1/server41tests/st_delegation.py b/nfs4.1/server41tests/st_delegation.py
index ea4c073..60b0de6 100644
--- a/nfs4.1/server41tests/st_delegation.py
+++ b/nfs4.1/server41tests/st_delegation.py
@@ -181,8 +181,8 @@  def testDelegRevocation(t, env):
                         owner, how, claim)
     while 1:
         res = sess2.compound(env.home + [open_op])
-        if res.status == NFS4_OK:
-            break;
+        if res.status == NFS4_OK or res.status == NFS4ERR_DELAY:
+            break
         check(res, [NFS4_OK, NFS4ERR_DELAY])
         # just to keep sess1 renewed.  This is a bit fragile, as we
         # depend on the above compound waiting no longer than the