From patchwork Sun Nov 27 06:26:34 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Haynes X-Patchwork-Id: 9448697 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id DF5986071C for ; Sun, 27 Nov 2016 06:27:36 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C8B9720855 for ; Sun, 27 Nov 2016 06:27:36 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id BD0A422376; Sun, 27 Nov 2016 06:27:36 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI,T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 284B420855 for ; Sun, 27 Nov 2016 06:27:36 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751671AbcK0G1f (ORCPT ); Sun, 27 Nov 2016 01:27:35 -0500 Received: from us-smtp-delivery-194.mimecast.com ([63.128.21.194]:22611 "EHLO us-smtp-delivery-194.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752046AbcK0G1d (ORCPT ); Sun, 27 Nov 2016 01:27:33 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=PrimaryData.onmicrosoft.com; s=selector1-primarydata-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=1gSxetM0BWHVUYGpYzYKzSlagprPCmahTQmp/z8mjCM=; b=GUQRs1FdqWbLQ52YO4homMPrAM4OgO6doz+kFzS5YK8pGP3CMhTWa5pe01Rozl1N4M3PhBp66r7VPs0JVEQHmLY4hk4Jc6kYk+ULQcKL/nOW7LeauYKJomGMZhok1+ufwQU5BrM/SzUbFeKX6PYSDlhe7RmmyzuSYilMcKP9J9k= Received: from NAM02-SN1-obe.outbound.protection.outlook.com (mail-sn1nam02lp0024.outbound.protection.outlook.com [216.32.180.24]) (Using TLS) by us-smtp-1.mimecast.com with ESMTP id us-mta-92-CpygImbcN4WIYr6mJsiqpQ-3; Sun, 27 Nov 2016 01:27:31 -0500 Received: from jhereg.localdomain (73.202.55.195) by BN6PR11MB1364.namprd11.prod.outlook.com (10.173.33.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.747.10; Sun, 27 Nov 2016 06:27:22 +0000 From: Tom Haynes To: "J. Bruce Fields" CC: Linux NFS Mailing list Subject: [PATCH pynfs 05/12] Really, really close those open temp files to remove state on the server Date: Sat, 26 Nov 2016 22:26:34 -0800 Message-ID: <1480228001-64821-6-git-send-email-loghyr@primarydata.com> X-Mailer: git-send-email 2.3.6 In-Reply-To: <1480228001-64821-1-git-send-email-loghyr@primarydata.com> References: <1480228001-64821-1-git-send-email-loghyr@primarydata.com> MIME-Version: 1.0 X-Originating-IP: [73.202.55.195] X-ClientProxiedBy: DM2PR07CA0047.namprd07.prod.outlook.com (10.141.52.175) To BN6PR11MB1364.namprd11.prod.outlook.com (10.173.33.8) X-MS-Office365-Filtering-Correlation-Id: 1a2f8050-2021-40ca-6ee5-08d4168e725a X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:BN6PR11MB1364; X-Microsoft-Exchange-Diagnostics: 1; BN6PR11MB1364; 3:B3464yLfAkO0Kw6xvCZgiBHkzEk2/5dOnYtv0N45iFnoZBIoEL/IrFVLi8pAe90n46cGK4OrHp7wCR0CAh1XTFh5JbFGnrCXDk+U4hgDdaHI/dttsYBhekCcuk7yuScL3c96E6csPmpTKBp5M/JpUgbdD//7Idf31k+5t7ujHOArb6S839tr2OlJRkLY8kUMTqQoEUvK0dYLAyPENPp4/YJCvXjp+yV2xXK1amoPHKaRDTH7/piPGDo8FuoqhZwKlfGz3ZHBnJaDjhgSkeZEwA==; 25:r0ys24jjYgmTFQ75qgcxUTPiIeEPNkeqjycPEV7wKAhRWeRNKVKzCIjKMTXx1Ys2panRadZU2SMi/qIzprLscFBqHbUpwywME1A4pwbSdrLh5dzkVEuQImYylIcku+EMGRiWVkwbpp8olv5EkAJnQL+t3ap/oE8/FVpItFGSyQZg1axUy+n24NfT2YfEWYaLN/c3Gkq1Z87ckh3nidVAQpcUw9b1YBNgn++xI7zqfrEYv4DuUv2ecqEje3ltEBmDdYjaFHD+uyWaYQnTdiTJF+9nIYBvtpRBUsnSB2wSJ5yqdVjNMhvFdBQBFALOr/AjVvHevIhkqHsLFgIO+JdFG8S+XF68KzKziC3TK7cz9O4ulb+CbjrbicaM4vyd4o8jcOU+2TWSZiHBiTC7oM6uCb/orG1mRODgP/N0GXvO1ZNWXMVlv8g+YvEblyt4+dT1ZpDxNZH+fcKAC9u7h3VH9Q== X-Microsoft-Exchange-Diagnostics: 1; BN6PR11MB1364; 31:LJ1Rt3gMNsrbtY/fTB6/0unzMhYwne0a0epwWDHGyONzi9mIo6ur4MXz/qinzes14T7VF+htVQBRIqDvXaXeKL7m2dBFiXwdBdxlZvoP+FufvMs40VK0KptnryxKNu/Ie/EKoi/WGGrRcnPTHUGSIOuFLCjhhjBXyb8sLSl+g3TarukaM6zAWKvuIdxHW4g526CNhKvefujDed4Fr0vfBLecVoHWbFds5EpkOtk6BM0GibYPG4WBFRrTq3hsFnIgmV+Y5kIsjnbKyWxLbgLwuA==; 20:UMoboqU/MURqhxckR2RlecCs1jMVGwJXk+mAv+PDjjlE7hNlVC4+hIe8hWYgf6upY6G+tFgJU0p8xMHfurfFmna6cUl8GaiX+CxAn4BV6uX4trNEBz5M7SrKb2RRYgBtN5LnA2N9jYtyZtVZ6f8YCLPlf31TaJFfrl7cFhrHAl4= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(158342451672863); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6060326)(6045199)(6040361)(601004)(2401047)(8121501046)(5005006)(3002001)(10201501046)(6041248)(6061324)(20161123560025)(2016111802025)(20161123555025)(20161123564025)(20161123562025)(6043046)(6042181); SRVR:BN6PR11MB1364; BCL:0; PCL:0; RULEID:; SRVR:BN6PR11MB1364; X-Microsoft-Exchange-Diagnostics: 1; BN6PR11MB1364; 4:fIxDD4pTV0CHe1MG1Cst3IUdG19f5/A4EsdBMew0r56+JXZXcP24U3VvDqmS4fwA9wO1w1lkB9Xcqg+/XfO9pHlRcT3yp5edq0lUE28JVUFyRiUfQ1cyWHY9VQyUYr+pY/OF8g/FYu33Xu3ds4B3TRRXnUzdqWRBbYad1GrTQCtF51r1R3gVJx4T2Jc8A2d129N9bn+B9NTk7ZnNIQSD1ySvdIKimyDmTAB2LUvT8r994krrRvj5ovEDy5geEABo9Wy+nG/Xk0I/lQM9UdWnRtZgdao1YvOVgVhHA3jGesTJhfgoArpaJEB7C0Lu4oRsaj3In2KX35JH/sgF4y9oklINzcEK7F7lR7dpsNYCMriaopUvM9Mdd5laUkhOzq06hO15DEAyR4ZDVs1m1zcydE6NH+QPb8cv09ZJ8oL5qZELYgiaKPOI2A2HOy57aA4ZTocZncuecsXLYZBNrwjTjkHNhQoAQtL0iBkstjSAxa57932QBY7TGoZKsyghYwU6OgHDSvsxMkbS2xlvNosnEjk4jgA5bLR2uW/bLwxYL8WgPxuDW0zqPnWNVOXdigSV0tWobI4dCu1xUO0ePmYd9ajAGvASqapK+DGiGWHNLSOQdqVjMAWG4uOjJ5GYHGgxkPwZjClDUgJsrWOwWRHsy91hd+QzV67mervEf3MjDIJk25y7TJjS7dye/NclVhSjd4vlKhXMSD9YAupCApLlZBRyCyGRv7LD6QUBW0a7xLk= X-Forefront-PRVS: 0139052FDB X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(4630300001)(6009001)(7916002)(199003)(189002)(50986999)(86362001)(5003940100001)(68736007)(305945005)(7736002)(7846002)(105586002)(101416001)(97736004)(42186005)(92566002)(76176999)(36756003)(66066001)(38730400001)(47776003)(110136003)(33646002)(106356001)(733004)(2950100002)(50466002)(8676002)(6916009)(6666003)(81166006)(81156014)(4326007)(50226002)(5660300001)(48376002)(2906002)(6116002)(3846002)(6486002)(189998001); DIR:OUT; SFP:1102; SCL:1; SRVR:BN6PR11MB1364; H:jhereg.localdomain; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BN6PR11MB1364; 23:NTF8WubZvIWe2nfgSw/dD5bmwMUYR+RhbHqFOi7+J?= =?us-ascii?Q?yZAIBEireJrYX47HXIMup03Q5xLY+jro9g4HdDA6FUNfj4npkLaARalTAN/k?= =?us-ascii?Q?Wm16Aey7oTkVRuwgLb/4eNow42Vf5pLwurUXFKUR86d1hDlHve0Z0hiBszEM?= =?us-ascii?Q?h0VDsUXz25M8hOTF+N5G6GSabenykxoGmY2sWKraklGH0kbki9eH6dM4xhls?= =?us-ascii?Q?D3fhiIYZRmY3HTaWnNy6X9xDRzPIUkV/Ta7Hpq/InxvAFcsmOaM9H7GuwNzh?= =?us-ascii?Q?HCS04uPiOwOV0zlAMxrBSUL5cV82Y/KBvbdEuljc4/tHk3U5na/mNGQ5sGhm?= =?us-ascii?Q?VGN+da8Yg/I5vP02y5V0m1JXPTATi0r7NEHKhVoN6jK7qCCHHzx8zLIN5xv1?= =?us-ascii?Q?X5DMBMSSbzFKfFCG5TTZUhYRZATR8NA5bCSZinqAJDIUCjjOIdjT7DlXhCh6?= =?us-ascii?Q?K7QPsixL1ouAasbbm4bTdvM85qv/PivuJWEN63pl3DDubRUkazGocNs2ZvnI?= =?us-ascii?Q?VPwihUT6hRXkYm6ryXuh31bFj6etkuw7NIvtQqGSr9o/rGoKMDc0NhvxFnxv?= =?us-ascii?Q?M62OSyRd03cNfzkKHawL5aqHeOnmna8dp9qeB6X/IWuqEHxZYfKblngkYB/G?= =?us-ascii?Q?oRxphcPE2alLruRNQIZIFl1mxO3v+AlR98J7lajJX9CXOFG/Nx1MtNW0HvQl?= =?us-ascii?Q?V8snanZzGOBpKQygQqRrSO9DHUDO0ng0D4haNHXaY3XwsN3VzIuChYwdJaBi?= =?us-ascii?Q?Iqs55p4pO7czU5kqSmGTBuliFIWhw8mfne8pCBBTgAvQOgn8Aa6a0Yl5PyTn?= =?us-ascii?Q?iYv/wN5BgD6BoL4PX7qaV8BlyEg5rOgQ0AAf3OdcH0YA9t/DafR833u/dqwK?= =?us-ascii?Q?rwAxJoQveAiJr432yYjCXRPq+oiY4JT9SXPjgsl2Nl039guGfgLnCtghr/HX?= =?us-ascii?Q?w+iRwYUPZI4muWUphrKVklc/9/TKSA26hxkqdN8RakxoGJbiGKbs/e3quVra?= =?us-ascii?Q?o6SGmaZ73Bmohvn0LGVJ4sdLDHTD0xa6fLIOAsemZLSTA=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; BN6PR11MB1364; 6:eg9Kux2FhFQ3k38Ywoy50cJnoaHUyFMS1jNGyYC08AxOaNJ9hY2cypGW6XU0bXpzLwQlskKo2E2u59ZvvE5vCOoT2oMX4KxZj/QcBSrPMgs9T/elYuf1wx9ZZFEysdXjyWiNkAS1UKdr962HHqR5TvPjJFtoi5OaT9fbVnZdvi0tfk6YRQb/SViRaihOPSrc/wxA2E4gi5HCMbazazjIdBPsyd+lRcMDyErXvkaC5T/75dOdhUGCZeXswrIgjHnsKEE37Tdlq5Skd+9uts268SE+wbqx2OYYFa7vn6bknXvwGoE7GLr9ox9gVYyR0LCK69vQuwzkw05gjp19ZN3rMxlWycG4VIVPkAbnELE2Op/hrqHkLsfNZNpulM9I+rSXYPjp8awohL76hf4xQdNMwHpEaqikKNGiLju36YdS86qwKHGelLToAYaH3tmk8sBSBqRYQjHBPdZM1ZZdN6G+IolH/NkmU4P35kedA8QqeHw=; 5:N3n70oxJqeRJ7CbdMGRioEu4bNZ9HyJQWgcU15CberGNHD0b9oaolZR2s3c0Jp8x14DOTzCcWOwFIrenYcBtHSPwLSM960k8Bj8e1M6CMziXfiiFIa+F/6snj7gNsf1ZFBj3788N80ExkUW1F+Xk3YFgT/xu6TTqaMvNb348WG4=; 24:nhXRyLnKSQFGnd1LdJD4ppKUw+/ZTZynJS+OIc+5BpNtU/B1n2KIy6MBmH5AIUvuBlUjSLtTnYcaVldnyMM9ujbrTFofDKfholGEkqYPb/0= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BN6PR11MB1364; 7:Onq5zlIcwuyKJAOfwrfHXHltnjVFQFDtswkUjIc1Uf4V+wUrrW4WVvHNI5fGkdlr7ngzjjvfq/8Wac7kyMdkgRmWbAqcuxDMz/IZcK9x0IILe31YTUVMaATNvYcr6wP2HJH8HfB6ywvDgg+tvcC8rRGnN5iMNpblKzagdfp+8CBH+tqynQNOsRufqFtRVPUMntYA0p/54C6sd1ZHbkHujRu3OlrlUH2O2uu8a761GXcPpaZ1VypWvEUiTlKS/lHf95M0GpDXWwGYKs01+U3VvEnBniq1f6OTws9rfrRexmRSQQSZ3Ph/MPx3wxCln4vd50KqkbtO5uL5o686Pj83Q1sWQJcfPR5uQZOJ+nW/zzmAkscsyH7dRkPWdIUszx2jyvhBothV41BBDE4eEWOwzOYIhYi/iAard2feC0GkMGvcTwOZg8tjrjc0bQL2ujsP8gSh1A94pywLHGj2M7yxKQ==; 20:RlX2WgUaexM0UN+Tv2G1SXlCCiJ5+Ajy5UfaKsFYs3lkCKiTf6R5Ud6VWGmdBUGuAb6IH7BNsnXgzVFsK0oYKZ7hR/Z09nvAHoBsCusn1M/AYBVL1tn5jxAh3QsXqkr0sHDzZf2QT0XleycptsJNGDzfxsFfzvITfpBOo/OGfcU= X-OriginatorOrg: primarydata.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Nov 2016 06:27:22.1975 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN6PR11MB1364 X-MC-Unique: CpygImbcN4WIYr6mJsiqpQ-3 Sender: linux-nfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Signed-off-by: Tom Haynes --- nfs4.1/server41tests/st_current_stateid.py | 24 ++++++++++++++++++++++++ nfs4.1/server41tests/st_reclaim_complete.py | 4 ++++ nfs4.1/server41tests/st_rename.py | 4 ++++ nfs4.1/server41tests/st_secinfo.py | 20 ++++++++++++++++---- nfs4.1/server41tests/st_sequence.py | 8 ++++++++ 5 files changed, 56 insertions(+), 4 deletions(-) diff --git a/nfs4.1/server41tests/st_current_stateid.py b/nfs4.1/server41tests/st_current_stateid.py index 01d78c0..792eee8 100644 --- a/nfs4.1/server41tests/st_current_stateid.py +++ b/nfs4.1/server41tests/st_current_stateid.py @@ -99,10 +99,23 @@ def testOpenLookupClose(t, env): fname = env.testname(t) open_op = open_create_file_op(sess1, fname, open_create=OPEN4_CREATE) + lookup_op = env.home + [op.lookup(fname)] res = sess1.compound(open_op + lookup_op + [op.close(0, current_stateid)]) check(res, [NFS4ERR_STALE_STATEID, NFS4ERR_BAD_STATEID]) + # An unknown number of lookups will be present + for r in res.resarray: + if r.resop == OP_OPEN: + stateid = r.stateid + elif r.resop == OP_GETFH: + fh = r.object + break + + # Test passed, now cleanup! + res = sess1.compound([op.putfh(fh), op.close(0, stateid)]) + check(res) + def testCloseNoStateid(t, env): """test current state id processing by having CLOSE without operation which provides stateid @@ -120,6 +133,10 @@ def testCloseNoStateid(t, env): res = sess1.compound([op.putfh(fh), op.close(0, current_stateid)]) check(res, [NFS4ERR_STALE_STATEID, NFS4ERR_BAD_STATEID]) + # Test passed, now cleanup! + res = sess1.compound([op.putfh(fh), op.close(0, stateid)]) + check(res) + def testOpenLayoutGet(t, env): """test current state id processing by having OPEN and LAYOUTGET in a single compound @@ -170,6 +187,13 @@ def testOpenFreestateidClose(t, env): open_op = open_create_file_op(sess1, env.testname(t), open_create=OPEN4_CREATE) res = sess1.compound(open_op + [op.free_stateid(current_stateid), op.close(0, current_stateid)]) check(res, NFS4ERR_LOCKS_HELD) + fh = res.resarray[-2].object + stateid = res.resarray[-3].stateid + + # Test passed, now cleanup! + res = sess1.compound([op.putfh(fh), op.close(0, stateid)]) + check(res) + def testOpenSaveFHLookupRestoreFHClose(t, env): """test current state id processing by having OPEN, SAVEFH, LOOKUP, RESTOREFH and CLOSE diff --git a/nfs4.1/server41tests/st_reclaim_complete.py b/nfs4.1/server41tests/st_reclaim_complete.py index e945a9f..642ada2 100644 --- a/nfs4.1/server41tests/st_reclaim_complete.py +++ b/nfs4.1/server41tests/st_reclaim_complete.py @@ -47,6 +47,10 @@ def testReclaimAfterRECC(t, env): check(res, NFS4ERR_NO_GRACE, warnlist = [NFS4ERR_EXIST | NFS4ERR_RECLAIM_BAD]) + # Cleanup + res = sess.compound([op.putfh(fh), op.close(0, stateid)]) + check(res) + def testOpenBeforeRECC(t, env): """After a client establishes a new client ID, if non-reclaim locking operations are done before the RECLAIM_COMPLETE, diff --git a/nfs4.1/server41tests/st_rename.py b/nfs4.1/server41tests/st_rename.py index d87cca0..c7c2c20 100644 --- a/nfs4.1/server41tests/st_rename.py +++ b/nfs4.1/server41tests/st_rename.py @@ -496,6 +496,10 @@ def testSelfRenameFile(t, env): t.fail("RENAME of file %s into itself should do nothing, " "but cinfo was changed" % name) + # Cleanup + res = sess.compound([op.putfh(fh), op.close(0, stateid)]) + check(res) + def testLinkRename(t, env): """RENAME of file into its hard link should do nothing diff --git a/nfs4.1/server41tests/st_secinfo.py b/nfs4.1/server41tests/st_secinfo.py index 234ec80..008dc1e 100644 --- a/nfs4.1/server41tests/st_secinfo.py +++ b/nfs4.1/server41tests/st_secinfo.py @@ -20,14 +20,20 @@ def testSupported(t, env): path = sess.c.homedir + [name] res = create_file(sess, owner, path, access=OPEN4_SHARE_ACCESS_WRITE) check(res) + fh = res.resarray[-1].object + stateid = res.resarray[-2].stateid # Get the filehandle of the tmpfile's parent dir res = sess.compound(use_obj(sess.c.homedir) + [op.getfh()]) check(res) - fh = res.resarray[-1].object + fh_p = res.resarray[-1].object # Just do a simple SECINFO - res = sess.compound([op.putfh(fh), op.secinfo(name)]) + res = sess.compound([op.putfh(fh_p), op.secinfo(name)]) + check(res) + + # Cleanup + res = sess.compound([op.putfh(fh), op.close(0, stateid)]) check(res) def testSupported2(t, env): @@ -45,12 +51,18 @@ def testSupported2(t, env): path = sess.c.homedir + [name] res = create_file(sess, owner, path, access=OPEN4_SHARE_ACCESS_WRITE) check(res) + fh = res.resarray[-1].object + stateid = res.resarray[-2].stateid # Get the filehandle of the tmpfile's parent dir res = sess.compound(use_obj(sess.c.homedir) + [op.getfh()]) check(res) - fh = res.resarray[-1].object + fh_p = res.resarray[-1].object # GETFH after do a SECINFO should get error NFS4ERR_NOFILEHANDLE - res = sess.compound([op.putfh(fh), op.secinfo(name), op.getfh()]) + res = sess.compound([op.putfh(fh_p), op.secinfo(name), op.getfh()]) check(res, NFS4ERR_NOFILEHANDLE) + + # Cleanup + res = sess.compound([op.putfh(fh), op.close(0, stateid)]) + check(res) diff --git a/nfs4.1/server41tests/st_sequence.py b/nfs4.1/server41tests/st_sequence.py index d12f355..d8d460c 100644 --- a/nfs4.1/server41tests/st_sequence.py +++ b/nfs4.1/server41tests/st_sequence.py @@ -129,6 +129,9 @@ def testReplayCache002(t, env): """ sess1 = env.c1.new_client_session(env.testname(t)) res = create_file(sess1, "%s_1" % env.testname(t)) + fh = res.resarray[-1].object + stateid = res.resarray[-2].stateid + check(res) ops = env.home + [op.savefh(),\ op.rename("%s_1" % env.testname(t), "%s_2" % env.testname(t))] @@ -140,6 +143,11 @@ def testReplayCache002(t, env): if not nfs4lib.test_equal(res1, res2): fail("Replay results not equal") + # Cleanup + res = sess1.compound([op.putfh(fh), op.close(0, stateid)]) + check(res) + + def testReplayCache003(t, env): """Send two unsuccessful idempotent compounds with same seqid