CSL Notebook Topic To Cedar Interest Date March 30, 1984 From Robert Hagmann Location PARC Subject Yodel Organization CSL XEROX Release as /Indigo/Cedar5.1/Yodel/YodelDoc.tioga Came from /ivy/hagmann/Yodel/YodelDoc.tioga Last edited by Bob Hagmann on March 30, 1984 Abstract Yodel is a program that provides a Button-style interface to the remote user commands to the Alpine File Servers. It allows the user to list, delete and copy files, as well as changing the file and owner properties stored in the server. Yodel also supports some functions (i.e., list, delete 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. Introduction Yodel is an almost complete replacement for the AlpineCmds interface. It uses a Button-style interface similar to Maintain. The reader is assumed to be familiar with Alpine, the IFS servers, FS, and Cedar. At the time this document was prepared, Alpine documentation is available in [indigo]Documentation>AlpineDoc.tioga (it is also sent as mail to new Alpine users), and AlpineInterfaces.tioga. For the Walnut user, a description of how to use Alpine is on [indigo]Documentation>WalnutOnAlpineDoc.tioga. A paper on Alpine is stored in [indigo]Doc>AlpinePaper.tioga. An old overview is available in [indigo]Doc>EarlyDesign>AlpineOverview.bravo (a Bravo format file). How to get Yodel Use to DFTool to bringover the public parts of /Indigo/PostCedar5.1/Top/Yodel.df. It would be a good idea to add "Imports [indigo]Top>Yodel.df Of >" to your personal df file. You also should have done a bringover of AlpineUser.df. 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 can be put in a checkpoint. On public machines, this can cause a slight problem since the default "User", discussed below, is established when the "Yodel" command is given. 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 a file, and copy a file. The FileProperties level allows the user to examine and change the properties associated with a given 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) 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 from 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. Common to all levels is the notion of who you are. The "User" line in the menu is the Grapevine RName that Yodel will use when talking to Alpine. If it is blank, the logged in user's name will be used. The password used with this RName will be from the "Password" line (unfortunately echoed in plain text on the display), or the logged in user's password if this is blank. These entries are examined every time you start a command. Hence, for normal use, just leave the User and Password alone and Yodel will use your username and password. 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 entries, "Src Server" and "Src Files", except for the copy command. For the copy command, there is both a source (Src) and destination (Dest) for the copy. The true form of an Alpine file name is "[server]filename". The name of this server (again a Grapevine RName such as Luther.alpine) must be entered in the Server menu entry. 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 Server buttons, Yodel will cycle through good guesses for reasonable server names (i.e., "Luther.alpine", "Ivy", "Indigo", and "" for the local disk). The owner or directory used by Yodel is either given explicitly in angle brackets in the File menu entry, or it is inferred from the "User" menu entry. This inferring works like this: for the local disk, the "" directory is used (i.e., "///"); for an IFS Yodel will strip the ".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 sub-directory and actual file name. File names in the "[]<>>>" form are expected. File names in the "/" form are also accepted, and are converted to their "[]<>>>" equivalents (i.e., a leading "/" becomes a "<", and all other "/" become ">"). The use of "*" in the filename is supported only for the List and Delete commands (described below), but not in the server or Alpine owner names. A null filename is inferred to mean "*". Versions are not supported by Alpine, and are removed from filenames for Alpine files. Versions are supported for FS or IFS files. If versions are omitted from FS and IFS 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 (where the user is Hagmann.pa, and the server is Luther.alpine) for "List" are as follows: "*" -- list files in [Luther.alpine]* "" -- same as "*" "foo.mesa" -- [Luther.alpine]foo.mesa "<>" -- same as "*" "<>bar.mesa!h" -- list file [Luther.alpine]bar.mesa (the !h is ignored) "" -- list files in [Luther.alpine]*, no matter what the user is "foo.mesa" -- list file [Luther.alpine]foo.mesa, no matter what the user is "foo*.m*" -- list files matching [Luther.alpine]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: "*" -- if server is Ivy, then this is [Ivy]* "Top>*.df" -- server is Indigo, this is [Indigo]Top>*.df!* "*.mesa!h" -- If server is Ivy, then this is [Ivy]*.mesa!h "/Cedar/Documentation/*Yodel*!*" -- server is Indigo, this is [Indigo]Documentation>*Yodel*!* "*doc!h" -- if server is Ivy, then this is [Ivy]Yodel>*doc!h For the local disk, some examples are: "" -- this is []<>* "*.mesa" -- this is []<>*.mesa "/Debugger/AM*.bcd" -- this is []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. Note that the (obsolete) "**" convention of the commander is not followed (you always get **), and that the server name is explicitly given in its own entry. 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 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. "byteLength" and "createTime" are enabled as defaults. Reselecting "Options" will push the extra menu (make it go away). After setting the "Src Server" and "Src File", pushing the "List" button will list the file 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 set to be. Alpine files that match the pattern and which you do not have permission to read the property list, will be omitted from the list. Note that all the defaulting above means that a blank "Src File" entry will mean "list my whole account". Delete requires a single confirmation, and works on a file pattern. Files may be copied among Alpine file servers, the local disk (FS) and IFS servers. Normally the byte lenght of the file determines how much is copied. The copy from Alpine to an IFS is done in two stages. First, the file is copied to a local file named "qqqscratch.yodel", then this file is copied to the IFS. After this is done, "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". 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). The OwnerProperties level lets the user see and change the create access list associated with the owner (user), and to change the read and modify access to the root file for the owner. 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. 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 "createAccess" for the owner, and the "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 "Src File" entry. "DestroyOwner" removes the owner in the "Src File" 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 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". 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. 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 Statically Invalid error - suspect unreasonable property value or Yodel bug unbound error- suspect AlpineUserImpls has not been run Alpine error because -- Alpine is either down or there is a communications failure; should describe it more. FS could not perform operation because -- FS gave the error . 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 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 . - The name given between the "<>" is either empty or has a "*" in it. 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. Copy only works on a single file to a single file - No patterns are allowed in copies