N/A | A.P.D. Deason |
Internet-Draft | Sine Nomine |
Intended status: Informational | March 11, 2011 |
Expires: September 12, 2011 |
Adding a Flexible GetSize RPC Variant to the AFS-3 Volume Service
draft-deason-afs3-getsizev2-02
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 (AFSVolGetSize), 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 12, 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 (RPCs) in the AFSVol package. One of these RPCs, AFSVolDump, 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, AFSVolDumpV2, 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 AFSVolDump RPC, an AFSVolGetSize RPC was provided. However, no analogous RPC exists to determine what the size of a volume dump obtained via AFSVolDumpV2 would be if any flags were specified in the AFSVolDumpV2 call. This document describes a new RPC, AFSVolGetSizeV2, to fill this gap, to allow computation of the sizes of volume dumps generated by AFSVolDumpV2.
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.
The newly-defined RPC AFSVolGetSizeV2 has very similar behavior to the RPCs AFSVolDumpV2 and AFSVolGetSize. 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 AFSVolGetSizeV2 may be better understood.
The AFSVolDumpV2 RPC generates a canonical dump of the contents of a volume associated with a volume transaction. It is identical to the AFSVolDump RPC [AFS3-VVL], except for the addition of the flags parameter.
AFSVolDumpV2(IN afs_int32 fromTrans, IN afs_int32 fromDate, IN afs_int32 flags) split = 65538;
Input arguments:
As with AFSVolDump, the generated volume dump for AFSVolDumpV2 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 AFSVolDump aborts with an error as described in [AFS3-VVL], with the appropriate error code.
The AFSVolGetSize RPC calculates what the size of a volume dump obtained from calling AFSVolDump [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; }; AFSVolGetSize(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 AFSVolDump aborts with an error as described in [AFS3-VVL], with the appropriate error code.
The AFSVolDumpV2 RPC allows the caller to optionally specify a set of 0 or more flags which slightly alter the behavior of the AFSVolDumpV2 call. Only one such flag is currently defined:
One new RPC code is defined for the Volume Service: AFSVolGetSizeV2. Additionally, a new namespace for AFSVolGetSizeV2 flags is defined, and one flag in that namespace is defined.
This behaves exactly the same way as the existing AFSVolGetSize RPC (Section 4.2), except for the addition of the flags argument, which behaves similarly to the flags argument of the existing AFSVolDumpV2 RPC (Section 4.3).
AFSVolGetSizeV2(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 AFSVolDump aborts with an error as described in [AFS3-VVL], with the appropriate error code.
The intention of the AFSVolGetSizeV2 RPC is to provide an extension to the AFSVolGetSize RPC, similar to how AFSVolDumpV2 provided an analogous extension to AFSVolDump. As such, the only defined AFSVolGetSizeV2 flag corresponds to the single existing AFSVolDumpV2 flag, though there is no requirement that every AFSVolGetSizeV2 flag have an AFSVolDumpV2 equivalent, or vice versa.
The results of the AFSVolGetSize and AFSVolGetSizeV2 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 AFSVolGetSize 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 AFSVolGetSize RPC SHOULD also apply to AFSVolGetSizeV2 (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 AFSVolGetSizeV2 RPC detailed above in Section 5.1 by the the AFS-3 Assigned Numbers Registry.
This document also requests that the AFS-3 Assigned Numbers Registry assumes control over the AFSVolGetSizeV2 flags namespace. This document defines one flag in this namespace, AFSVOLGETSIZEV2_OMITDIRS, detailed above in Section 5.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. |