2021-03-24 09:11:39

by Calum Mackay

[permalink] [raw]
Subject: [PATCH 0/2] add another courteous server test

This adds a second test of courteous server functionality.

nfs4.1/server41tests/st_courtesy.py | 44 +++++++++++++++++++++++++++++---
1 file changed, 40 insertions(+), 4 deletions(-)

Calum Mackay (2):
pynfs: courtesy: use a helper function to prepare the lock op args
pynfs: courtesy: add a test to ensure server releases state appropriately




2021-03-24 09:11:39

by Calum Mackay

[permalink] [raw]
Subject: [PATCH 1/2] pynfs: courtesy: use a helper function to prepare the lock op args

Cleanup.

Future tests to be added will use the same sequence to prepare the args
for the lock op, so use a helper function for that.

Signed-off-by: Calum Mackay <[email protected]>
---
nfs4.1/server41tests/st_courtesy.py | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/nfs4.1/server41tests/st_courtesy.py b/nfs4.1/server41tests/st_courtesy.py
index 5e13dad44a01..e74d9afbca60 100644
--- a/nfs4.1/server41tests/st_courtesy.py
+++ b/nfs4.1/server41tests/st_courtesy.py
@@ -15,6 +15,12 @@ def _getleasetime(sess):
res = sess.compound([op.putrootfh(), op.getattr(1 << FATTR4_LEASE_TIME)])
return res.resarray[-1].obj_attributes[FATTR4_LEASE_TIME]

+def cour_lockargs(fh, stateid):
+ open_to_lock_owner = open_to_lock_owner4( 0, stateid, 0, lock_owner4(0, b"lock1"))
+ lock_owner = locker4(open_owner=open_to_lock_owner, new_lock_owner=True)
+ lock_ops = [ op.lock(WRITE_LT, False, 0, NFS4_UINT64_MAX, lock_owner) ]
+ return [op.putfh(fh)] + lock_ops
+
def testLockSleepLockU(t, env):
"""test server courtesy by having LOCK and LOCKU
in separate compounds, separated by a sleep of twice the lease period
@@ -29,10 +35,7 @@ def testLockSleepLockU(t, env):

fh = res.resarray[-1].object
stateid = res.resarray[-2].stateid
- open_to_lock_owner = open_to_lock_owner4( 0, stateid, 0, lock_owner4(0, b"lock1"))
- lock_owner = locker4(open_owner=open_to_lock_owner, new_lock_owner=True)
- lock_ops = [ op.lock(WRITE_LT, False, 0, NFS4_UINT64_MAX, lock_owner) ]
- res = sess1.compound([op.putfh(fh)] + lock_ops)
+ res = sess1.compound(cour_lockargs(fh, stateid))
check(res, NFS4_OK)

lease_time = _getleasetime(sess1)
--
2.27.0

2021-03-24 09:12:02

by Calum Mackay

[permalink] [raw]
Subject: [PATCH 2/2] pynfs: courtesy: add a test to ensure server releases state appropriately

This test checks that the server will allow a conflicting lock from a
second client, after lease expiry of the first client.

This applies to both courteous, and discourteous servers, but ensures
that courteous servers don't just hang onto state indefinitely.

Signed-off-by: Calum Mackay <[email protected]>
---
nfs4.1/server41tests/st_courtesy.py | 33 +++++++++++++++++++++++++++++
1 file changed, 33 insertions(+)

diff --git a/nfs4.1/server41tests/st_courtesy.py b/nfs4.1/server41tests/st_courtesy.py
index e74d9afbca60..dd911a37772d 100644
--- a/nfs4.1/server41tests/st_courtesy.py
+++ b/nfs4.1/server41tests/st_courtesy.py
@@ -48,3 +48,36 @@ def testLockSleepLockU(t, env):

res = close_file(sess1, fh, stateid=stateid)
check(res)
+
+def testLockSleepLock(t, env):
+ """ensure that a courteous server will allow a conflicting lock from
+ a second client, after lease expiry of the first client.
+ A discourteous server should allow this too, of course.
+
+ FLAGS: courteous all
+ CODE: COUR2
+ """
+
+ sess1 = env.c1.new_client_session(env.testname(t))
+
+ res = create_file(sess1, env.testname(t))
+ check(res)
+
+ fh = res.resarray[-1].object
+ stateid = res.resarray[-2].stateid
+ res = sess1.compound(cour_lockargs(fh, stateid))
+ check(res, NFS4_OK)
+
+ lease_time = _getleasetime(sess1)
+ env.sleep(lease_time * 2, "twice the lease period")
+
+ c2 = env.c1.new_client(b"%s_2" % env.testname(t))
+ sess2 = c2.create_session()
+
+ res = open_file(sess2, env.testname(t), access=OPEN4_SHARE_ACCESS_WRITE)
+ check(res)
+
+ fh = res.resarray[-1].object
+ stateid = res.resarray[-2].stateid
+ res = sess2.compound(cour_lockargs(fh, stateid))
+ check(res, NFS4_OK)
--
2.27.0

2021-03-25 17:28:13

by J. Bruce Fields

[permalink] [raw]
Subject: Re: [PATCH 0/2] add another courteous server test

Thanks!--b.

On Wed, Mar 24, 2021 at 01:46:28AM +0000, Calum Mackay wrote:
> This adds a second test of courteous server functionality.
>
> nfs4.1/server41tests/st_courtesy.py | 44 +++++++++++++++++++++++++++++---
> 1 file changed, 40 insertions(+), 4 deletions(-)
>
> Calum Mackay (2):
> pynfs: courtesy: use a helper function to prepare the lock op args
> pynfs: courtesy: add a test to ensure server releases state appropriately
>
>