[nfsv4] persistent sessions and compound atomicity

bfields@fieldses.org Wed, 09 December 2020 00:26 UTC

Return-Path: <bfields@fieldses.org>
X-Original-To: nfsv4@ietfa.amsl.com
Delivered-To: nfsv4@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 781E03A0475 for <nfsv4@ietfa.amsl.com>; Tue, 8 Dec 2020 16:26:45 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.1
X-Spam-Level:
X-Spam-Status: No, score=-2.1 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=fieldses.org
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 7I6OftG--K6k for <nfsv4@ietfa.amsl.com>; Tue, 8 Dec 2020 16:26:43 -0800 (PST)
Received: from fieldses.org (fieldses.org [IPv6:2600:3c00:e000:2f7::1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id A787A3A044E for <nfsv4@ietf.org>; Tue, 8 Dec 2020 16:26:43 -0800 (PST)
Received: by fieldses.org (Postfix, from userid 2815) id 5E5A669C3; Tue, 8 Dec 2020 19:26:40 -0500 (EST)
DKIM-Filter: OpenDKIM Filter v2.11.0 fieldses.org 5E5A669C3
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fieldses.org; s=default; t=1607473600; bh=Fku20xIxL6cnmvMZvzINb/zrMa+JZOZHNWMCrYnI0Ss=; h=Date:To:Subject:From:From; b=Dqb6xSM622eGHOrvGN0KEfNUvEbLmrtlWpQf6E2DFsOIsom7lf3JgbWKjQ3t4SqIr UDHul+QlRQ4T4lHfZc04TDj34Ad2sYauozAqXO6br6RwdU4gqYqB5UeWHiwURT51Ss 7080Shxx+FxY4f7dhnJY1rpv03BPbVaI+iUdq1bY=
Date: Tue, 08 Dec 2020 19:26:40 -0500
To: NFSv4 <nfsv4@ietf.org>
Message-ID: <20201209002639.GC16661@fieldses.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: inline
User-Agent: Mutt/1.5.21 (2010-09-15)
From: bfields@fieldses.org
Archived-At: <https://mailarchive.ietf.org/arch/msg/nfsv4/LAeppkhbUHD-P-9vK0TuaNIIzgI>
Subject: [nfsv4] persistent sessions and compound atomicity
X-BeenThere: nfsv4@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: NFSv4 Working Group <nfsv4.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/nfsv4>, <mailto:nfsv4-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/nfsv4/>
List-Post: <mailto:nfsv4@ietf.org>
List-Help: <mailto:nfsv4-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/nfsv4>, <mailto:nfsv4-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 09 Dec 2020 00:26:46 -0000

I hadn't given much thought to this language in RFC 5661, and now that I
do, it surprises me.  If you have any pointers to discussion I forgot or
overlooked, I'd be interested:

	https://tools.ietf.org/html/rfc5661#section-2.10.6.5

	The execution of the sequence of operations (starting with
	SEQUENCE) and placement of its results in the persistent cache
	MUST be atomic.  If a client retries a sequence of operations
	that was previously executed on the server, the only acceptable
	outcomes are either the original cached reply or an indication
	that the client ID or session has been lost (indicating a
	catastrophic loss of the reply cache or a session that has been
	deleted because the client failed to use the session for an
	extended period of time).

	A server could fail and restart in the middle of a COMPOUND
	procedure that contains one or more non-idempotent or
	idempotent-but-modifying operations. This creates an even higher
	challenge for atomic execution and placement of results in the
	reply cache....

And I don't see why that MUST is necessary.  Why can't the server, on
encountering a nonidempotent operation, store partial compound results
in its reply cache together with whatever compound state (current
filehandles, etc.) it needs to resume processing on restart?

Or, why not allow it to return the result so far and then DEADSESSION on
any following operation?

One problem is that a create operation followed by a GETATTR really
shouldn't fail in between the two--that'd make it hard to implement
O_CREAT, for example.

But it seems like a server should be able to avoid that without making
every sa_cachethis operation completely atomic.

Am I missing some reason for that MUST?

--b.