YodelDoc.tioga
Carl Hauser, May 15, 1986 9:39:38 am PDT
YODEL
CEDAR 6.1 — FOR INTERNAL XEROX USE ONLY
Yodel
Manipulating files on Alpine Servers
Bob Hagmann
© Copyright 1984, 1985, 1986 Xerox Corporation. All rights reserved.
Abstract: Yodel is a program that provides a Button-style interface to the remote user commands to the Alpine File Servers, Interim File Servers (IFS), and the workstation file system FS. It allows the user to list, delete, rename, and copy files, as well as changing the file and owner properties for files stored on Alpine File Servers. Yodel also supports some functions (i.e., list, delete, rename and copy) on FS and IFS files. Thus, an IFS file can be copied to an Alpine file via Yodel. There also is an administrator interface for doing such things as adding or removing users, and changing quotas.
Created by: Bob Hagmann <Hagmann.pa>
Maintained by: AlpineImplementors^.pa
Keywords: Alpine, administrator, file, server
XEROX  Xerox Corporation
   Palo Alto Research Center
   3333 Coyote Hill Road
   Palo Alto, California 94304

For Internal Xerox Use Only
1. Introduction
Yodel is an almost complete replacement for the AlpineCmds interface. It uses a Button-style interface similar to Maintain.
We assume that the reader is familiar with Alpine, the IFS servers, FS, and Cedar. At the time this document was prepared, Alpine documentation is available in [Cedar]<Cedar®>Documentation>AlpineDoc.tioga. In the same directory, AlpineInterfaces.tioga is interesting for the programmer wishing to see all the interfaces for Alpine available on the client workstations. For the Walnut user, a description of how to use Walnut (and hence Alpine) is on [Cedar]<Cedar®>Documentation>WalnutDoc.tioga. A paper on Alpine is stored in [indigo]<Alpine>Doc>AlpinePaper.tioga. An old overview is available in [indigo]<Alpine>Doc>EarlyDesign>AlpineOverview.bravo (a Bravo format file).
2. How to get Yodel
If you have done a bringover of /Cedar/CedarChest®/Top/Environment.df into ///Commands, then you are ready to use Yodel (provided ///Commands in in your Search Path).
Otherwise, use the DF software to bringover the public parts of /Indigo/Cedar®/Top/Yodel.df. It would be a good idea to add "Imports [Cedar]<Cedar®>Top>Yodel.df Of >" to your personal df file.
3. How to use Yodel on the display
Enter the "Yodel" command to the commander. A toolbox icon will appear labeled "Yodel". Opening this icon will produce a viewer on the left side of the screen.
Yodel may be put into a checkpoint. You may have multiple instances of Yodel on the desktop at the same time. Don't button ahead for confirm.
Yodel has four levels: User, FileProperties, OwnerProperties, and Administrator. The User level has commands that are the ones a user will use most often: list files, delete files, copy a file, and rename a file. The FileProperties level allows the user to examine and change the properties associated with a single Alpine file (see the Alpine documentation for what the properties mean). The OwnerProperties level allows the properties associated with a single owner (an account on Alpine — equivlanet to a directory on an IFS) to be examined and changed. The Administrator level is meant for wizards and administrators. It can add or remove users, change quotas, and other server administrative functions. FS (files on your local disk) and IFS files can only be used at the user level. One other button of note is the "STOP" button. Bugging this will attempt to stop and cleanup the running operation.
Along with the menus at the top of the viewer, there is a typescript area on the bottom. This provides a log of the actions taken as well as a place to present the output of the commands.
Yodel will (normally) not break any locks in doing its job when running at the User level. This is a feature! If you list your files on Alpine while Walnut has your Walnut.DBLog locked, your Walnut transaction will not be aborted due to Yodel. If you ask it to list a file that has a lock set, the file name will be listed but none of the properties will be shown. This can be overridden at the Administrator level, and ordinary users can set this option.
All commands operate only on the source entry, "Source", except for the copy and rename commands. For the these commands, there is both a source and destination. The true form of an Alpine file name is "[server]<owner>filename!version". The name of the server is a Grapevine RName such as Luther.alpine. All Alpine servers have a name ending in ".alpine". If the server name is left blank, then the local file system, FS, is used. The server may also be an IFS file server such as Ivy or Indigo. If you left bug the Source or Destination buttons, Yodel will cycle through good guesses for reasonable server names (i.e., "[Luther.Alpine]", "[Ebbetts.Alpine]", "[Ivy]", "[Indigo]", "[Cyan]", ""). These are the defaults. You can set your own prefixes in you profile using the Yodel.NamePrefixes profile entry.
The owner or directory used by Yodel is either given explicitly in angle brackets in the Source and Destination menu entry, or it is inferred from the logged in user's name. This inferring works like this: for the local disk, the "" directory is used (i.e., "///"); for an IFS Yodel will strip the Grapevine registry (e.g., ".pa ") — if there is one — from the user name and use it as the directory; and for an Alpine server, the directory (called the owner in alpine parlance) is the user.
The final part of the filename is the filename (including subdirectories, file name base, and extension) and the version. The use of "*" in the filename is supported only for the List and Delete commands (described below), but not in the server name. A null filename is inferred to mean "*" in List. If versions are omitted from filenames, then it defaults to "!*" (i.e. all versions) for "List" and "!L" for delete (i.e., the oldest version).
Hence, some valid Alpine filenames for "List" where the user is ``Hagmann.pa'' are as follows:
[Luther.alpine] -- list files in [Luther.alpine]<Hagmann.pa>*
[Luther.alpine]<> -- list files in [Luther.alpine]<Hagmann.pa>*
[Luther.alpine]<>* -- list files in [Luther.alpine]<Hagmann.pa>*
[Luther.alpine]<Hagmann.pa>* -- list files in [Luther.alpine]<Hagmann.pa>*
[Luther.alpine]<>foo.mesa -- [Luther.alpine]<Hagmann.pa>foo.mesa
[Luther.alpine]<Hagmann.pa>bar.mesa!h -- list the highest version of the file [Luther.alpine]<Hagmann.pa>bar.mesa
[Donner.alpine]<Donahue.pa> -- list files in [Donner.alpine]<Donahue.pa>*
[Ebbetts.alpine]<Swinehart.pa>foo.mesa -- list all versions of file [Ebbetts.alpine]<Swinehart.pa>foo.mesa
[MontBlanc.alpine]<RWeaver.pa>foo*.m* -- list files matching [MontBlanc.alpine]<RWeaver.pa>foo*.m*, no matter what the user is
For an IFS server where the user is again Hagmann.pa, some valid filenames for List are as follows:
"[Ivy]*" -- this is [Ivy]<Hagmann>*
"[Indigo]<Cedar6.0>Top>*.df" -- this is [Indigo]<Cedar6.0>Top>*.df!*
"[Ivy]<>*.mesa!h" -- this is [Ivy]<Hagmann>*.mesa!h
"/Cedar/Cedar6.0/Documentation/*Yodel*!*" -- this is [Cedar]<Cedar6.0>Documentation>*Yodel*!*
For the local disk, some examples are:
"" -- this is []<>*
"*.mesa" -- this is []<>*.mesa
"//Debugger/AM*.bcd" -- this is []<Debugger>AM*.bcd, some files on the Debugger volume on the local disk
"Yodel/YodelDoc.tioga" -- this is []<>Yodel>YodelDoc.tioga
These conventions are an attempt to follow the conventions in the various packages that exist. If your are in doubt what a pattern means, use the List command. It will show you the full GName (an FS term) pattern it thinks you want.
The User level allows you to list, delete, rename and copy files. Selecting the "Options" command pops up an extra menu that displays and allows the changing of the selection of the properties printed when the "List" command is given, and other options for "Delete". "byteLength" and "createTime" are enabled as defaults. Reselecting "Options" will push the extra menu (make it go away). After setting the "Source", pushing the "List" button will list the files matching the pattern. List of files on an Alpine file server will use the options. FS and IFS files will always show byte size and create date, no matter what the options are. Alpine files that match the pattern and which you do not have permission to read the property list, will be omitted from the list. Delete works on a file pattern. Files matching the pattern will be deleted automatically if ``AutoDelete'' is set, otherwise confirmation via the ``Yes'' and ``No'' buttons is required. If a non-zero ``Keep'' is specified (on the Options pup-up buttons), then for all Files matching the pattern, a file will be deleted if it has a version that is more than the ``Keep'' versions less than or equal to the maximim version for the file. The ``Keep'' may be changed by buttoning the ``Keep n versions'' button (left for increase, middle for 1, and right for decrease). Files may be copied among Alpine file servers, the local disk (FS) and IFS servers. The source and destination are either explicit files, or the source is a pattern and the destination is a directory (i.e., the destination ends in a ``>'' or ``/''). Normally the byte length of the file determines how much is copied. For files stored on Alpine servers that have extension "segment", are being copied to an IFS or to the local file system, and have a byte length of zero, then the whole file given by the file size is copied and the byte length set appropriately. The copy from Alpine to an IFS is done in two stages. First, the file is copied to a local file named "///temp/qqqscratch.yodel", then this file is copied to the IFS. After this is done, "///temp/qqqscratch.yodel" is deleted. (FS does not support unnamed files.) "FullCopy" works exactly like "Copy" except for an Alpine to Alpine copy. Here the file is replicated as nearly as possible: the file size is the same, and all the bytes up to the byte length or high water mark, which ever is greater, are copied. File properties are set to be the same as the original file except for "owner" and "stringName".
Example: how to delete with keep of two on your Ivy account with automatic confirmation.
Get ``/Ivy/Hagmann/'' into the Source field.
Click ``Options''
Click ``AutoDelete''
Left click ``Keep 1 versions''. The button becomes ``Keep 2 versions''
Click ``Delete''
The FileProperties level allows the user to examine and change the properties of a particular Alpine file. Only one file is worked on at a time. Enter the file to be used in the menus and push "Examine". The properties will be displayed on the display (provided that you have permission to read them). You can edit any, all or none of them, and when you are pleased with the result, push "Apply" to write them to the server. Access lists are separated by commas and/or spaces. Yodel makes no restrictions on what can be put into a property list provided that Alpine will accept it. Alpine makes certain requirements of the semantics of the property lists (e.g., Alpine always insists that "owner" be on the owner access list, and will silently insert it if it is omitted). Do not change the ``stringName'' unless you know what you are doing.
The OwnerProperties level lets you see and change the default keep and the create access list associated with some owner (user), and to change the read and modify access to the ``root file'' for the owner. The owner modified is given in between "<" and ">" in the "Source" entry (it will default to you). The ``root file'' is the file that keeps the directory information. As such, it is a file as far as Alpine is concerned. However, it has no name as far as the directory system is concerned (actually, its name is ``$$$.btree''). Pushing Get causes the lists to be displayed, and Put writes the new lists to the server. It is a good idea to keep the lists for "createAccess" for the owner, and "modifyAccess" for the root file the same. The user's current quota and how much space is in use can be displayed by pushing Quota.
The Administrator level has only one button of interest to normal users. The "Break Locks" button will change the default of not breaking locks in User level functions, to allow for the breaking of locks if needed. This might cause other transactions to abort (e.g. Walnut's transaction can be aborted).
Other Administrator functions require the user to be an "Alpine Wheel". The first function is to make a new owner via the "CreateOwner" button. This makes a new owner (a directory) on Alpine, and requires the "quota" field to be filled in before pushing the button. The owner created is given in between "<" and ">" in the "Source" entry. "DestroyOwner" removes the owner in the "Source" entry. An owner's quota can be changed via the "WriteQuota" button. (The quota can be read by going to the OwnerProperties level and doing a "Quota". You might have to "Assert Wheel", described below, to do this.) The "ListOwners" command will list all owners, their "spaceInUse" (pages recorded as actually used), and their "quota". (I think that this only needs a read locks on the "owner database", and does not seem to abort other transactions.) At the beginning of the list is the summation of all the "spaceInUse" and "quota". The "ReadStatistics" button will request from the server some statistics about owners, quotas, and spaceInUse. As of this writing, the "total quota", "total space in use" and "volume group size" all look bogus.
The final button on the Administrator level is "Assert Wheel". Access to files and property lists are protected. Normally, only a user with the correct properties can do some function (e.g., you cannot list someone else's files if they have protected them). By setting "Assert Wheel", Yodel will try to do further functions as an Alpine Wheel. Wheels can thus list all files for anyone. Wheels will not automatically use Alpine Wheel privileges at non-Administrator levels unless the "Assert Wheel" button is "on".
4. Errors
The following errors can appear on the typescript:
RPC failure: failurename -- A remote procedure call failed because of the given failurename. It is possible that the server crashed during the command.
Alpine server is busy - please try again later -- The server is up but in some state that you cannot use it (like recovery after a crash, or flooded with transactions).
Alpine Interim Directory: directory is inconsistent -- Internal Alpine checks show that the directory you selected in your command is bad. Find a wizard.
Alpine Interim Directory Error: failurename -- See ErrorType defined in AlpineInterimDirectory.mesa for the meaning of failurename.
Alpine denied access because client is not in the accessList access control list -- You needed to be in the accessList to be able to do the requested action. You also might have be assert being an Alpine Wheel (if you are one). An interesting error is the spaceQuota access control list. Although often a real error, this can also be seen when changing the properties on a file where the size of the file plus your active space in use exceeds your quota. This is an Alpine bug, and the "solution" is to get a bigger quota.
Alpine server has a conflict or timed out a lock - please try again later
Alpine Instance Operation Failed: failurename -- Look up failurename in OperationFailure in AlpineEnvironment.mesa. If during a copy from Alpine you get a nonexistentFilePage, then maybe the byteLength property of the file is bigger than the size of the file (adjusting bytes for pages).
Alpine server reports possible damage -- Find a wizard.
Alpine Instance Unknown Type: type -- Look up type in UnknownType in AlpineEnvironment.mesa.
Alpine Unknown Type: owner -- suspect bad directory, owner or access list name
Alpine Unknown Type: transID -- suspect transaction has aborted or that the server has crashed and restarted
Alpine Statically Invalid error - suspect unreasonable property value or Yodel bug
unbound error- suspect AlpineUserImpls has not been run
Alpine error because <reason> -- Alpine is either down or there is a communications failure; <reason> should describe it more.
FS could not perform operation because <reason> -- FS gave the error <reason>.
Bad pattern in Command because explanation -- the ``Command'' could not be done because the pattern specified in Source was bad
Bad pattern in Source/Destination name for Command because explanation -- the ``Command'' could not be done because the Source or Destination pattern was bad
Delete of pattern NOT done -- MUST have explicit pattern -- Delete requires a pattern
Delete of pattern NOT done -- MUST have all versions ("!*" in the Source name) or Keep 0 versions count -- a nonzero keep means you must have the version pattern be *
Syntax error in input: descriptiveString -- The descriptiveString should indicate that some field was entered incorrectly (e.g., alpha in a numeric field).
The source file has negative length. Copy aborted. -- the byteLength property of an Alpine file, or the byteLength of an IFS or FS file is negative. The file cannot be copied.
Transaction on source server failed to commit - validity of copy is in question -- Do not trust that the copy succeeded.
Transaction on destination server failed to commit - validity of copy is in question -- Do not trust that the copy succeeded. It should have failed if you are writing to the Alpine server, but a server crash would make the fate of the copy unknown.
lock prevents access to file -- Examine or Apply could not acquire a lock. For Apply, no update was done.
Cannot Examine a non-Alpine file
Cannot Apply to a non-Alpine file
Cannot get the quota for a non-Alpine server
Cannot get owner properties for a non-Alpine server
Could not find root file on owner property list -- once any file is created, the root file exists. If there are any files in the directory (owner) specified, consult a wizard.
Lock prevents access to root file - you must lock the root to change properties, and the lock was not available
Cannot put owner properties for a non-Alpine server
Create Owner has no quota specified - the quota field was empty
Create Owner has an invalid owner name to create. Name is <xxx>. - The name given between the "<>" is either empty or has a "*" in it.
Bad Server Name -- server specified for administrative function is not an alpine server
Delete all files in the directory before destroying the owner
Alpine transaction aborted -- owner NOT created - for some reason, the server aborted the transaction to create the owner. If the problem is transient, a second try might create the owner.
Alpine transaction aborted -- owner NOT destroyed - for some reason, the server aborted the transaction to destroy the owner. If the problem is transient, a second try might destroy the owner.
Alpine transaction aborted -- quota NOT changed - for some reason, the server aborted the transaction to change the quota. If the problem is transient, a second try might change the quota.
Alpine transaction aborted -- deletes NOT done - for some reason, the server aborted the transaction to delete the files. If the problem is transient, a second try might delete the files.
Alpine transaction aborted -- filename could NOT be deleted-- delete stopped - for some reason, the server aborted the transaction to delete the file. A retry did not cure the problem. If the problem is transient, a second try might delete the file.
Copy cannot have a pattern in the destination - but a directory is OK - No patterns are allowed in the destination of copies
Copy of a file name pattern only works to a directory - Patterns must have the destination of a directory.
No files match the source pattern - No files copied - No file names matched the pattern for a copy.
For Rename, source Source-server-name and destination Destination-server-name servers must be the same
Rename only works on a single file to a single file