N/A | A.P.D. Deason |
Internet-Draft | Sine Nomine |
Intended status: Informational | March 01, 2011 |
Expires: September 02, 2011 |
Adding a Flexible GetSize RPC Variant to the AFS-3 Volume Service
draft-deason-afs3-getsizev2-01
This document describes an additional Rx remote procedure call that may be used to obtain the size of an AFS-3 volume dump from an AFS-3 Volume Service. While an RPC already exists for this purpose (GetSize), this document proposes a more flexible mechanism that is able to more accurately determine the size of a volume dump in a greater number of cases.
Comments regarding this draft are solicited. Please include the AFS-3 protocol standardization mailing list (afs3-standardization@openafs.org) as a recipient of any comments.
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet- Drafts is at http://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."
This Internet-Draft will expire on September 02, 2011.
Copyright (c) 2011 IETF Trust and the persons identified as the document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document.
AFS-3 provides a service (the "Volume Service") ([AFS3-VVL]) which allows administrators to examine and manage AFS-3 volumes via several Rx remote procedure calls in the AFSVol package. One of these RPCs, Dump, can be used to obtain a dump of an AFS-3 volume that can be stored on disk, usually for backup or archival purposes. Another RPC, DumpV2, was later added to allow the caller to make slight modifications to what data is contained in the dump by way of specifying certain flags in an additional argument.
To allow computation of the size of volumes returned by the Dump RPC, a GetSize RPC was provided. However, no analogous RPC exists to determine what the size of a volume dump obtained via DumpV2 would be if any flags were specified in the DumpV2 call. This document describes a new RPC, GetSizeV2, to fill this gap, to allow computation of the sizes of volume dumps generated by DumpV2.
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119].
The existing VOLSERBAD_ACCESS, VOLSERTRELE_ERROR, and ENOENT error codes are used by the new RPC defined within this document. The meaning and value of these error codes can be found in [AFS3-VVL], with the exception of ENOENT's value. ENOENT is defined to have the value 2.
One new RPC code is defined for the Volume Service: GetSizeV2. Additionally, a new namespace for GetSizeV2 flags is defined, and one flag in that namespace is defined.
This behaves exactly the same way as the existing GetSize RPC (Section 5.2), except for the addition of the flags argument, which behaves similarly to the flags argument of the existing DumpV2 RPC (Section 5.3).
GetSizeV2(IN afs_int32 fromTrans, IN afs_int32 fromDate, IN afs_int32 flags, OUT struct volintSize *size) = XXX;
Input arguments:
Output arguments:
The call is aborted with an error for all of the same conditions where Dump aborts with an error as described in [AFS3-VVL], with the appropriate error code.
The intention of the GetSizeV2 RPC is to provide an extension to the GetSize RPC, similar to how DumpV2 provided an analogous extension to Dump. As such, the only defined GetSizeV2 flag corresponds to the single existing DumpV2 flag, though there is no requirement that every GetSizeV2 flag have a DumpV2 equivalent, or vice versa.
The newly-defined RPC GetSizeV2 has very similar behavior to the RPCs DumpV2 and GetSize. While these RPCs already exist and are in use, there is no existing document describing their behavior in significant detail. Their behavior is briefly described here, so the role of GetSizeV2 may be better understood.
The DumpV2 RPC generates a canonical dump of the contents of a volume associated with a volume transaction. It is identical to the Dump RPC ([AFS3-VVL]), except for the addition of the flags parameter.
DumpV2(IN afs_int32 fromTrans, IN afs_int32 fromDate, IN afs_int32 flags) split = 65538;
Input arguments:
As with Dump, the generated volume dump for DumpV2 appears in the Rx stream for the split call ([AFS3-RX]) if there are no errors. The call is aborted with an error for all of the same conditions where Dump aborts with an error as described in [AFS3-VVL], with the appropriate error code.
The GetSize RPC calculates what the size of a volume dump obtained from calling Dump ([AFS3-VVL]) would be. This allows dump sizes to be calculated without needing to generate and transfer the entire volume dump.
struct volintSize { afs_uint64 dump_size; }; GetSize(IN afs_int32 fromTrans, IN afs_int32 fromDate, OUT struct volintSize *size) = 65537;
Input arguments:
Output arguments:
The call is aborted with an error for all of the same conditions where Dump aborts with an error as described in [AFS3-VVL], with the appropriate error code.
The DumpV2 RPC allows the caller to optionally specify a set of 0 or more flags which slightly alter the behavior of the DumpV2 call. Only one such flag is currently defined:
The results of the GetSize and GetSizeV2 RPCs are not normally considered sensitive information, though they may be computationally intensive to calculate. As such, current AFS-3 implementations typically use some per-server superuser list (such as the AFS-3 Basic OverSeer UserList) to control access to the GetSize RPC to reduce potential Denial of Service attack vectors. While this practice is OPTIONAL for implementations and subject to site-specific policies, any access control restrictions that apply to the GetSize RPC SHOULD also apply to GetSizeV2 (and vice versa) for consistency.
This document makes no request of the IANA.
This document requires the registration of one RPC code point for the AFSVol GetSizeV2 RPC detailed above in Section 4 by the the AFS-3 Assigned Numbers Registry.
This document also requests that the AFS-3 Assigned Numbers Registry assumes control over the GetSizeV2 flags namespace. This document defines one flag in this namespace, AFSVOLGETSIZEV2_OMITDIRS, detailed above in Section 4.2, with the value of 1.
The author thanks David Boyes and Jeffrey T. Hutzelman for their discussion on Rx return codes, and Derrick Brashear for his work and feedback on representing calendar dates in AFSVol.
[RFC2119] | Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997. |
[AFS3-RX] | Zayas, E.R., "AFS-3 Programmer's Reference: Specification for the Rx Remote Procedure Call Facility", Transarc Corp. Tech. Rep. FS-00-D164, August 1991. |
[AFS3-VVL] | Zayas, E.R., "AFS-3 Programmer's Reference: Volume Server/Volume Location Server Interface", Transarc Corp. Tech. Rep. FS-00-D165, August 1991. |