CSLNotebookEntryToAlpineusersDateJune7,1983FromMarkBrownandEdTaftLocationPaloAltoSubjectAlpinepublicinterfaces(version9)OrganizationPARC/CSLXEROXReleaseas[Indigo]Documentation>AlpineInterfaces.tiogaDraft[Indigo]Doc>AlpineInterfaces.tiogaLasteditedbyTaft,June7,19835:36pmAbstractThesearethelowest-levelpublicinterfacestotheAlpinefilesystem.ThismemodescribesthefunctionsprovidedbyAlpineatthislevel,andaccompaniestheMesadefinitionsfilesthemselvesindescribingtheinterfacesAlpineEnvironment,AlpineFile,AlpineTransaction,andseveralothers.Seetheendofthismemoforachangehistoryandalistofunfinishedbusiness.1.IntroductionThismemodocumentsthelowest-levelfilesysteminterfacesseenbyAlpineclients.TheAlpineinterfacesareintendedtosupporthigher-levelfacilitiessuchastheCedardatabaseandtheCedarfilesystem,andnottosupportapplication-levelclientsdirectly.Multipleinstancesoftheseinterfacesmaybeimportedbyasingleclient,somerepresentinglocalfilesystemsandothersrepresentingremoteserversthatareaccessedthroughremoteprocedurecalls(RPC).AnAlpinefilesystemconsistsofasinglelog,usedtoimplementatomictransactionsondata,andasetoflogicaldiskvolumescontainingfiles.Alogisstoredondiskforonlinerecoveryfromclient-abortedtransactionsandsoftfailures,andistransferredtoofflinestorageforusebythebackupsystemincaseofhardmediafailures.Avolumemaybequiescedandmovedfromoneservermachinetoanother,orstoredofflineforextendedperiods.TheseinterfacesaretheonlyonesseenbyclientsofanAlpineserver.Thisincludesclientsthatmaysharetheservermachine,suchasadirectoryordatabasesystem.2.OrganizationAlltheinterfacesandotherfilesrequiredbyaclientofAlpinearemadeavailablevia[Indigo]Top>AlpineUser.df.TheprimarydocumentationfortheAlpineinterfacesistheinterfacesourcefilesthemselves,whichareheavilycommented.Thedocumentyouarereadingisintendedprincipallyasahigh-leveloverviewofAlpine'sconceptsandfacilities,thoughitalsocontainsmoredetailedelaborationsonthesemanticsofsomeoftheoperations.(IfyouarereadingthisdocumentinPressform,youwillfindlistingsofthepublicinterfacesattheend.)pîÆïaïî§î ?qî ìï^rîòï^îxqî+¯ï^rî6ï^î9Wî:äqî ìïZ!rîòïZ!î±î!îØî" qî+¯ïZ!sî6ïZ!î9qî ìïV:rîòïV:îxî² î#Üî)qî+¯ïV: rî6ïV:sî:–ïV:î;“ïV:tî{ïN‘qî ìïD–î ôsî¬ïD–ð3qî ìïBésî¬ïBéð*qî ìïA<î Vî¯sî¬ïA<îþîPîÝî#î 2qî ìï>¶sî¬ï>¶î´î îs î!ìî&, î,\î.î0uî5î7pîî@ñ îGáî ìï;g î„îä îî%¸ î,éî8¸î;oî@rî ìï7.î }î×î‰î<îØî îCîgî" î&–î)Hî*lî,¤î.X î5"î:âî>î@‡îD+î ìï5‡î šînîSîþî î¤î"rî&îî-#î0j î7�î9Kî;«î?úîAf pî ìï1Uî È rî ìï-÷î ïîîëî3 î!�î#âî(G î.Zî1]î3Aî7°î<5î>öîCe î ìï,Pî 5îçî‹î� î î%fî(�î*1î,†î0”î3�î6Ÿî9Lî;¡î?¯îBîFØî ìï*©î qî.îJî¦î!ûî'Wî- î2íî4¶î8O î>ˆîAœîCœî ìï)î þî ?î@îpî î!î$eî&åî+ûî.Éî3 î:ñî?¯îDVîG;î ìï'ZîfîžîEîÈî"×î ìï$Ôî CîÌî9î¸î»îxî¥î#”î&Bî)‚î+4î2î6œ î> î@)îCŠîFEîGrî ìï#,î ¯îî î„ îHî"—î$.î&Œî(î,0î.@î19î3€î7Ãî=]î@Î î ìï!… îvî8îîî.îðî e î'kî)$î-’î2Oî4–î7î9î;„î@cîDèîF î ìïÞî ­îòîî[îðîâî!îî#çî)•î,Uî0äî4Sî7î;î@©îB_îGËî ìï6îîtî±îšî ìï°î îSîÄîBîyîÇî"þî%î)zî+Qî-_î2î6„î9»î?=îCŸîF‹î ìï î ‹îêî÷îÓîî³îÝî%®î'rî*wî-’pî ìï×î È rî ìïyî öî îïî^îµî"Zî(¢î+Uî-6î1®î4î9\î³îAdîGáî ìï 5î tî3îêî–î„î îÙî"9î&s î,�î.5î0•ÿ`TVm$hTherearetwolayersofpublicAlpineinterfaces.Theonesinthelowerlayeraretheonesdirectlyexported(remotelyorlocally)byanAlpineinstanceitself.Whenusingtheseinterfaces,theclientprogramisrequiredtointeractdirectlywiththeRPCfacilities,todealwiththecomplexitiesofbindingtomultipleinstancesofthesameinterfaces(whennecessary),andtoexplicitlymanagevariousAlpineobjectssuchastransactionsandopenfiles.ThehigherlayerisathinveneerovertheloweronecalledtheAlpineUserpackage.ItisimplementedbytheAlpineUserImplsconfiguration,whichrunsontheclientmachine.IthidesmostofthecomplexitiesofRPCandbinding,anditprovidesautomaticallymanagedobject-orientedaccesstoalltheoperationsexportedbyanAlpineinstance.MostclientprogramsareexpectedtousetheAlpineUserinterfacesinsteadofthedirectAlpineinterfaces.Nevertheless,thedirectAlpineinterfacesareofinteresttoclientprogrammersbecausetheyalonecontaintheauthoritativedocumentationofthesemanticsoftheAlpineoperations.2.1.AlpineinterfacesAnAlpineinstancedirectlyexportsfourpublicAlpineinterfaces.TheinterfacesAlpineFileandAlpineTransactioncontainalltheoperationsmostclientswillrequire.AlpineOwnerandAlpineVolumeconsistprimarilyofadministrativeoperations,thoughthereareafewthatmayusefullybecalledbyordinaryclients.(Alpineexportsotherinterfacesaswell,buttheyareintendedonlyforadministratorsorwizardsandarenotdocumentedhere.)Additionally,thereisapublicdefinitionsfile,AlpineEnvironment,thatdeclarespublictypes,constants,andotherthingsusedinoneormoreoftheinterfaces.Thesedefinitionsarealsodeclared(indirectly)intheinterfacesthatusethem,somostclientsshouldnotneedtorefertoAlpineEnvironmentdirectly;thus,forexample,AlpineTransaction.TransIDandAlpineFile.TransIDarethesametype,whichisactuallydefinedinAlpineEnvironment.ThisislikewisetrueofSIGNALsandERRORswiththesamenameinmultipleinterfaces;forexample,AlpineFile.UnknownandAlpineOwner.Unknownhavethesamevalue,soenablingonewillalsocatchoccurrencesoftheother.AlpineFileprovidesalloperationsonfilesthemselves,includingcreatinganddeletingfiles,readingandwritingdata,andmanipulatinganyofafixedsetoffileproperties.AlpineTransactioncontainseverythingtodowithtransactions.AnAlpineservermaybeaskedtobethecoordinatorforanewtransactionoraworkerforanexistingone;thisinterfaceincludesoperationsforbothpurposes.AlpineOwnerdealswithadatastructurecalledtheownerdatabase,whosemainpurposeistoprovideaclientrootfileandadministrativecontrolssuchasdiskspaceaccounting.AlpineVolumeprovidesoperationsforinterrogatingand(forqualifiedclients)changingthesetofvolumesinoperationonaserver.Foreachprocedureineachinterface,thelistofSIGNALsandERRORsthattheprocedurecanraiseisgivenasastylizedcommentintroducedby!''immediatelyfollowingthedeclaration.Forsignalsthattakeenumeratedarguments,thepossiblevaluesoftheargumentsaregiven(butareomittedifallthevaluesarepossible).Additionally,RPC.CallFailedcanberaisedduringanyremotecall;seesection3.4.2.2.AlpineUserpackageTheAlpineUserpackageexportsthreemaininterfacesofinteresttoordinaryclients.TheyaredistinguishedfromthedirectAlpineinterfacesinthattheirnamesbeginwithAlp''ratherthanAlpine''.AlpInstancecontainsanoperationforobtainingahandleonaspecificAlpineinstance,localorremote.ItmanagestheinteractionswithRPCanddealswithalltheproblemsofdynamicinstantiationofinterfaces.AlpTransactioncontainsthesameoperationsasAlpineTransactions.However,theoperationthatcreatesanewtransactionreturnsahandleforalocalobjectwhichembodiesboththetransactionitselfandits2rî ìïb)î$î®î‘î²î¢îî"Ï î)†î,•î/ûî1àî4vî8vî<î>�îA3îDšî ìï`‚î‰îžîCî÷îÓî¤î$ î)9î,Îî0Çî4Rî7¼ î>î@_îDî ìï^Úî AîºîRî1îîî!]î$£ î*Hî+ßî.Âî1Æî4 î;Üî=~îB}îDî ìï]3îÇî‰îñîx î«î!â î(Ðî+‘î-H î39î8Wî=(îA·îF]î ìï[Œî š îîÒîDî ìïYî Ðî+î�îîJî9îµî!Úî$Eî(î*Òî.Õî1@ î8žî>Cî?ÆîA= î ìïW_î Äî ÿî‹ î!2î%î(î)õuî,0ïW_î,ËïW_rî/»ïW_î0åïW_î5Ôî7'î:£î=Ûî?pîA¬ î ìïU¸î ªî îÈî;îøîSî ç î)_î/@î8Áî<Ôî>‡î@|îBá î ìïTîÔîûîîÉîšî"Nî&:î,yî.øî4àî6ºî9[î;æ îCe î ìïRiî£î_îÃî¨î2 î!· î*&î,‰î0nî4ø î;&î=}î?:îDîEÏî ìïP îNîkîvî%î"ÿî%Z î-Z î6¼î8pî:Êî@úîB®îE î ìïO vî ìïK¾î �îÐ rî ìïHîî §î”îIî¦î!áî%Mî)ïî.Ý î5Æî9 î?— îFØî ìïGGîlîUîOî¸ î%pî(Öî-%î/Úî5 î=–î@W î ìïEŸîŽî²î‘ î¤ î&Ðî+«î/Zî1Ôî3%î5ìî8áî< îA^îCuîG“î ìïCøî�î:îKî1î!â î(î)Þî-5î/Èî2êî5Oî;î>Iî@˜ î ìïBQî °î¤î[î¯î$ îýî ìï?Ë î8îÇî8îhî¨ î#}î&Dî2õî5Éî;î?QîCC î ìï>$î ›î2îCîwîîÀî|î!î"¸î% î+‰î/ƒ î6Jî8–î;Zî@× îGáî ìï<}î k î´î¡î5î6îî!•î%øî*“î-(î0£î2qî5áî7¯îD î ìï:Õî &î@îîî%˜î(-î49î6jî8¦î<î?EîC0îDxî ìï9.îîÓî9î!oî"÷î(Iî+Iqî-ï9.î-½ï9.rî1‹ï9.î2¯ï9.qî5ƒï9.î6<ï9.rî9”ï9.î:¹ï9.î=ðî@lîDîGáî ìï7‡î_ îüî2îýî+î-¾î<~î?½îBîE�î ìï5ßî °îJîöî¡îmî î$xî&1î(‘î ìï3Z îÈî[îN îÿî!î#ù î+Eî1\î6—î9Qî>—îAàîFØî ìï1²îžîûî³ îî°î!iî"“î&î(-î)æî,P î ìï/-î]î» î!yî#"î%$î(9 î0 î2Yî6Úî:áî=ßî?ËîC›îEDîG/î ìï-† îQî•îÆî» î½î ˆî!¸î&fî(ªî*¡î/²î2Þî5†î;2î@� îGRî ìï+Þî (î ìï)Y î|îî%îXîeî#+î'+î)“î-Éî0Öî4Qî8ˆî<îAYîBÍîD„î ìï'±î îÖîÄî-îå îÑî%î(9î)çî,Õî0Š î ìï%, îîr îî! î)!î+¸î.Nî3ôî8‘î>Nî@ŒîB‰îD!î ìï#…î šîÄîÊîôî ìï ÿî ´îî¡îlîº î!Ôî$Qî&«qî(�ï ÿî) ï ÿrî,íï ÿî.ï ÿqî0æï ÿî1Ÿï ÿrî4øï ÿî6ï ÿî9î;„îB$îDÌîH#î ìïXî ¶îzîºîÄîã î"êî$üî'p î/]î5†î7û î?zîB;îFÁî ìï°î û îœ î¸î-î#…î'Èî)—î, î2Ðî59î9î<î>|îC¨uîEï°îEÏï°rîG/ï°îGžï°î ìï îîb îí î- î)î+Šî-tî1pî5Ûî8vî=î@îBdîFûvî ìï­î � îœrî ìïÝî & îÛî€î¶î#¡î'� î. î0)î5jî7{î=lîCQîG;î ìï6 î/î|îÁî‰îõ î&î'˜î*Lî-yî1£î5Tî8Tîîü î"s î*î,(î.Üî3Íî6—î;%î>Ruî@ÄïSDîA·ïSDîEwî ìïQ�rî?ïQ�î¢ïQ�î(îŽ î"Oî$nî'Í î/ î4âî7M î>ÏîAìîC½î ìïOö î½ î)îîÍî$Üî&�î*—î,?î/>î3[î5î7]î;cî<Éî@¤îB¤îDþî ìïNN îÏî}îAîÈ î%4î(Oî*®î ìïKÓî ºî6î§î(îëîÒ î$'î&$î'Cî* î1ßî4Œî7¾î9bî>nîAQîE(îFíî ìïJ+ îîî]îêî4 î mî"Ðî&sî)î,"î-àî1yî3�î6î:õî>¸ îH#î ìïH„ î›îî)îÜîÝî"î$Þî([î* î+¸î.î2¾î ìïFîiî¿î�îæî î ‰î#§î%oî)–î,î0® î6òîØ îGÖî ìïAî Uî6îìîî‹î î Œî"Óî&†î(î î0Jî5îî:«î< î?îAîEÚî ìï?kî/îIîî îºî!“î$ î+pî0»î5� î<î=ûîCsîH#î ìï=Äî ·î®î£îgî¥î î$Wvî ìï:tî �rî ìï7²î •îrîOîîauîÄï7²îHï7²îÇ rî&bï7²î'ï7²î(7î)~î5î:Éî>�îA îEåî ìï6 îÓî�î¤î5î"dî(¹î+�î/& î9‰î,îBîG/î ìï0@ î^îÍî î!:î$Àî'Øî2!î3âî9cî;$îA`îCÓî ìï.™ îîåîÐî×î“î%Pî(£î*iî.ûî2nî7½ î>‚î@ îDðîFÁî ìï,ñî •îŒî© îìî!æî$‘ î+¶î1¨î5}î9~î;ºî ìï+J î ìï(Îî lî~î^î\î!Sî'âî)žî+… î3î8Äî=7î@ùîEUî ìï''î <î2îÒî³îÿîžî¹î”î#Òî%|î&—î)> î3 î93î; î=î ìï%€îlî5î@îÜî î"—î%î3ªî9>î;¸îB—îGÖî ìï#Øî bîBîÞîîe î&®î,î-Ëî/�î0Ð î7Ìî:Bî=hîBøuîC©ï#ØrîD ï#Ø î ìï"1uîËï"1rîzï"1î­îÔîAî Èî$Fî*Þî8ÈîîB¶ î ìï¿î «î)î—îÉ î#î'“î+§î0üî6³î9îC î ìïî šîËî„îä îÚ î#[ î ìïœî ‰îÑîøî îîÒî!Þî&Tî(Äî4ƒ î;oî?ŽîCØîFIî ìïõî ´îkî]îî.î î!� î(…î.î0tî4Eî7 îASîBðîFÁî ìïNîQîÉîVî¹î®îêî 6 î&�î+ûî-Öî0Wî6î:»î?WîBîCêî ìï¦îêî˜î÷îS î ìï+î Êîø îîbî"òî( î)Áî.dî1î6hî8'î:î>© îD¬îG“î ìï ƒî9îúî-îßîmîßî«î î$�î) î0mî2qî4Ùî9î>Qî@¹ î ìï Üuî àï Üî Çï Ürîþï Üîaï Üî†îzîîôî!›î% î)î,¯î/^î1Šî5…î9î?vîC§î ìï 5 îºîhîî©î Wî&î)Éî-î/²î4Èî6) î>îAŠ wî)Èïÿ >TVm$<TheimplementationoftheAlpineUserpackageprovidesoneexampleofhowthismaybedone.3.2.ConversationestablishmentCallingImportInterfaceisstrictlyaruntimebindingoperation;itdoesnotgiverisetoanyexplicitcommunicationwiththeserver.BeforecallinganyAlpineprocedure,itisfirstnecessarytoestablishaconversationwiththeservermachine.Theconversationembodiestheauthenticatedidentitiesofboththeclientandtheserver,anditisalsothebasisfor(optional)encryption-basedsecurecommunication.AconversationisestablishedbycallingRPC.StartConversation,passingtheclient'sRNameandpassword(ordinarilyobtainedfromCedar'sUserCredentialsinterface)andtheserver'sRName.StartConversationfirstcommunicateswithaGrapevineauthenticationservertoobtainaconversationkeythatwillbeknownonlytotheclientandserverRPCmachinery,anditassociatesanewly-allocatedRPC.Conversation(whosepurposewillbeexplainedshortly)withthiskey.Thisisallthatisrequiredtocarryonasecure,authenticatedconversationwiththeserver[Needham&Schroeder,1978].ConversationmaintenanceisfacilitatedbythefollowingRPCconvention:ifthefirstargumentofaremoteprocedurecallisoftypeRPC.Conversation,thenRPCwillensurethatthecommunicationbetweenclientandservermachines(forthatcall)isencryptedbythekeycorrespondingtotheConversation.Thus,allproceduresexportedbyAlpineinterfacesrequireaConversationastheirfirstargument.ThisConversationservestwopurposes:itcausesRPCtoencryptthecommunication,asjustexplained;andontheserversideitidentifiestheclientofeachcall.Afewremarksmaybemadeaboutthisorganization.AConversationrepresentsnothingmorethananauthenticatedcommunicationpathbetweenapairofprincipals;thereisnoinherentassociationbetweenconversationsandanythingelse(interfaces,processes,transactions,etc.)SoasingleConversationcanbe(andtypicallywillbe)usedtomakecallstomultipleremoteinterfaces,suchastheAlpineFileandAlpineTransactioninterfacesexportedbyoneAlpineserver.Asingleremoteimplementationcansupportconversationswithmultipleclients,eachidentifiedbyitsownConversation.MultipleclientprogramsonthesamemachinecancommunicatewithagivenAlpineserverusingthesameordifferentConversations,dependingonwhethertheyaremutuallycooperativeorsuspicious.CallingRPC.EndConversationcausestheremoteandlocalRPCstoforgetaboutaconversation(i.e.,aboutanassociationbetweenConversationandconversationkey).AclientthatknowsitisfinishedwithaconversationshouldinvokethistoconserveresourcesintheRPCmachinery.3.3.AlpineUserpackageoperationToaccessAlpineviatheAlpineUserpackage,thefirststepisalwaystocallAlpInstance.Create.TheonlyrequiredargumentisthenameoftheAlpineinstance(orFileStore)tobeaccessed.ThenameLocal.alpine''referstotheAlpineinstanceonthelocalmachine,ifoneexists.Optionalargumentsarethenameandpasswordofthecaller;ordinarilytheseshouldbedefaulted,inwhichcasethecredentialsofthelogged-inuser(obtainedfromUserCredentials)areused.ThesuccessfulresultofthisoperationisanAlpInstance.Handle,whichrefersbothtoaboundsetofinterfacestothatAlpineinstanceandtoanauthenticatedRPCconversation.Thishandlemayinturnbepassedtoseveraloftheproceduresdescribedbelow,eitherforperformingoperationsorforobtainingother,morespecializedhandles.Theobjectreferencedbythehandleisautomaticallymanagedandwillbereclaimedafterallreferencestoitaregone.Thenextstepisusuallytocreateatransaction.AlpTransaction.CreatetakesanAlpInstance.Handle,createsatransactiononthedesignatedAlpineinstanceandreturnsanAlpTransaction.HandlethatdesignatesboththeAlpineinstanceandthetransaction.TheotheroperationsinAlpTransactionalltakeanAlpTransaction.Handleastheirfirstargument.ThismeansthatthoseoperationsaremembersoftheHandle'scluster'',sotheymaybeinvokedwithobjectnotation;forexample,ifhisaHandlethenthe4rî ìïb)î Ä î£î\î» î"î'Pî,ßî/‹î5î6½î9Áîeî ìïQ,î õ îîjîÅî!º î*äî/!î1î5wî6Ò î>üîAÂîDÂîGžî ìïO…îTîOîàî!îÃî\îJî"‰ î)|î,î-M î3Yî4dî>î ìïMÞî“îÕî�îqî±î#»î&Öî)wî,dî/~î0éî2Ùî5§î7î<¢î>PîAÍîCÓîDýî ìïL6 îl îeî€îßî#ìî*žî,5 î3î ìïI¯ îv î¨îB î"Çî$ñî'î-¿î1J î9î:’î=î@&îF~îHeî ìïHîÖî›îiîîîeî+‹î.ôî2“î5�î:)î=:î?Ü î ìïFaî¶îÒîäîLî!±î$Ãî'ìî+Lî-î3Ðî6(î8âî;Ó îE&îG/î ìïD¹ î¿îµîÅ îìî%Èî'äî,Š î2Ôî7¼î9 îA‚îCPîF·î ìïCîuî— îúî î"Áî) î*fî.§î2 î3Áî8¾î;% îE8îFíî ìïAk î¥î]îcîÂîÏî§îý î%ðî(Oî,î-Èî0ùî ìï>ãî ƒî/î{îŠî†îQî =î"ê î+#î,» î5! î;®î@ÏîDmîGžî ìï=< îd îî,î$’î%´î(„î*4 î0ðî4qî5Õî7Òî=D îD î ìï;• î^î î¯îZ î$K î*• î2bî5Ôî7Ïî8îî<Î îEîGžî ìï9íî MîîÞîyîæîÅî!ªî$éî&Èî,rî1J î7ýî;_î=>î?Î îFØî ìï8FîO îgî!î"ùî%’î*î.Wî/Ñî3ªî8> îB îDƒî ìï6Ÿ î_îqîàîsî"› î(Æî*¸î,‰î/ƒ î8-î=ÉîAîG‰î ìï4÷î 3î˜îîv îÑî"Óî#äî'€î+îî/áî3sî5ºî9î:Êî@W î ìï3Pî±î·îîîhî#/ î*ƒî,G î ìï0ÉîÛîî!bî#éî(·î+•î/î3 î4ßî9î=î>b îF�î ìï/"î Æî¯ îŒîó î$Gî&÷ î.èî2Gî3Ìî7„î:Kî>‡î?ÕîA9îFtî ìï-zî  îî‹îî¦î Uî%úî+÷î-¥î0î3a î ìï*óîUîîbîî î î#H î,€î.. î4¼î7Àî:Ðî=îBîDîG/î ìï)Lîøî°îîÅîs vî ìï%íî � îœîèrî ìï#î îî{î©îú î >î%Êî(î*åî-ºî/î3mî5 î7‰îC¬îFuî ìï!tîÞîjî8îúîî!7î#ùî(áî.�î10 î7þî:î î?ÖîAîEšîGÖî ìïO î î°îtîðî3î àî"…î$k î,áî03 î8yî;‰î@îBÿîD£îGžî ìï¨îgî*îÐîžî î .î&nî*èî.éî1; î8‚ î?EîAîCpî ìïî åîz îbîÆî  î$» î+�î-î/áî4iî5× î>LîD*îFãî ìïYî Ýî'îcîS îÕîƒî Úî#-î ìïÒî ûîAî\îþîèîÍî î!g î(ñî7î:¼î<ãî ìï+î¼î. îsîÂîk î#ƒî(Rî-èî0éî5åî8îFÁî ìï ƒ îvî°î î�îÚî"�î$ì î,<î/î2® î9Yî; îD¨îF–î ìï Üî àî=îïî:î"î(šî+¸î0î2Òî6t î=&î?}îEsîG/î ìï 5î¨ îÆîŠî™î�î�î$Îî'èî,î1èî4$î9õuî;Uï 5rî<–ï 5î>î?*îD îG/wî)Èïö›TVm$transactionmaybecommittedby:h.Finish[commit];Alloperationsonfilesrequirefirstthatthefilebeopened.TheproceduresAlpFile.OpenandAlpFile.CreatetakeanAlpTransaction.Handle,alongwithvariousotherarguments,andreturnanAlpFile.HandlethatdesignatestheAlpineinstance,thetransaction,andthefile.TheotheroperationsinAlpFiletakesuchahandleastheirfirstargumentandmaybeinvokedwithobjectnotationasdescribedabove.AlpTransaction.HandlesandAlpFile.HandlesaremanagedautomaticallyinthesensethattheydesignateCedarreclaimableobjects,sonoexplicitfreeingoperationisrequired.However,whensuchanobjectisreclaimedbecausenoreferencestoitexist,butthetransactionoropenfilecorrespondingtoitisstillactive,nochangeoccursinthestateofthattransactionoropenfile(i.e.,itisnotautomaticallyterminatedorclosed).3.4.CallingTheAlpinepublicinterfacesrestrictthemselvestotheprocedurecallsemanticsimposedbyRPC.Inparticular,address-containingargumentsandresultsaredereferencedbyRPC(toasinglelevel)andpassedbyvalue.(ThisiscomplicatedbytheVALUEandRESULTconventions,discussedinsection4.4.)ROPEsandLISTsareflattenedandsentintheirentirety.ExportedvariablesandthetypeREFANYarenotsupported.Procedureargumentsarenotsupportednow,thoughtheymaybeeventually.SIGNALsandERRORsworkacrossremoteinterfacesinthenormalway,withonevariation.Inordertobepassedthroughtotheclient,asignalmustbedefinedintheinterfacethatexportstheprocedureraisingthesignal.SpecialmeasureshavebeentakenintheAlpineimplementationtoensurethatasignalwithagivennameisexportedwiththesamevaluefromeveryinterfacethatcanraiseit.ThesignalRPC.CallFailedmayberaisedbyanyremotecall;itindicatesabreakdownincommunicationorinthebindingwiththeremoteAlpineinstance.Thiswillnotbementionedintheinterfacedescriptionsintheremainderofthisdocument.CallFailedindicatesapersistentfailure(thatis,theRPCmachineryhasalreadytriedveryhardtomakethecallsucceed);soingeneralitisnotappropriatefortheclientsimplytoretrythecall.RecoveryathigherlevelsofclientsoftwaremaysucceedifitreestablishesthebindingtothesameoradifferentAlpineinstance,perhapsafterinterventionbythehumanuser.Nearlyallproceduresinthepublicinterfacesaresafe''intheCedarsense.However,theinterfacesdirectlyexportedfromAlpinearenotdeclaredasCEDARDEFINITIONSbecausethisdeclarationisnotyetsupportedbyRPC;soalltheproceduresareinfactUNSAFEatthepresenttimeandmustbecalledfromwithinTRUSTEDorUNCHECKEDblocks.Ontheotherhand,theAlpineUserpackageinterfacesareCEDARDEFINITIONS,andallproceduresdefinedinthem,withtheexceptionofAlpFile.ReadPagesand.ReadPagesWritePages,areSAFE.3.5.AccesscontrolAccesstofilesandotherobjectsiscontrolledbyaccesscontrollists,whichconsistofGrapevineRNamesthatmaybeindividualsorgroups.Clientmembershipinanaccesscontrollistisdeterminedbyfirstcheckingwhethertheclient'sRNameispresentinthelistandthenconsultingGrapevinetodeterminewhethertheclient'sRNameisamemberofanyofthegroupsinthelist.Eachfilehastwoaccesscontrolliststhatcontrolreadingandmodifyingthatfile.TheseaccesscontrollistsarefilepropertiesthatmaybemanipulatedviatheAlpineFileinterface,describedinsection4.AnaccesscontrollistissimplyalistofRNameswhichareordinarilyGrapevineindividualsorgroups.Thereisaspecialpseudo-RNameWorld'',whichincludesanyauthenticatedclientasamember.Theamountofspaceavailableforstoringaccesscontrollistsisfixedforeachfile.Alpineguaranteesthatthereisenoughroomforanaverageoftwomaximum-lengthRNamesperaccesscontrollist,butdoesnotdictatethedistributionofspaceamongthelists.Eachfilehasanownerproperty,whichisasinglename(usuallybutnotnecessarilyanRName).Aclient5rî ìïb) îèîìîÜî¸î ìï_¢î ìï]î ® îÊî@îœîÔî"î%Xî(&î*ÿî-^î3î6K î=Á îFØî ìï[s îƒîÒîî(î,2î/¢î4¿î8³ î@îCîGžî ìïYÌ î¢îi îðîIî#Èî)gî+¿ î3 î5½î8î:Ðî=¡îA: îGáî ìïX%îìîÜîî$î¢îFî„î"Rî(sî+!î.î0î5:î8Kî<[îAÀîCdî ìïV}î ìïSöîÁînî%¦î'ðî- î6,î7Ðî:&î=»î@€îC†î ìïROî îUîJî îî"åî'‹î-³î/î5î;8î>ìîBîD îH#î ìïP§îOî‰î¨ îBî î!wî%î'±î*) î1=î3î6¤î9& îB5îCüîEjîFîî ìïOîî îšîÈî_î§îÁî!cî$ î*ÿî,¬î0î2Zî5Pî6�î7äî:B îBž î ìïMYî °î¯î—îö î"Õî'Qî,ë î4î5Ëî9Tvî ìïIúî �rî ìïG(î éî•îô îDî û î(î)äî,iî3î5Âî<îAÅîCæîGÀî ìïE� î¥îiî#Cî&&î*¢î-! î5}î7¥î;-î=€î>ÖîBíîFØî ìïCÙî]îeîrîîˆ î!Aî#Hqî%³ïCÙî&~ïCÙrî*ïCÙî*ÂïCÙqî,àïCÙî-´ïCÙrî1×ïCÙî2rïCÙ î9Ðî?æîAŸîFHqî ìïB2rî ýïB2îïB2qîæïB2îŸïB2rîaïB2î~ïB2îæî¶î‚î"zî$<î'—î-î3 î8ïî;»î>/qîASïB2îB'ïB2îDrîGïB2îGÂïB2î ìï@‹î } îhîî Üî#Kî%Üî,pî/çî4·î7ãî;î= qîDï@‹îD¹ï@‹rîH†ï@‹î ìï>ãqî ¥ï>ãî ^ï>ãrî¶ï>ãîÀï>ãî?îMîö î$"î%Ñî(2î,ñî0"î3?î5ì î<î=ÑîA‡îC7îE)î ìï=<î?î î„î·îüîî †î"’î'®î)wî+òî1³î4œî9Œî<îB¤îG/î ìï;•îIî!î-îŽî î#Þî%¦î(î,¿ î6¸î8€î<ÿî?çîA+îE0îHeî ìï9íî  î`îÌî‡î¢îî!î%)î(�î,Dî1êî4¸î7Cî:~î ìï7fî µî‘ î_îTî6î#(uî%ï7fî%Åï7frî'Ÿï7fî(#ï7fî,7î/,î0sî6î70î>=î?Ü î ìï5¿î ”î %îiîcîaî¤î/î"™î("î+ î-¯î0î1Üî8šî:,îî,Ü î5Zî9î:Ãî;ëîA®îD„î ìï î Ãî–înîÉîxî £î%sî(Sî)Üî-xî/Òî3!î6î:£ îA�îD|îH#î ìïcîÂîWî�î]îHîîî† î*"î/·î2î6î:°î=2î? îB¼îEî ìï ¼î K î¶îoî$îªî î ìï 5î Pî«îuîóï 5î£ï 5rîÞï 5î¥ï 5îÂî!Âî#î$:î(î+Çî0åî3Wî5½ î<ˆî>jîDQîEÏwî)Èïý âTVm$6whoseRNamematchesthefile'sownerproperty(orisamemberoftheowner'screatelistseesection3.6)ispermittedtochangethefile'saccesscontrollists.EachAlpinesystemhasaspecialAlpinewheels''accesscontrollistwhoseRNameispartofthefilesystem'sglobalstate.Membershipinthisgrouppermitsunlimitedaccesstofilesandotherobjects,regardlessoftheiraccesscontrollists;additionally,therearesomeadministrativeanddebuggingfunctionsthatcanbeinvokedonlybyAlpinewheels.Topreventaccidentaluseofthisdangerouscapability,theclient'smembershipintheAlpinewheelsgroupisnotnoticeduntilexplicitlyenabled.WheelmembershipisenabledordisabledbycallingAlpineTransaction.AssertAlpineWheel.3.6.OwnerdatabaseConsumptionofdiskspaceinanAlpineserveriscontrolledonthebasisofinformationinanownerdatabase.Anownerissimplyaname(usuallybutnotnecessarilyanRName)associatedwithafixedsetofinformation:adiskspacequota,presentconsumption,rootfileID(seebelow),andtwoaccesscontrollistsspecifyingwhomaycreatefilesforthatowner(i.e.,allocatediskspaceagainsttheowner'squota)andwhomaychangetheownerinformationitself.Forthepurposeofdiskspaceaccounting,severalvolumesonagivenservermaybegroupedintoasinglevolumegroup,whichhasassociatedwithitasingleownerdatabase.Permissiontoallocatespaceonbehalfofanownerappliestoanyvolumeinthegroup.Additionally,whencreatingafile,aclientmayidentifyavolumegroupratherthananindividualvolume,leavingthechoiceofvolumeuptotheserver;thisisdiscussedintheAlpineFilesection.AlsoassociatedwitheachownerisarootfileID,whichisintendedforclientuseinidentifyingadirectoryorotherdatastructureforlocatingallfilesbelongingtothatowner.4.AlpineFileinterfaceTheAlpineFileinterface(andAlpFileintheAlpineUserpackage)includesalloperationsonfiles.ThissectionshouldbereadinconjunctionwithAlpineFile.mesaitself.Beforecallinganyoftheseprocedures,onemustfirststartatransaction,usingoperationsthatwillbepresentedinsection5.4.1.FilesystemorganizationTheprotocoldescribedinsection3bindsaclienttoaspecificAlpineinstance,identifiedbyanRName.EachAlpineinstanceconsistsofalog,usedtoimplementatomictransactions,andsomenumberofvolumes,organizedintovolumegroups.AvolumeisanalogoustoaPilotlogicalvolume'':initsquiescentstateitisaself-containedfilesystem.ThesetofvolumescomposinganAlpineinstancemaychangedynamicallyasvolumesaremountedanddismounted,thoughtherateofchangeisexpectedtobeslow.Afileisasequenceoffixed-sizepagesstoredinasinglevolume.AfileisidentifiedbyaFileID,anditspagesarenumberedconsecutivelyfromzero.Associatedwithafileisafixedsetofpropertiesthatmaybemanipulatedbyseparateoperations.4.2.OpenfilesAclientdesiringtogainaccesstoafilemustfirstOpenit.Openingafileservestwopurposes.First,itdefinesapointatwhichfileaccesscontrolandwhole-filelockingaredone.Second,itassociatesabriefhandle,theOpenFileID,withaconsiderableamountofstatethatisthereafterkeptbytheserverandneednotbesuppliedineachcall.Thatis,anOpenFileIDrepresentsasingleconversation'saccesstoasinglefileunderasingletransaction.NotethatOpenrequirestheclienttosupplyaUniversalFile,whichcontainsbothaVolumeIDandaFileID,eventhoughincurrentPilotafileisuniquelyidentifiedbyaFileIDalone.ThisisbecauseintheforthcomingCedarNucleus(aswellasinfutureversionsofPilot),FileIDswillnotbeuniversallyuniquebutonlyuniquerelativetoaparticularVolumeID.Inanticipationofthis,Alpinenowrequires6rî ìïb!îîCî“îõî=î"mî( î*Jî+¸î,äî2Tî4î6qî;}î?‚îDòî ìï`yî ¢îîYîî°îî Uî$cî)î ìï]úî wîî§î3îuîî$Vî)™î-¾î2ˆî4Ýî9#î>_î?âîBÞîD®îG%î ìï\Rî|î×î˜ îàî!Æî$ î(Úî.î4€î8Æî:­î=Òî@ÂîDšî ìïZ« î1îÎîùîëî‚î ¢ î(iî+×î.î1‡ î:Wî<óîC‘î ìïYî Æî\îXî¥îÊîÑî bî%@î'sî,~ î2öî5wî7;î9èî@‹ îG/î ìïW\îk î1îÁîîlî"Éî&®î'üî*Sî/î2? î8 î=oîA¬ î ìïUµî Xî„îHî·î²îð$vî ìïR`î �îòîrî ìïO™ î�îtîîRîî,î#Ïî'ùî)ƒ î0"î2Fî4Ãî8=î: îA»îC‡uîE•ïO™îFEïO™î ìïMñî rî…ïMñîsïMñîÚîî™îîYî"+î'jî)þî,† î3sî5vî;' îA§îDÔîFî ìïLJî %î û îîaîlî>î"•î'… î0+î36î5¼î8î:êî?åîB¹îE�î ìïJ£î¬îz îþîî î"0î%*î'uî*Pî.Šî1¥î6²î9­î=oîBîD…î ìïHûîGîþîîî¯îî"< î)Æî ìïF|î »î>î¤î€î’îk î$Øî)Œî/î1Gî2”î6lî:œî=Ãî?×îEiîHeî ìïDÕuî ÞïDÕîyïDÕî†rîØïDÕî»ïDÕîÐîL î#Àî&âî(?î)pî-bî1—î4£î8 î?î@ÓîEÚî ìïC-î îOîîî[îîÔî!‡î&‚î(Aî*²î/ î7uî;<î@…îAÀîD“îEÏî ìïA†î öîîBî2î:î Nî#zî%p î+ùî1@î6î8iî<´î>sîCbîE{îG/î ìï?ßîrîîî‰î7î– î#oî ìï=_î P îñî@î¥îî ¨î"î%(î'Æî*{î.½î0]î6Nî8Àî<´î?^îA@ îHeî ìï;¸î¾î‚î!î&îãî î%Lî'<î**î0Šî28î5pî ìï7�î È î°rî ìï4;î Î î±îaîœî!°î#hî%Ò î-/î2õî8cî:] îAîC%îFuî ìï2“î{îéîÍîÙîz î íî#úî.î1¼î6î:uî=î>´îB/ î ìï0ìî ˜îîØîèî îfî" î(½î+‹î.7î0'î6hî8î<³vî ìï-—î �îNîÈ rî ìï*Ðî ¼î#îFîìî�î®î#gî$‰î(Aî)èî+ î/íî4kî: î@6îB*îDî ìï)(î Šî;î´îßîÃuî ï)(î {ï)(rî!Ûï)(î"ãï)(î&Jî(#î/4î3Ú î;Þî>ÀîB~îGÖuî ìï'�rîŒï'�îQï'�î„uîEï'�îàï'�îÎrî ¥ï'�î!iï'�î"Þî'°î)î/Yî0ðî2î51î:$î@ îA·îCzî ìï%Úî >îµîBîŒ îxîî!öî$ïî'-î)î.–î5œî7­î7ï rîC·ï îD&ï îF‹î ìïdî Ý îÌîÇî vî ìïî �î6rî ìïHî }îCî~î1î:îMîî .î"�î& î(çî,¶î.iî4î5Bî7°î;Áî>rîD•îH9î ìï î«îÕîuîîîˆî—î$Kî' î-oî2Cî4˜î8cî=‘î>è îEîF=î ìïùîåuî_ïùîrïùrîhïùî_ïùî”îØ î%àî+î,Øî0$î3 î4’ î:íî>!î@7îB±îFØî ìïRî PîÍîÅî]îîKî5î"ƒî$Oî&G î. î4™î5Êî9½ îBšîF¯îHeî ìïªî ×îAîCîmîX î ìï+î yî^î@î¤îîñî!¶î&>î'~ î0tî4™î:î=fî>¦îE—îHeî ìï ƒîÏî&îêî¨î‚î Ùî"î$�î& î+Õ î2î4'î5aî9ìî>îA3îB¯îGáî ìï Üî ` îCîpîáî î# î$ãî&¦î*ßî0@î2î6;î;Oî>î@šîBŸ î ìï 5î¡î/îVî îöî±î è î'*î.iî0E î7Òî9˜î<žîA1îDBwî)Èïý »TVm$¹thattheclientpresentthecorrectvolumeforthefile,andraisesUnknown[fileID]ifitisincorrect.AFileIDconsistsofboththefileidentifieritself,whichispermanentlyunique,andsomelocationinformation,whichistreatedasahintandissubjecttochangeduringthelifetimeofthefile.OpenreturnsaFileIDwhoselocationhintmaydifferfromthehintintheFileIDthatwaspresented.IftheFileIDsdodiffer,theclientisencouragedtoretaintherevisedFileIDinitsowndatastructuressothatsubsequentOpencallsmaybeperformedmoreefficiently.Theentirefileislockedinthemodespecifiedbythelockargument.Ifthefilecannotbelockedinthatmode,OpeneitherwaitsuntilthelockcanbesetorraisesLockFailed[conflict]immediately,dependingonlock.ifConflict.(ThesemanticsofLockModesarediscussedinsection5.2.)4.3.FilecreationTheCreateprocedurecreatesandopensanewfile.TheinitialsizeofthefileisspecifiedbyinitialSize;clientsareencouragedtocreatefilesoftherequiredsizeratherthangrowingthempiecemeal.Thespaceischargedagainstownerintheownerdatabase;theclientisrequiredtobeamemberofowner'screateaccesscontrollist,andtheallocationmustnotexceedowner'squota.Notethatallocationisconsumedatthemomentafileiscreated;butwhenafileisdeleted,theallocationisnotcreditedwiththefreedpagesuntiltransactioncommittime.ThefileiscreatedwithaPilotFileTypeoftype,andwithPilotattributesimmutable=FALSEandtemporary=FALSE(supportforimmutablefilesisbeingeliminatedfromPilot;andsinceAlpineistransaction-based,thePilottemporaryattributeisnotofanyuse).Allfilepropertiesaresettodefaultvalues;theymaybechangedbymeansoftheproceduresdescribedbelow.4.4.OperationsonopenfilesTheproceduresthataccessthevolatilestateassociatedwithanOpenFileIDarefullydocumentedintheinterface,asaretheDeleteandSetSizeoperations.Whenatransactionterminates,allfilesopenedunderthattransactionareordinarilyclosedautomatically.However,ifthereisacontinuationtransaction(i.e.,continue=TRUEandoutcome=commitinthecalltoAlpineTransaction.Finish)thenthefilesareleftopen.TheReadPagesandWritePagesproceduresaccessafile'sdatainunitsofPageRunssequencesofconsecutivecompletepages.ThePageBufferarguments,whichdesignateblocksofmemoryinthecaller'svirtualaddressspace,deservesomeexplanation.ThetypesVALUEPageBufferandRESULTPageBufferareequivalentfromMesa'spointofview,butaretreateddifferentlybyRPC(thistreatmentisinvokedbythespecialprefixesVALUEandRESULT).AVALUEPageBufferisdereferencedatthetimeofthecall;i.e.,thecontentsofthearraydesignatedbytheDESCRIPTORaresent.ThisisconsistentwithnormalRPCcallsemantics.However,aRESULTPageBufferdesignatesaplacewherearesultistobeputatreturntime.Nodataispassedatcalltime,butablockofdataofthecorrectsizeisreturnedbytheprocedureandstoredinthedesignatedarray.Pagesareordinarilylockedautomaticallyasaside-effectofcallingReadPagesandWritePages,andunlockedbyterminatingthetransaction(seesection5.2fordetails).However,itisoccasionallyusefultolockpagesinadvanceofdoingI/Otothem,inordertobeassuredthatlockingwillbepossible;this7rî ìïb!î ºîîÚî®îî î#‰î%Æî(&î*çî-Ÿî1^î<î=yî>Ïî@; î ìï_šî °îcîšî‹îþî•î 6 î&aî*Mî.’î05 î8fî=žî@�îDXî ìï]ó îïîîªîhî7î�î"†î%^î&êî+´î-ƒî2Lî6Ýî9]î>‰î@bîBâîEÄî ìï\Kî®îçîqî®îóî æî#ùî'Óî+Iî-·î0ªî2gî4Öî9_î<=î>÷ îEžîG/î ìïZ¤îìîóîîxî9î¥ î#úî%©î)–î+öî0©î5%î6Ôî8¯î;´î>º îDüîFÁî ìïXý îîàîïîóîäî#¨î'; î ìïVvî ¿î¦î îpîÐîyîÓî £î&Zî(Puî*ªïVvî+ïVvrî-ŸïVvî.DïVvî4î5˜î7òî:Vî>Ìî@¸îEîFÁî ìïTÏîîêîÚîZî¤îî"î$�î&ƒî(£î*iî.+î:— îBÊî ìïS(uî òïS(î UïS(rîhïS(î¿ïS( î@î’îÇî €î'ÿî*Rî0\î2 î6¦î ìïP¡î qî€î×î?î±î÷ î&œ î-ž î6#î7Îî:+î<‘î>áîDòî ìïNú îßîQî^î î!&î%wî'jî)Àî, î3­î8�î;|î=cîBÉîD»uî ìïMR rî¼ïMRîïMRî³îî*îyî î&“î+Òuî.ÒïMRî/WïMR rî7¢ïMRî9ïMRî=Bî?ßîB“ î ìïK«î ¹î?î,îùîUî×î"äî.‡î1Jî5Wî8}qî:�ïK«î;cïK«rî?kïK«î@ØïK«îBöîEwî ìïJî î©î\îVî‘îîî$”î&Jî'rî,†î.í î5ºî:¸î= îCìîGî ìïH\î©îü î~îCî3î!†î#Í î+Lî-÷î2gî4Ðî8Xî:&î=?î>ªîA¢îEvî ìïFµî Äî4îKî�î[î5î œî$dî)lî+Dî.²î2Þî6 î8&î;â îCîE7îGÖî ìïEî¿îîîâîÒîlî!Õ vî ìïA°î �îNrî ìï>ßî Âî&î§î-îâî"×î$î&ìî)«î,‚î0lî3î4Ìî7*î9’î:üî@¶uîB°ï>ßîCï>ß rîH‘ï>ßî ìï=8î'îq î¼îaîZî ?î!îî$Eî)Ëî,mî0qî3Žî8Ñîî'Îî**î-çî/Oî4Üî6†î8tî9šî?uî@ºï;�îAjï;�rîD/ï;�îD‡ï;�îEŒî ìï9éî ñî›î(î×î. î eî#Åî&1uî*°ï9éî+`ï9érî.%ï9éî.}ï9éî/~î3®î7î9â î@îA|îGöî ìï8Bî kîøîBîÊîVî¸îYî#-î$vî&ÿî(Šî-Öî0U î6´î8@î:Ôî@BîC|îEûî ìï6šî ·îþ îúîúî ìï4î Èî4î¤îqî�î¼îî"åuî$¢ï4î%ï4rî'Šï4î(;ï4 î/¨ î5ªî7©î<¬î?[îBîGžî ìï2l î™î¨îüî î ðî#œî&«î)å uî/îï2lî0Qï2lrî6 ï2lqî7jï2lrî;hï2lî<ï2luî>ï2lî>„ï2lrîCôï2lqîETï2lrî ìï0Åî‰îÝîÚîßîbî!D î( î+žî/uî2Cî5Íî:jî;íîG/î ìï/î Oîî¼îDîÖî«î"hî%Ëî(:î*À î1Tî3Äî5ýî7Èî<�îAQîD~îGžî ìï-vî[îWîšîSî³ î ºî&åvî ìï*î � î’î�îÝrî ìï'Hî Á îÆî‘îœîøî!Éî$÷ î+`î.xî0f î8$î:uî=® îE„îG/î ìï%  îêî˜îëîKî±îhî"1 î ìï#î ôî îû îñîÒî!°î&î*rî-1 î4î6a î<¦î@Ä î ìï!rîîvîúî`î„ îx î&nuî)uï!rî*ï!rrî.iï!rqî/Éï!rrî3Zï!rî4ï!ruî6 ï!rî6¼ï!rrî:åï!rîbîAnîFî ìïYî ƒ îî\î’î'_ î-øî/.î2Îî6òî8(î<î=wî?2îA/îC¼îE`î ìï±î hîÉîÍî7îœî3î½î :î"ºî#âî'¡î)Yî,]î.î0sî5î7®î9î>³î@®îC î ìï î £îÇîuîÔ î¤î ìï ƒî ùî„ îî® î$Yî&?î'  î.qî0bî4ÿî<'î? îFØî ìï ÜîØîÍ î%î} î"rî%8î)Îî,î.:î3Sî9�î:Ñî<6 îCÏîGàî ìï 5î øîÖî—î÷îÃî·î –î"Wî&Lî( î+Ôî-–î/™î4–î7wî<]î?îAîFíwî)Èïöÿ+TVm$ maybeaccomplishedbycallingLockPages.UnlockPagesmaybecalledtoremoveareadlockpriortotheendofthetransaction;itistheclient'sresponsibilitytoensureconsistencybyavoidinganysubsequentupdatesthatdependonthedataformerlyprotectedbythereadlock.UpdateandwritelockscannotberemovedbyUnlockPages;attemptstodosoareignoredwithouterrorindication.4.5.FilepropertiesAssociatedwitheachfileisafixedsetoffileproperties(seeAlpineEnvironment.PropertyandPropertyValuePair).TheseincludetheunderlyingPilottypepropertyandseveraladditionalpropertiesthatareexpectedtobegenerallyuseful:accesscontrollists,bytelength,createtime,stringname,andversion.Filepropertiesarereadandwrittenunderatransaction,justlikefiledata;propertiesmaybeindividuallylockedorbelockedimplicitlybyafilelock.InthecurrentversionofAlpine,allpropertieswiththeexceptionoftheversionaretreatedtogetherwithrespecttolocking.So,forexample,writinganypropertywilllockoutreadsofanypropertyofthesamefilebyanothertransaction.ThebytelengthisaLONGINTEGERassociatedwiththefile.Alpinedoesnotenforceanypropertiesofafile'sbytelength;inparticular,thebytelengthhasnoinherentrelationtothefile'ssize(numberofpages)ortothehighwatermarkpropertydescribedbelow.ThecreatetimeisaSystem.GreenwichMeanTime,whichbyconventionidentifiesthetimeatwhichtheinformationinthefilewascreated.Alpinedoesnotenforceanypropertiesofthecreatetime.Wediscouragetheuseofcreatetimestoidentifyfiles;weprovideversions(below)forthatpurpose.Afilemaycontainpageswhosecontentsareundefined.Forexample,whenafileiscreated,allitspageshaveundefinedcontents;andwhenSetSizeisusedtoincreasethelengthofafile,thenewly-allocatedpageshaveundefinedcontents.Theboundarybetweenthedefinedandundefinedportionsofafileiscalleditshighwatermark.(Precisely,thehighwatermarkisthenumberofpagesofdefinedcontents,orequivalentlythepagenumberofthefirstpagewithundefinedcontents.)Alpinemaintainsthehighwatermarksoastogainanimportantperformanceadvantage:pagewritesbeyondthehighwatermarkareperformedimmediatelyratherthanbeingdeferreduntilthetransactioniscommitted.Thissubstantiallyreducesthenumberofdisktransfersthattheservermustperform;itisintendedtoimprovetheperformanceofsequentialbulktransfers.Thisoptimizationoccursonlywhentheentirefilehasbeenopenedwithanupdateorwritelock.Thehighwatermarkisadvancedautomaticallybypagewritesbeyondtheprevioushighwatermark;itmayalsobeadjustedbycallingWriteProperties.Decreasingthehighwatermarkisawayofdeclaringthatsomeportion(orall)ofafile'scontentsarenolongerinteresting.Notethatchangingthehighwatermark,likealldestructiveupdateoperations,isdeferreduntiltheendofthetransaction.Soforadecreaseinthehighwatermarktohavetheperformancebenefitdescribedabove,thetransactionmustfirstbecommitted.Eachfilehasanowner,whichisasingleOwnerName,andreadandmodifyaccesscontrollists,eachofwhichisalistofRNames.Theseweredescribedinsection3.6.ThestringnameofafileconsistsofatmostmaxStringNameCharscharacters.Alpinedoesnotenforceanypropertiesofthestringname.TheversionofafileisaLONGINTEGERwhosevalueisthenumberofcommittedtransactionsthathavemodifiedthefileinanyway(viaWritePages,SetSize,WriteProperty,etc.)Asingletransactionmayalsoincrementafile'sversionbyaspecifiedamount.Theversionpropertyisprovidedtoallowremotelystoredcopiesoffilestobevalidated;andmultipleincrementingoftheversionpropertyisprovidedtoallowout-of-datereplicastobeupdatedinasingletransaction.Asmentionedabove,theversionpropertyislockedseparatelyfromtheothers.Committingatransactionthathasupdatedafilesetsawritelockonthatfile'sversionpropertyinordertoincrementit.ReadingtheversionpropertywithReadPropertieslocksitinreadmode.UnlockVersionreleasesaread8rî ìïb)î úîõ î‰î�îþ î%. î-hî0vî2qî6rî8+î=uî>Rïb)î>×ïb)rîAaïb)îAÄïb)îDdîGàî ìï`‚î .îÈîcî¥ îýî6î„îÆî#E î+šî-+î1s î8ˆî:fî?ãîBf î ìï^ÚîîÎî¶î»îîî#½î)Ñî+Êî.(î1Aî4�î9xî<-î?©îC$îGžî ìï]3îœî˜ î@îÑî!î#†î%Jî'�î,¨î1´î5& vî ìïYãî �îN rî ìïW! î9îÒî�îiîRîúî"öî%‘uî'ÈïW!î(7ïW!î*š rî1DïW!î1½ïW!î4�îFØî ìïUzîOîlîgî!â î(íuî,OïUzî,¿ïUzrî/PïUzî0ïUzî5î7Ùî<… îC î ìïSÒî Ëî/îýî¼î½îµî#Wî'uî,9î/dî2„î7'î;:î>ÈîB¯îFØî ìïR+î ìïO¯î ° îîSîZîþî�î#Œî$¢ î+âî.pî1î3^î6È î=,î@îAù î ìïNîmîLîXîÙ îî*î oî"ôî&`î(Jî*Åî/ªî4�î6bî;[î=g îCùîG/î ìïLaîî£îèî”îÌîNî$–î'–î,#î-¶î2Åî5î7*î<àuîAwïLaîB'ïLarîCôïLaîD»ïLaî ìïJ¹î —î�îî¤î]îþî™î!Rî#±î'/î)˜î+”î0Ÿ î ìïH>uî ÂïH>î sïH>î¦rîÂïH>î%ïH>î,qîTïH>î ïH>î)rîÑïH>î wïH>î&<î)Uî+²î.rî2öî6$î8—î=î@ îF”îHKî ìïF–î Uîˆî_î0 îáî dî#—î'ôî*Œî,¶î2Sî7�î9Rî;Õî?>îB îGÖî ìïDïî0îôî¢îî(îèî{î$î*@î ìïBsuî ÇïBsî bïBsîÄrîÏïBsî2ïBsî>îkî(ßî,ðî.î î6 î;øî>[îAƒîCîG/uî ìï@Ì rîzï@ÌîÝï@Ìîdîÿî¤îŒî éî%«î)î+Èî0íî3Ê î:}îîØîÌî�î Qî%&î&�î)åî+Ÿî0íî3Yî7žî9cî:™î=fî?Ñî ìï9Zî Èî î¿î–î €î&Æî,Fî.·î3Èî6�î=/îB¤îDnîE©îH#î ìï7³î ïuîÕï7³î’ï7³îòî©rî»ï7³î¢ï7³ î!:î#¦î&×î*£î.Aî/¹î2$î7\î9!î<÷î>¼îCÈî ìï6 î ° îrîÒîîDîýî"]î%5î(|î+–î2$ î ìï3�îˆîÞîTî‘îgî"î#ëî%°î'uî*�î,–î3 î;) îB0îE�î ìï1éîÒî.îPî îœîëî$¬ î,€î0Šî3¬î7sî<ôî@7îB“ î ìï0Aî Y îŒî§ îŒî"�î$îî*î+Õî.Äî4Tî7#î9„î=‘î@úîFÌîH#î ìï.šî»î{îûîm î!ƒî#O î)ãî-& î3î6L î>WîB®îEÚî ìï,óî Kî7î¡îîsîRî mî"]î&ðî(´î,1î ìï*wî Äîéî©î;î§î» î'-î))î,oî0pî5Zî7¹î=Hî@mîD-îH9î ìï(Ðî ýîÖîÔî[îdîÖî( î/6î1£î4Öî8¢îòîAÖîCœî ìï'(î ­î3îî4î�î<îXî‘î$òî'8î)1î-g î4kî7Ôî:•î@dîB·îEÏî ìï%�î ÇîaîA î"î¤ î$šî%õî+iî.Ÿî0îî3•î5=î7Œ î>Ïî@ÅîBñîD î ìï#Úî «îîQî"îÆî…îÜî L î(aî-î3Uî7Àî:0 îA=îDµîGžî ìï"2 î ìï·î dîÓîNuîCï·îôï·rî¹ï·î›ï·î®îîNî#? î+ºuî.wï·î.ûï·rî1€ï·î2&ï·uî4=ï·î5Sï·rî8µï·î9Zï·î<ÈîA€îDŸîGÖî ìïî úîfî�îÍî†î†îˆî!Ùî(î)²î.Oî ìï”uî Óï”î Xï”î±rîeï”î ï”î-îeîÞîíî µî"]î%Èî3y î:Mî>âîB!îD¥î ìïìî � îî½îîòî ìïquî Áïqî \ïqrîRïqî ïqîî.î“îüqî"ïqîÛïqîõrî"œïqî#šïqî&Çî*mî+Õî.1î3Zî5î;ç îCdîF/î ìïÉî½îîpîî©îuî! î% î*¶ î4î7wî8ùî<Ù îCÊîFÂî ìï"îˆîÖîAî-îNîœî#}î)î,î0íî6¬î8=î>3î@îCÔî ìï{îîVîîîÏîÌ î!9î#ýî)‚ î1àî3¥î6î:äî@‹îBîGàî ìïÓî • î²î²îaîQî"«î$Yî%ƒî)n î ìïXî ðî½î î]îî#¦î%î)] î/½î3î5iî9× îAvîB“ î ìï °î ºî/î‰î³îî½îçîeî"^î$dî'2î*xî/@î4Úî6ˆî:=î;ëîBcî ìï 5îhîËî•î3îQ î(ðî,qî-Êî/{î2˜î6É î@;îEHîFtwî)ÈïTVm$llockontheversionproperty.Thisallowsthefiletobeupdatedbyanothertransactionwithoutconflictovertheversion.Notethatifthecurrenttransactionhaslockedtheentirefileinreadmode,thatlockcoverstheversionproperty,soitisuselesstocallUnlockVersion.Forhigherconcurrency,theclientmustlockthefileinintendRead,intendUpdate,orintendWritemodeanduseUnlockVersiontounlocktheversionpropertyafterreadingit.5.TransactionsandlocksAllAlpineactionsarecarriedoutundertransactionsthatensureatomicityandconsistencyofupdatesinthefaceofconcurrentrequestsfrommultipleclients,crashesofserversorclients,etc.TheAlpineTransactioninterfaceprovidesclientaccesstothetransactionfacilities.Briefly,aclientfirstrequeststhatsomeAlpineinstancecreateatransaction;thatinstancesubsequentlyservesasthecoordinatorforthattransaction.IfactionsaretobecarriedoutinotherAlpineinstancesunderthesametransaction,theclientmustcausethoseinstancestobecomeworkersforthattransaction.Readsandwritesareperformedunderthetransaction.ThetransactionmachineryensuresthatotherclientswillnotseethestateofanyoftheAlpineinstancesinapartially-updated(inconsistent)state;thisisdonebysettinglocksonfilesorpartsoffiles,asdiscussedinsection5.2.Eventuallytheclienteithercommitsorabortsthetransaction.Committingcausesallwritesoccurringunderthetransactiontobemadepermanentlyinthestateofthefilesystemandtobemadevisibletoothertransactions.Abortingcausesallthewritestobeabandoned,andmakesthepermanentstatebeasifthosewriteshadneveroccurred.Atransactioncanalsobeabortedbyaserverorclientcrashorbyadetecteddeadlockamongtransactionsattemptingtolockdatainconflictingways.5.1.TransactionmanagementAtransactionisbegunbyaclientcallingAlpineTransaction.CreateonsomeAlpineinstance.ThisreturnsapermanentlyuniquetransactionIDthatmaybepassedtootheroperations.(ProgrammersshouldnotethattheTransIDisaratherbulkyobject,whichiswhyveryfewprocedurestakeTransIDargumentsdirectly.)ATransIDmaybetreatedasacapability,sinceitcontainsenoughbitsofunpredictableinformationtomakeitextremelydifficulttoforge.ThereforeatransactionissharedamongclientsorprivatetotheinitiatoraccordingtowhetherornottheinitiatorhandstheTransIDtootherclients.AlpineenforcesnorestrictionsonwhomaypresentaparticularTransID.IntheAlpineUserpackage,AlpTransaction.CreatereturnsanewAlpTransaction.HandlereferencinganobjectthatholdstheTransID.ThisHandle,beingaCedarREF,isofcoursevalidonlyonthemachinethatcreatedit.Ifclientsonothermachinesneedtoparticipateinthesametransaction,thecallermustextracttheTransIDfromtheobjectandpassittothoseclients.TheymaythencallAlpTransaction.CreateWithTransID,whichcreatesalocalAlpTransaction.Handleforthesametransaction.TheclientmustalsocallCreateWorkeroneachAlpineinstancethatistoparticipateinthetransactionpriortoissuinganyotherrequeststothatinstance.Thiscallinformstheworkeroftheidentityofthetransaction'scoordinator.ItisstandardpracticetocreateatransactionontheAlpineinstancecontainingthedatatobeaccessed,orononesuchinstanceifmultipleserversaretobeaccessed.Toaccomodatethisnormalcase,CreateautomaticallystartsaworkeronthesameAlpineinstanceasthecoordinatorunlessinstructednotto.AclientonaworkstationshouldnotnormallyuseitslocalAlpineinstancetocoordinatetransactionsinvolvingmultipleservers,sinceacrashedcoordinatorcantieupresourcesonotherfilesystems.Itisperfectlyokforaworkstation'sAlpineinstancetocoordinateitsowntransactions,ortoactasaworkerinamultiplefilesystemtransaction,sinceinthesecasestheonlyresourcesthatitcantieupinacrashareitsown.Whentheclienthascompletedperformingthedesiredoperations,itshouldcallFinishtoterminatethe9rî ìïb)î íîüîdî4î/îRî#ˆî%ðî(aî*î,î1tî3xî8Œ î?�îD¤î ìï`‚î î€î­î1î î{îèî#¿ î*Èî-Kî1¾î4+î8$î:›îfîC—îF·î ìïPÊîbîî —î$Wî(eî*î,r î3n î ìïNNîÒîîÎî¯îîèî"„î'î,iî0tî1§ î9%î;üîAR î ìïL§î îËuî=ïL§îØïL§ rî{ïL§îôïL§îÊî« î&î'¤î,Sî.¹î0zî2}î7,î9³î;tî?%îC½î ìïKî çî@î¶ îî[î!î$tî(#î+ºî1…î3,uî8;ïKî9"ïKrî=>ïKî=¸ïKî?tîB; î ìïH„î8îîDîÀî­î"Ùî%a î,Þî/ß î7î=æîBøîEðî ìïFÝî&îÆî0îyîÎîôî¢î8î æî#;î'¶î-}î/ î0?î:æ îCNîFíî ìïE5î XîÊîÆuî,ïE5î�ïE5rîªïE5îeïE5î°îžîaî"Êî$‚î'Èî)vî/€î1.î5Ëî ìïBº îìîrîXuîjïBºîïBºrî ãïBºî!ŸïBºuî"ÍïBºî#~ïBºrî'ïBºî'pïBºî)‡ î1 î8Òî=2î?HîCpî ìïAî ÷î_ îcîîîÛ î&Üî(“î*úî.4î/õî2]î4Îî9Rî<î=Èî?ÁîC‰îGàî ìï?kî ‡ îZî1îfî!Rî#¬î'ªî)Tî+@ î2¥î5Xî9Œî;çîBÈîEõîGáî ìï=Äî Mîíîïî§îqî{î! î(î*�î-\î/Mî4Yî6Uî7î;Œî=PîAîD¥îFiîHeî ìï<îgî9î¿ î!? î(%î)Ôî,Ìî/Ñî1 î8Dvî ìï8Íî � î! rî ìï6 î e îNî§îÃî«îÂîoî"Áî2]î4Pî7ÐîÆî@¨îEcîG/î ìï+JîîVîþîEîî qî"Êî'úî+öî.Oî3Ìî5tî9 î=¢îB!îG‰î ìï)£ îèîîîòîöîÊîô î%)î ìï''î Åî. îŠî.î)î-Ôî/î1ÿî@c îGžî ìï%€î îßîšîÿîáî î%?î)î*?qî.]ï%€î/1ï%€rî0£ï%€î1†ï%€î2÷î4¶î9 îî)Bî,aî:•î<¬î>åîB; î ìïî Îî˜î îáîu î"jî$zî'µî,Eî1œî4tî5êî7¢ î>rî@*îB“ î ìïgî pî0îÒî„î5îŸî!_î$?î)õî-!î/½î4äî7Tî< î=×î@HîEeîG/î ìï¿ îÄ î ìïDî iî Ûî|î¤îXîaî� î%’î'žî*î.�î3ã î:¢î=î@îAÆîC½î ìïœî ¼î Îî†îÃîîŠî î$¬î' î(Æî*Ãî0¡î2Ô î:`î=îA×îE)î ìïõ îaî÷î"îÊîÒî 4î#³î(:î-‰î/9î1› î8ûî= îC„îEûîHî ìïNî æî&îŠ î-îãî ’î&�î)Lî+`î.àî3 î9(î; îB î ìï¦î î™î˜î î`î$v î+ëî.Œî0�î2Åî8Ùî:õî>ªîA)îF–îH#î ìïÿîŸî�îÜî îQî!Ùî')î(Ú î/¡î1~î4„ î<_î>%î?ÖîB îC¼îDèî ìïXî Ÿî ÍîKî¹î9 î ’î$ î%¼î)Iî,Áî/%î2Cî8Eî;îÁîCÆîEüî ìï]3î ‹îåîkîWîPî#zî ìïZ· îÛ î€îø î% î&» î-Üî2}î9‡î< îB…îGÖî ìïY î®îQîîâî U î'œî)hî+Ü î3z î:‰ îBîDîFŠî ìïWiî`îËî% îs î%fî(/î*Àî,÷î0 î4åî6˜î9¸î;®î=»îC‘î ìïUÁî £î÷î¶îdîUî` î$¤î)¥î.šî2î7�î9Iî ìïSFî î‘î�îîÝî#îi î&€î+¨î/Åî2@î5�î8wî;î>€ îE£î ìïQžî ¯î;î_î¶îÏîîÜuî ÌïQžî!gïQžrî%ÀïQžqî' ïQžrî*”ïQžî+9ïQžî- î/U î6&î:ûuî=ëïQžî>›ïQžrîBÄïQžîD%ïQžî ìïO÷î î îîˆîXîî!#î#Šî'î)øî,¶î0;î2• î9ðî=î>„î?´ îF·î ìïNPî •îfîsî˜î­î�îD î#íî&¶î*Eî-�î/Fî12î5Êî;)î<Òî=÷îAÝîFTî ìïL¨î ¹îYî�î!)î%Úî(7î-¹î/ôî2Rî5> î<�î?FîA£îD î ìïKî”îŠî"Uî&óî)_î,[î1ìî3§î6î;,î@qîBBîD¯î ìïIZîvî ìïF î �îîÅrî ìïCHî î‰î¾î î©î…î!Jî%Ûî(Pî,Rî.› î62î;–î>XîC îG;î ìïA î"îîµ î ìï?%î 'îãî7îä îCî Úî!ì î(mî*î-î/±î3 î9®î;�î>sîAîDšî ìï=} îîÀîOîzîØî$¢î'î+û î2î5Fî9`î?`îBá î ìï;ÖîîîIî…îºîÛî Zî%\î' î*Åî/oî2�î6Mî:‰î?îA©îDÑî ìï:/î äî6î¥îî¼î î…uî%ï:/î%·ï:/rî'�ï:/î(7ï:/î*î,kî/Vî4âî9Éî;øî>JîC~îE)î ìï8‡ îv î1î ìï6 îîõîî@îîîî‚îÉî!5î'î(^î)Êî,£î1î2·î6Jî:xî<î? îC-îF–î ìï4dî Gî[îîsîZîî’î#¼î'lî(‘î-Jî1Sî4¶î7«î:î>î?ÃîDRîFî ìï2½îîgîîžî^îÖî"§î'î(8î+Nî/Wî0¾î7qî;…î?5îA�îEKî ìï1î °î üî�î¸îkîÀîÏî#5î%‹î(þ î/ïî2œî6ìî8�î:wî?WîBîFãî ìï/nî ÝîvîN îî wî% î'Áî+?î/™î2Dî45î:tî ìï,óî ¤îçîùî~î´îÔîÝîî"+î%Ø î-Eî.´î1yî6“î;3î>àî@²îDÙîFîî ìï+Kî œ î©îîr î!î&›î) î,î.œ î5öî9}î<]î?ëîE�î ìï)¤î þuî|ï)¤î,ï)¤rîÒï)¤îAï)¤ îÄ î%jî,&î0cî2» î9¯îŠî@âîDWî ìï'ý îäî¹îfî‹îî"kî(&î,' î2¾ î;Õî>ùîA�îGÀî ìï&U î‡ î{î˜îTî ç î'üî*´î,²î3„î5@î7=î<ðî@²îB!îE>îGŸî ìï$®î Ðî‰îèîe î ìï"2î ä îÞîlî î”î#´î%Ïî(Nî-çuî3ï"2rî3Œï"2uî4ˆï"2rî5#ï"2î6‚uî:ºï"2rî;âï"2î=mî>¶îAÏîEÄî ìï ‹îFuîï ‹rîNï ‹îÒîJî9î î î%7î(Hî*gî,ßî0uî4§î6»î;ß îCmîDÜqî ìïärî ‚ïäî åïäuîâïärîëïäîïîßîü îÔqî!‹ïäî"Dïärî%“ïäî%öïäuî&ôïärî'üïäî+î-uî/fî1ƒuî4Êïärî5éïäî8^î;»uî˜ïhîBïÀ î˜ïWþ„rî˜ïÀîïWþ¥îïÀîÁïWþ¥îÁïÀî gïWþÇî gïÀî(îïWþÇî(îïÀî)´ïWþÇî)´ïÀî*{ïWþÇî*{ïÀî+BïWþ¥î+BïÀî+èïWþoî+èïÀî,WïWþ¥î,WïÀî3CïWþþî3CïÀî4AïWþ„î4AïÀî4ÅïWþcî4ÅïÀî5(ïWþoî5(ïÀî5—ïWþ¥î5—ïÀîBïqî˜ïî(îïî3CïrîBïqqî˜ïqî(îïqî3CïqrîBïÉqî˜ïÉî(îïÉî3CïÉrî ìïNî µ î�îáîíî•î"î%rî&Ï î/Tî4¿î9xî;-î<·î@îB¡îF”î ìï¦î ƒî[î î îî4î"Pî#Þ î*˜î+äî/!î2<î3÷î6yî9Áî;:î<Èî?îAªîC8î ìïÿ îQîî8î¨î“îî pî#ˆî%Ú î,Èî.'î4ôî9nî:Ìî>sîA î ìïXî ¦îî�î¥îî} î&?î)Oî+Kî/éî2€î7Ãî9|î>qîA—îDCî ìï °î ãîd î­î îŸî!£î&lî+?î.†î0vî3‘î7î:Tî=±î ìï 5î o îbuî\ï 5îï 5rîtï 5î0ï 5îîÆî —î#’î'î(ø î/³î0ÿî2¤î3Åî9î<[î?lîDAwî)eïý cTVm$¤givenbyreadDoc>directory.Inthefilenames,*''standsforanumber;successivereleasesofadocumentareassignedthenexthighernumber.11rî ìïb)î ¹îÍîîMîøîEî3î!eî"éî)Æ î2ªî4ÿî:éî>¶î@¿îDðîFtî ìï`‚î ¿îîÎî[î î§ î&î(Cî-î/Ãî57î8Wî:cî?«îAÂîE[îG“î ìï^Úî ‹ î ìï\Kî Vî¸î,îÓî�îßîMî#Gî%¿î(Òî*Ñî/Dî1î4¢î8ßî:±î>ŠîAP îGÖî ìïZ¤î Fî©î§î’ î"îÙî%*î'„î+jî-Î î5¬î:¦î=îBîC¸îG/î ìïXýîîzîåîd îóî!}î$¯î(î*šî,—î1Žî6 î9Iî?îA’îCþîFíî ìïWUî _î Æ î-îeî%îÿî!Dî$|î&íî,„î/B î6Êî<ÙîA}îDÉîG/î ìïU®î €îLî îŒî Lî!­î'2î)dî-¿î0¹î4Mî5ñî;¡îAt î ìïSî Ó îMîUî¾î î ¢î%›î(bî,Fî.öî0³î2ÿî6­î;Óî?kîB÷ î ìïQwî î„ î1î _î$ºî' î)î.kî1‘î3ñ î:\î ìïNèîîÕî‘î½î*î€î1î%î!� î)&î*× î1ˆî3Þ î:ýî=`îAOîC»îE)î ìïMAî •î ºuîgïMAîÊïMArîïMAî=ïMAîäî­î#"î%|î+>î.î1sî7¤î;(î?}îAÌ î ìïKš îIîN î î!™uî#×ïKšî$žïKšrî%œïKšî&ÆïKš uî/³ïKšrî0zïKšî1¥uî5pïKšrî6ïKšqî7ÙïKšî8“ïKšrî;ïKšî<0ïKšî>ÿ uîGëïKšrîH²ïKšuî ìïIòrî ‘ïIòî õïIòuîvïIòrî=ïIòuîAïIòrîçïIòîöîÕuîöïIòrî½ïIòîÁuî"ŒïIòrî#2ïIòuî*ïIòrî*ÞïIòuî+âïIòrî,‡ïIòî-îî10î6Aî<\î>=îD î ìïHKî[î¡îYîÂî?îØî7î"]î$¼î'%î(‘î ìïE¼î lî Z îÙîî-î"óî$î'î,fî/Šî1çî4‘î9™î;’î=€ îG%î ìïDî Dî©îîîŠ îî%£î(Kî-ªî0<î1ûî6Qî8Hî={î?}îAìîEpîG“î ìïBmî ‹ î ìï?Þ î>îÔî4 î /î$–î0î2Ôî=�îA· î ìï>7î îƒîŽîîäîîî"Mî(Iî*î/� î6/ î<üîCîGËî ìï<�î wîYî"Mqî.úï<�î/³ï<�rî2˜ï<�î3‚ï<�î8±î:î;�î>îB5îDîEãîGžqî ìï:èrî ‚ï:èî ûï:èî„î²î£îÍ îßî%±î'Iî,Iî ìï8Yî ^ îöî'îuîNï8Yî±ï8Yrî%8ï8Yî%Ýï8Yî+¤î/›î4zî6Äî:nî<î@�îBÖîE¹î ìï6²î ½î Ðî.îîŠîÄî•î¨î"Šî$î%Zî*fî/Gî1Éî6”î:äî<¿î@kîG;î ìï5 î>îoî¾ îŸuî ï5 î xï5 rî&�ï5 î&çï5 î*°î,î.lî1çî4î6j î<ßî>(î?‡îD…îG/î ìï3cî”îÐî ìï0Ôî ‚î öîî” î€î…î!·uî$‚ï0Ôî$æï0Ôrî*þï0Ôî+Uï0Ôî52î7¥î=ä îEÐî ìï/-î ÐîÇî.î$Ýî'Áî.pî2rî6>î9"î< î?°îB%îEî ìï-…îîÝîîî"²î$1î'¸î)!î*Hî/Áî5�î:î<½î>~îB î ìï+Þ îûîÓîÛîcî î Oî"1î&/î)î*æî-n î5î6¬ î?HîDÔîG´î ìï*7îîîî~îðpî ìï%úî Èî˜ rî ìï"� î‘îîŽ î!Zî#´î)¹î+î0î5î9NîDocumentation>LupineUsersGuide.press,July1982.[Needham&Schroeder,1978]RogerM.NeedhamandMichaelD.Schroeder,Usingencryptionforauthenticationinlargenetworksofcomputers'',CommunicationsoftheACM,vol.21no.12,December1978.ChangehistoryVersion9;June7,19835:36pm.ConverttoTiogaformat.Removeallexcerptsfromthepublicinterfaces;theinterfacesthemselvesarenowtheprimarydocumentation.BringRPCdescriptionup-to-date.DocumenttheAlpineUserpackage.Version8;October13,19815:29PM.AddAlpineFile.Close,LockPages,UnlockPages.FinishingatransactionwithcommitAndContinuenowreturnsanewTransIDratherthanpermittingadditionaloperationsundertheoldtransaction.SubstantiallysimplifyinterfacetoRPCruntimemachinery.Version7;September21,19818:38AM.FurtherrefinetoconformwithRPCdesign.Addhighwatermarkmechanism.Deletetheindividualpropertyread/writeprocedures.Documentsemanticsoflocks.ChangeLockModetoLockOption.Changetoread/writeownerentryinsamestyleasfileproperties.Version6;September14,19818:46AM.Changestyleofthismemotomakeitservebetterasclientprogrammer'sdocumentationfortheFileStorepublicinterface;removeinternaldetails(implementationstrategiesandthelike)toaseparatememo,FileStoreinterfaceinternals''.SplittheformerFileStoreinterfaceintofourpieces:AlpineEnvironment,AlpineAccess,AlpineFile,andAlpineTransaction.BringconversationinitiationandauthenticationintoconformitywiththecurrentRPCdesign.Makeafirstcutatspecifyingthesignals.Version5;August25,198112:41PM.Makeinterfacehandle-oriented,sinceRPCrequiresit;seeHandle,Create,Destroy.AHandlecorrespondstoaclienttalkingtoaserver,nottoavolumeoramachine;someprocedurestakeavolume(orvolumegroup)parameter.MaketheidentificationFileStore=log,andintroduceaseparatenotionoflogicaldiskvolumeandvolumegroup.Addno-loggingoptiontoOpen/CreateFile;thistakestheplaceofnoTransaction,sinceithandlestheonesituationinwhichwecanseethatclientswillwanttogiveuprecoverytoreducethesizeofthelog(large-scalereplicationoffiles,wherethehomecopyiskeptloggedandothercopiesareunlogged.)OpenFileID->OpenFileID,AccessListID->AccessList(alistofRNames.)Addsectiononownerdatabase(CreateOwner,...,DestroyOwner),andexpandedfilepropertiessectiontoincludeallpropertieswenowplantosupport.Version4;May29,19815:36PM.Introducednotionoffileowner,whoischarged/creditedforpagesused/releasedinCreate/DeleteFileandSetLength.Version3;May15,198111:02AM.IntroducedtypesOpenFileID,ClientID,AccessListID,....AddednoTransaction.Moredetailonfileopeningandcreation;supportfilecreatewithandwithoutanexternallysuppliedID(usedtobeonlywith.)Length->ByteLengththroughout.List-orientedfilepropertyoperations.Muchmoreworkrequiredonpropertyinterface,includinglockingissues.Version2;March12,198111:22AM.AddedmoredetailtotheFiles''section,includingprocedurestomanipulatefileattributes.MadelockmodesconsistentwithLockDesign0.MademinorchangestoTransactionsection:RegisterWorkertakesarestartID''toallowunilateralabortofworker;FinishTransactionandFinishWorkertakearequiredOutcomethatmaybecommitAndContinueorcommitAndTerminate;expandedcommentsonTransactionsectionoperations.Version1;February25,19813:54PM.Lockstuffmovedout(toLockConcepts0.bravo,12rî ®ïb)îäîMîZ î3î ®ï_¤îäîÝîv î!î ®ï] îPîö î˜î ìï[*îpî ®ïY~î¤îYîîQî!ìî'dî+9î1Ñ î9©î;Wî?ýîF€î ®ïW×î\î|ð4î6†î9î ìïUâîžî6 îî ®ïT6îî™î4î7î"Ðî% î,=î1; î8aî:ê îD.îF(î ®ïRŽîŠîC uîúïRŽîøïRŽ î&Iî'ìî*8rî-ˆïRŽî.dïRŽî1î2ôî5Rî7�î>3pî ìïN_îÝrî ìïKîáînî î î1î îÌî"øî$†î(Eî,÷î2Eî4î9Lî<“î>ÒîBë î ìïI[î ® î; îŽîDî «î#mî) î3'î7Tî; îBˆ î ìïG´î±î îcî ìïE/î4îî–îî8î zî#°î&þî2 î9Z îBîHeî ìïCˆ î'î‚î!Üî%î*î+{î.¨î4lî8¹î< îC î ìïAà îšîœîüîf î ¹ î(ßî.,î3Òî5€î8Üî> î ìï?[îî¸î£îåî¸î Ëî$ î)$î-î.Òî4Zî7zî:Ûî?†îB¥îEÏî ìï=´î – î6î³î) î"Âî(s î/N î6Ãî=ŸîCêîEºî ìï< î÷îòî  î£î$®î&\ î- î1Nî4âî6�î: î==î>ëîAU î ìï9ˆîîÏîÆîîþî!î$gî)‚î,Ãî.Œî1>î5†î7Eî; îîîC�î ìï4’î£îŒî¢îDî' î/Û î7î9æîEÅî ìï2ê îà î¸îk î#_î&3 î-5î0Kî2¦î7kî:Ãî?eîCAîDfîG:î ìï1Cî … îûî[î ìï.¾î:î îîŒîÈî ¿î#ûî(î-òî8mî<î?®îE3îG;î ìï-îKî/îÚî�î ” î(\î*1î+‚î/iî4!î5öuî7Gï-î7Ëï-rî:¥ï-î;¨ï-î>Dî@îAjîFzîHeî ìï+oîÕîT îFî+î@î#î%=î*î.y î5>î9 î;T îC�î ìï)Èî Ãîaî î'îCî�î!Úî#…î'Ðî*±î/Œî25î7î;]î>i îE4î ìï(!î �î®îDî·î î"•î$D î-ˆî0ïî2;î7;î9�î<1îAÁîCdîGgî ìï&yî yîÎî�îãî�îîîžî �î"¡î(1î)áî._î0Àî3mî5'î7ˆî9Ý îA îGÖî ìï$Òî 3îLî­î„î×îDî`î#Ñî&Šî**î.Zî0® î8 î?ÆîAu î ìï#+ îtîY î>îî�î!}î(èî,:î1î3Kî7¯î=� îFñîH²î ìï!ƒ îëî¢îãîL î%Äî*`î,î0îî2Þ î9Uî;}î>�îA›îCIî ìïþîî»îðî3î îî ' î'?î+Ÿî-^î/Íî4Yî7cî8ÔîC�îEÄî ìïW î¡îOî™î"Q î ìïÒîî·îêî,îýîÀî þ î(î+­ î3Êî9ì îBšîD(îEî ìï+ îîµî^îBî‰î#´î&Iî+âî0Ìî3î6ôî9ìî<‚îAkîC9 î ìïƒî½î&îî î=î˜î"‰î'ˆî)w î1" î8ä îAJîCôî ìïÜ îñîôî‡îî!”î#šî)5 î/3î5Gî:î ìïWî îÆî8î�îbî-î"rî'î*£î.zî04î2Ÿî7gîXîB’îGàî ìï îóî› î"î&%î'àî-]î0Çî3î7B î=óîB$îDoî ìïaîqîz î!”î$ßî&Zî1©î4Éî8î:`îGËî ìï ºîîZî$çî&í î.bî2ÿ î ìï 5î·îîÐîÄî ûî$Àî(yî,­î0•î5Ñî8ýî;Ûwî)eïö -TVm$ÃLockDesign0.bravo.)Sierra->Alpine.Version0;February19,19813:16PM.InterfacenamechangedfromBFS''.Weareattemptingtoerasethedistinctionbetweentheregularinterfaceandonthewire''.ThevolatilestructuresCoordinator'',Worker'',andFile''havedisappeared.ThetypeLockIDhasbeendefined,followingEdTaft'ssuggestion.UnfinishedbusinessLog/recoveryinterface.Cacheregistration(atwhatlevelshouldthisbedone?)Lockinterface(noconceptualdifficulty,detailscanbedeferredtoimplementationtime.)ContentIDproperty?Interfacestobackupandarchivesystems.IndefinitelydeferredbusinessValidationofremotepagecaches(throughahistorydatabasethatiscoordinatedwithfilepageupdates.)Transactionsavepoints?13rî ìïb!îFîHîöî ìï_¦î$îôîîtîƒî ´î#Úî)Ãî-¥î36î6Àî;µî>bî@Ø îGàî ìï]þî =îq îÿîBîvî!üî'vî*î,�î.Àî2«î5Xî9ÿ î@î ìï\W îîî¡î> î$Žî'¼î+#î0šî3eî7î<ÇîC0îE¹î ìïZ° pî ìïV� î/rî ìïS? î~ î ìïPÄî îMî_î¼îî"~î%î'î ìïNIî iîî� îu î"¶î'î)�î+�î1î2´ î<“î ìïKÎîÝî ìïIS î7îæîºîrî;pî ìïE0 îŒîçrî ìïAâ î‘îBîàîîfî$î%/î)¸î/Kî2î3s î:öî>î@iîC§î ìï?g îaîdwî)eïÿ�TVm$úAlpineEnvironment.mesaCommondefinitionsforpublicAlpineinterfacesLasteditedby:TaftonApril8,19835:02pmMBrownonJanuary25,19833:21pmKollingonMay11,198312:01pmDIRECTORYEnvironmentUSING[wordsPerPage,logWordsPerPage,bytesPerPage,logBytesPerPage],FileUSING[maxPagesPerFile,Type],RopeUSING[ROPE],RPCUSING[Conversation,Principal,ShortROPE],SystemUSING[GreenwichMeanTime,nullID,UniversalID];AlpineEnvironment:DEFINITIONS=BEGINGeneraldefinitionsString:TYPE=Rope.ROPE;Identificationandauthentication(seeRPC.mesaandLupinedocumentationfordetails)Principal:TYPE=RPC.Principal;--aGrapevineindividualFileStore:TYPE=Principal;--anAlpineinstanceRName:TYPE=RPC.ShortROPE;--anarbitraryGrapevineRNameOwnerName:TYPE=RPC.ShortROPE;--anAlpineowner,notnecessarilyanRNameAccessList:TYPE=LISTOFRName;Conversation:TYPE=RPC.Conversation;FilesystemVolOrVolGroupID:TYPE[SIZE[System.UniversalID]];VolumeID:TYPE=RECORD[VolOrVolGroupID];VolumeGroupID:TYPE=RECORD[VolOrVolGroupID];nullVolumeID:VolumeID=LOOPHOLE[System.nullID];--theIDofnovolumenullVolumeGroupID:VolumeGroupID=LOOPHOLE[System.nullID];--theIDofnovolumegroupFileID:TYPE[SIZE[System.UniversalID]];--volume-relativeIDofafilenullFileID:FileID=LOOPHOLE[System.nullID];--theIDofnofileUniversalFile:TYPE=RECORD[--globallypermanentlyuniqueidentificationofafilevolumeID:VolumeID,fileID:FileID];nullUniversalFile:UniversalFile=[volumeID:nullVolumeID,fileID:nullFileID];PageNumber:TYPE=LONGINTEGER;--shouldbe[0..maxPagesPerFile]PageCount:TYPE=LONGINTEGER;PageRun:TYPE=RECORD[firstPage:PageNumber,uî ìïb&î ìï`}î¹ îCîkîmî ¿ î ìï^Ôî îöî ýï],îøîëîhîõî;îJî ýï[ƒî¤î—î¼îùî?î!Nî ýïYÚîÓîÆîôî2îxî7qî ìïV‰sî ýïTà qîNïTàî3ïTàsî}ïTàîàïTà î" î-l î6!î ýïS7qîÕïS7îºïS7sîïS7îgïS7îbî ýïQŽqî²ïQŽî˜ïQŽsîáïQŽqîDïQŽsîUïQŽî¹ïQŽî ýïOåqîZïOåî?ïOåsî‰ïOåîìïOå î  î"É î ýïN=qî»ïN=î¡ïN=sîêïN=îMïN=î#-î( î ìïJëqî¸ïJëî�ïJë sî½ïJëqî ýïIBuî ìïEñîú sî ýïBŸqî�ïBŸîHïBŸsîæïBŸîËïBŸqîSïBŸî'ïBŸsîdïBŸuî ìï=¥ îHîë îÄî {î' î)Äî.e î7sî9›sî ýï:S qîHï:Sîï:SsîŸï:Sî„ï:S uî ÿï:Sî!xï:Sî"vî#ªî* sî ýï8« qîiï8«î"ï8«sîÀï8«î¥ï8« uîðï8«îiï8«îgî!Zî%¬sî ýï7qî›ï7îTï7sîòï7î×ï7 uî"ï7î"�ï7î#�î%€î+î1usî ýï5Y qî”ï5YîMï5Ysîëï5YîÐï5Y uî%ï5Yî%ˆï5Yî&†î(yî,Ëî1î3€ î:=î<0sî ýï2 qî$ï2îÞï2sî|ï2qîaï2îï2îFsîEï2îNï2î ýï.¶ qîÒï.¶î‹ï.¶sî)ï.¶îï.¶uî ìï)¼î ®sî ýï&jqîfï&jîï&jsî½ï&jqî ï&jsî›ï&jîþï&jî ýï$ÁqîQï$Áî ï$Ásî¨ï$Áqî�ï$Áîaï$Ásîåï$ÁîHï$Áî ýï# qîHï#îï#sîŸï#qî„ï#îXï#sî!Üï#î"?ï#î ýï!p î¤î~qîcï!pîï!psî$²ï!pî%ï!puî.þï!pî/xï!pî0uî2Áî4ôî6˜î8‹sî ýïÇîœ î$mqî&RïÇî' ïÇsî,¡ïÇî-ïÇuî6íïÇî7fïÇî8dî:°î<ãî>†î@yîEsî ýïuqîñïuî«ïusîIïuqî¬ïusî'ïuîŠïuuî%2ïuî%«ïuî&©î/þî21î3Õî5 sî ýïÍ îEîÀqî¥ïÍî^ïÍsîôïÍî WïÍuî*@ïÍî*¹ïÍî+·î.î06î1Ùî3Ìsî ýï{ qîþï{î·ï{sîUï{qî:ï{îï{sî’ï{uî yï{î òï{î!ðî' î.°î3 î;>î<âî>sîïÒîîï)î•î ýï�îQ îØî!½ î)' î2­î73 î ýï/ qîÌï/î…ï/sî#ï/qîï/îÁï/îÞsî#ï/uî$ï/î$•ï/î%“î)Ùî+¨sî ýï † qî}ï †î6ï †sîÔï †qî¹ï †îrï †î�sî!Ïï †î ýï Ýqî^ï Ýîï Ýsîµï Ýqîšï Ýînï Ýsîòï Ýîï 5 î- éTVm$�count:CARDINAL_1];maxPagesPerFile:LONGINTEGER=File.maxPagesPerFile-1;--subtract1forleaderpagewordsPerPage:CARDINAL=Environment.wordsPerPage;logWordsPerPage:CARDINAL=Environment.logWordsPerPage;bytesPerPage:CARDINAL=Environment.bytesPerPage;logBytesPerPage:CARDINAL=Environment.logBytesPerPage;FilepropertiesProperty:TYPE={byteLength,createTime,highWaterMark,modifyAccess,owner,readAccess,stringName,type,version};PropertyValuePair:TYPE=RECORD[SELECTproperty:PropertyFROMbyteLength=>[byteLength:ByteCount],createTime=>[createTime:System.GreenwichMeanTime],highWaterMark=>[highWaterMark:PageCount],modifyAccess=>[modifyAccess:AccessList],owner=>[owner:OwnerName],readAccess=>[readAccess:AccessList],stringName=>[stringName:String],type=>[type:File.Type],version=>[version:FileVersion],ENDCASE]_[byteLength[0]];--defaultvaluetomakeLupinehappyByteCount:TYPE=LONGINTEGER;maxStringNameChars:CARDINAL=100;--maxlengthofanystringappearinginapropertyFileVersion:TYPE=LONGINTEGER;FileaccessOpenFileID:TYPE[2];--representsasingleclient'saccesstoasinglefileunderasingletransaction.UniqueonlywithinasingleAlpineinstance.nullOpenFileID:OpenFileID=LOOPHOLE[LONG[0]];--IDofnoopenfileAccessRights:TYPE={readOnly,readWrite};LockMode:TYPE={none,read,update,write,readIntendUpdate,readIntendWrite,intendRead,intendUpdate,intendWrite};LockOption:TYPE=RECORD[mode:LockMode,ifConflict:{wait,fail}];RecoveryOption:TYPE={log,noLog};ReferencePattern:TYPE={random,sequential};--aclient-suppliedhintabouttheexpectedpatternofreferencestopagesofafile.Sequentialmeansthatwhentheclientreadsorwritesaninterval[p..p+n)ofthefile,thereisahighlikelihoodthatitwillreferencepages[p+n..p+2*n)inthenearfuture.Randommeansthatnosuchpatternisexpected.Specifying2sîïb&qî_ïb&î)ïb&sîÿïb&îŒïb&î ýï`}qîï`}îÓï`}îðsî šï`}î"ï`}uî1pï`}î1éï`}î2çî8 î9Aî;iî?ksî ýï^Ô qîKï^Ôîï^Ôsîìï^ÔîÑï^Ôî ýï]+qî}ï]+îHï]+sîï]+î ï]+î ýï[‚ qîÓï[‚îžï[‚sîtï[‚îYï[‚î ýïYÙqîÂïYÙî�ïYÙsîcïYÙîHïYÙuî ìïTÞî ® sî ýïQŒqîïQŒîÕïQŒsîsïQŒîXïQŒ îª î' î1v î:xî>ý î1ïOå îöî^î ýïL“qîíïL“î¦ïL“sîDïL“qî)ïL“îýïL“sî"�ïL“qîïJêsîÇïJêîŽïJêîÛqî€ïJêî9ïJêsîïIA îiîþ î"$ îïG˜ î<îÑ î!ÊîïEï îî´î'� îïDF îÉî^ î$ä îïB�îMîãîí îï@ô î&î» î!ž îï?K î�î" î"lîï=¢î/îÅî± îï;úîçî}î! qîï:Qsîžï:Qî…ï:Qîuî"–ï:Qî#ï:Qî$ î(Œî,î-»î1gî6sî ýï6ÿ qî\ï6ÿîï6ÿsî³ï6ÿqî˜ï6ÿîRï6ÿîosî!®ï6ÿî ýï3­qîï3­îãï3­sî ¹ï3­î"žï3­uî%­ï3­î&'ï3­î'$î*6î.Tî/÷î2�î6_î<–î><î?qsî ýï0[ qîßï0[î˜ï0[sî6ï0[qîï0[îÔï0[îñsî"1ï0[uî ìï+`î ®sî ýï( qî8ï(îñï(sî�ï(îòï(uîï(î}ï(îz î!Àî"ôî&Íî+Xî/fî1 î2@î6î8lî<<î=pîAI î1ï&gîòîîî î@î#î'ksî ýï$¾îŒ îMqî 2ï$¾î ëï$¾sî&�ï$¾qî&äï$¾sî*Pï$¾î*³ï$¾uî-(ï$¾î-¡ï$¾î.Ÿî0Ñî2uî4hî7§sî ýï!l qî½ï!lîvï!lsîï!lîúï!l î! î ýïqîqïî*ïsîÈïî®ïî(î ›î%†î)\î5"î?Ý î1ïr î? î ýï! qî"ï!îÛï!sîyï!qî^ï!î2ï!sî¶ï!îïxî]îïÏ î±î³î ýï}qî¸ï}îqï}sîï}îôï}îPî ýï+qî>ï+î÷ï+sî•ï+îzï+î"£ uî*Oï+î*Éï+î+Æî,ûî5×î8ªî¸îD@î1ï ƒîÔ îî¾îrî!î"Kî%{ î,$î0Mî3î6 î8ìî<›î@$îAÝîE¿î1ï Üîî·îìî¹î]î!©î$Uî'Àî),î*aî-r î3²î6„î7Üî:qî@1îCæîG¨î1ï 5î_îîQîcî#;î(£î,Ëî/�î1�î4­î9Pî:¼îA wî)ÈïöÿµTVm$Mthishintaccuratelyenablestheservertoperformtheoperationsmorequicklyandefficiently.OwnerpropertiesOwnerProperty:TYPE={createAccessList,modifyAccessList,quota,spaceInUse,rootFile};OwnerPropertyValuePair:TYPE=RECORD[SELECTproperty:OwnerPropertyFROMcreateAccessList=>[createAccessList:AccessList],modifyAccessList=>[modifyAccessList:AccessList],quota=>[quota:PageCount],rootFile=>[rootFile:UniversalFile],--readOnly--spaceInUse=>[spaceInUse:PageCount],ENDCASE]_[createAccessList[NIL]];--defaultvaluetomakeLupinehappynullRootFile:UniversalFile=[nullVolumeID,nullFileID];OwnerPropertySet:TYPE=PACKEDARRAYOwnerPropertyOFFalseBool;FalseBool:TYPE=BOOLEAN_FALSE;allOwnerProperties:OwnerPropertySet=ALL[TRUE];TransactionsTransID:TYPE[9];--globallypermanentlyuniquecapabilityforatransactionnullTransIDRep:ARRAY[0..SIZE[TransID])OFUNSPECIFIED=[0,0,0,0,0,0,0,0,0];nullTransID:TransID=LOOPHOLE[nullTransIDRep];--IDofnotransactionOutcome:TYPE={abort,commit,unknown};CommitOrAbort:TYPE=Outcome[abort..commit];WorkerState:TYPE={notReady,readOnlyReady,ready};ErrorenumerationsNeededAccess:TYPE={alpineWheel,fileModify,fileRead,handleReadWrite,ownerCreate,ownerEntry,spaceQuota};--whenaccessisdenied,indicatesthemissingpermission.OperationFailure:TYPE={busy,--serveristoobusytostartanothertransactiondamagedLeaderPage,--filepropertiesaremessedup(probableAlpinebug)duplicateOwner,duplicateVolumeGroup,duplicateVolume,inconsistentDescriptor,--PageBufferwordcountandPageRunpagecountareinconsistentinsufficientSpace,--involumegrouptocreateorextendfile,orinleaderpagetowritepropertynonexistentFilePage,--attemptedtoaccesspagebeyondlastpageoffilenotAlpineWheel,--failurefromAssertAlpineWheelownerDatabaseFull,ownerFileFormatOrVolGroupMismatch,--fromtheprivilegedoperationRegisterGroup,whentheownerfileformatisoutofdateortheVolumeGroupIDrecordedintheownerfiledoes3uî1ïb&îÉîœ î î"Ìî%î(úî*Ÿî/¬î1ø î8tî;Ýî@œî1ï` î ìï[„îI sî ýïX2 qîïX2î×ïX2sîuïX2îZïX2î&Žî1Íî6 î=¨ î ýïTáqîîïTáî¨ïTásîFïTáqî!+ïTáî!ÿïTásî&ƒïTáqîïS8sîÇïS8îŽïS8îÛ qî"‚ïS8î#;ïS8sîïQ�îLîáî'ê îïOæîîœî)_ îïN=îî—îU îïL”îaîö îuîïJë sîäïJëîhïJëî-î! î)ç qîïICsîžïICî…ïICîqî"€ïICî#iïICsî$ŒïICî$ïïICuî&OïICî&ÉïICî'Æî,Eî/Ïî1tî5!î9ÂsîïEñ î¡ î(î! î*÷ î ýïBŸqîùïBŸî²ïBŸsîPïBŸqî5ïBŸîÜïBŸî"jsî&öïBŸî( ïBŸ qî0�ïBŸî1yïBŸsî2œïBŸî3„ïBŸî ýï@ö qîÖï@öî�ï@ösî-ï@öqîï@öîËï@ösîï@öqî©ï@öî bï@ösî#Gï@öî ýï?Mîfî#èqî%Íï?Mî& ï?Msî(|ï?Mqî(ßï?Msî, ï?Mî,nï?Muî ìï:S sî ýï7qîúï7î³ï7sîQï7îµï7uîÆï7î?ï7î=îQ î%üî*g î0‡î2®î3ã sî ýï3¯qîÄï3¯î—ï3¯sîOï3¯î³ï3¯qîï3¯î±ï3¯sî�ï3¯îðï3¯qî&Qï3¯î'-ï3¯î(P sî0~ï3¯î2cï3¯î ýï2 îNîÒqî·ï2îpï2sî"ï2î"iï2uî-’ï2î. ï2î/ î1<î2ßî4Ó sî ýï.µqîiï.µî#ï.µsîÁï.µî¦ï.µîMî!¥î ýï- qîïï- î¨ï- sîFï- î+ï- î"î& î'Sî ýï+c qîpï+cî)ï+csîÇï+cî¬ï+c î õ î+ uî ìï&hî ¡ sî ýï# qîˆï#îAï#sîßï#îÄï# î#Å î*ìî0Èî< î1ï!o î uî"‘ï!oî# ï!oî$î'Šî+˜î-î1˜î7,î9xî>P sî ýïqî<ïîõïsî“ïîxïîïuuî­ïuî'ïuî$îîrîÇîâî‡î"¥î'” sîïÌuî3ïÌî¬ïÌîªîþ î%*î'~î,î-øî3êî8<sîï#îïzîïÑîï(uî'ï(î¡ï(îž î$²î(î+¾î.aî4Bî7rî;-î=� sîï€uîï€î|ï€îyîî ¿î$–î&;î*5î+íî0Nî2úî4³î6Yî:[î=‹î?0îBŽsîï×uîÚï×îTï×îQî"ƒî$(î(6î+fî/úî2‡î5·î7Zsîï.uî³ï.î,ï.î*îoî!­sîï …îï Üð"uî&Pï Üî&Êï Üî'Çî+î-Q î3eî9\ îB—îFîBï 5î<î�îîî Zî"»î$_î'Oî)î+T î5¥î;î<ºî?îBÿîETwî)Èïÿ-TVm$znotmatchtheonespecified.ownerRecordFull,ownerRecordInUse,quotaExceeded,--attempttocreateorextendfilewouldexceedowner'squotaregServersUnavailable,--accesscheckfailedduetoGrapevineunavailabilityreservedType,--attemptedtocreatefilewithillegaltypespaceInUseByThisOwner,totalQuotaExceeded,unwritableProperty};--attemptedtowritethetypeorversionpropertieswithWritePropertiesLockFailure:TYPE={conflict,--failwasspecifiedinthelockoption,andthelockcannotimmediatelybesetbecauseaconflictinglockisalreadysetbyanothertransaction.timeout};--lockcannotbesetevenafterwaitingalongtime,perhapsduetoundetecteddeadlockUnknownType:TYPE={coordinator,--coordinatorRNamenotknowntoGrapevine(CreateWorker)fileID,--nofilewiththisIDinspecifiedvolumeopenFileID,--IDpresentedfromwrongconversation,ornoopenfilewiththisID;thelattercanbeduetothetransactionaborting.owner,--noownerwiththisnameinownerdatabaseforspecifiedvolumegrouptransID,--notransactionactivewiththisIDonthisAlpineinstance.Itmaybethatthetransactionhasabortedorthattheserverhascrashedandrestarted.volumeID,--novolumewiththisIDison-linevolumeGroupID};--novolumegroupwiththisIDison-lineEND.4uîBïb&î¥î¸îî’ sîï`îï^×îï]0 uîùï]0îsï]0îpîWîüî#õî%®î*î,cî0Oî4¶î9Œsîï[‰uî0ï[‰î©ï[‰î§î!µî%Žî)Cî+Ïî-tî3Í sîïYá uîäïYáî]ïYáî[îŒî 1î$+î&î){î-‡sîïX:îïV“îïTëuî4ïTëî­ïTëî«î"Ýî$�î'àî*,î-î.Êî3^ î9Šî<†sî ýïQ� qî8ïQ�îñïQ�sî�ïQ�îtïQ�îïOõuîQïOõîÊïOõîÈî2îÒîAî çî#3î&-î*¬î-Pî/œî2•î7 î>ˆî@XîBlîGbîBïNN îâîÜîGî$î&î'òî,â sîïL§uîOïL§îÈïL§îÆî¿î,îüî!î$#î'Vî,î-Lî0Sî3³î8©î;5î<Ú îC†sî ýïIX qîæïIXîŸïIXsî=ïIXî"ïIXîïG± uîÅïG±î?ïG±î< îhî#^î%Âî*"î+Çî2 sîïF uîsïF îíïF îêîÞî2î-îÆîùî!Ÿî'sîïDb uîÐïDbîIïDbîGîyîfî"¤î&³ î.Ëî0„î2wî5µî8 î;î=žî@ÎîCîF²îBïB»îîžîCî� î#ˆsîïAuî”ïAîïAî îþîøîôîŒî#1î$Öî(Ðî+Öî.Úî1î6qî;sîï?luîrï?lîëï?lîéîÜ îÕî!®î$ªî'Bî)uî+hî.î2Sî7êî9yî9îA îBï=Å î;î±î"†î$?î'î)]î-?î/´î4•î78 sîï<uîóï<îmï<îjî]îþîúî"’î$Åî&1sîï:vuî¼ï:vî5ï:vî3î&î!Çî%�î(™î+1î-dî.Ðqî ýï7'sî…ï7'wî)ÈïöbTVm$7AlpineFile.mesaLasteditedby:TaftonMay25,19834:51pmMBrownonJanuary21,198310:39pmKollingonFebruary18,19835:40pmDIRECTORYAlpineEnvironment,FileUSING[Type],FileTypesUSING[tUntypedFile];AlpineFile:DEFINITIONS=BEGINAccessList:TYPE=AlpineEnvironment.AccessList;AccessRights:TYPE=AlpineEnvironment.AccessRights;Conversation:TYPE=AlpineEnvironment.Conversation;FileID:TYPE=AlpineEnvironment.FileID;LockOption:TYPE=AlpineEnvironment.LockOption;OpenFileID:TYPE=AlpineEnvironment.OpenFileID;OwnerName:TYPE=AlpineEnvironment.OwnerName;PageCount:TYPE=AlpineEnvironment.PageCount;PageNumber:TYPE=AlpineEnvironment.PageNumber;RecoveryOption:TYPE=AlpineEnvironment.RecoveryOption;ReferencePattern:TYPE=AlpineEnvironment.ReferencePattern;String:TYPE=AlpineEnvironment.String;TransID:TYPE=AlpineEnvironment.TransID;UniversalFile:TYPE=AlpineEnvironment.UniversalFile;VolOrVolGroupID:TYPE=AlpineEnvironment.VolOrVolGroupID;VolumeID:TYPE=AlpineEnvironment.VolumeID;ProceduresthatcreateOpenFileIDsOpen:PROCEDURE[conversation:Conversation,transID:TransID,universalFile:UniversalFile,access:AccessRights_readOnly,lock:LockOption_[intendRead,wait],recoveryOption:RecoveryOption_log,referencePattern:ReferencePattern_random]RETURNS[openFileID:OpenFileID,fileID:FileID];!AccessFailed{fileRead,fileModify},LockFailed,OperationFailed{damagedLeaderPage},PossiblyDamaged,StaticallyInvalid,Unknown{volumeID,fileID,transID};Opensanexistingfiledescribedbyvolumeandfileforaccessundertrans,andreturnsanOpenFileIDthatdesignatestheopenfile.ThereturnedFileIDmaydifferfromtheonethatwaspresentedintheUniversalFile;theclientisencouragedtoretaintherevisedFileIDforallfutureaccessestothefile.Theclientisrequiredtobeamemberoftheaccesscontrollistimpliedbyaccess(readAccessormodifyAccess);andifaccess=readOnly,theclientisrestrictedtoread-onlyoperationsontheOpenFileID.Theentirefileislockedinlock.mode(awaitoraLock.Failedcanresult).lock.ifConflictisalsorememberedandisusedwhenperformingcertainfileactions(e.g.,Delete)whichdonottakeaLockModeasanargument.standardFile:File.Type=FileTypes.tUntypedFile;Create:PROCEDURE[conversation:Conversation,transID:TransID,volumeID:VolOrVolGroupID,owner:OwnerName,initialSize:PageCount,type:File.Type_standardFile,recoveryOption:RecoveryOption_log,referencePattern:ReferencePattern_random]uî ìïb&î ìï`}î îöî ýï^ÓîøîëîîWî�î¬î ýï]*î¤î—î¼îùî?î!þî ýï[�îÓîÆî�îÊîî!qî ìïYsî ýïWZî ýïU±qîÕïU±îºïU±sîïU±îgïU±î ýïTqî]ïTîCïTsîŒïTîïïT î ìïQ‹ qî>ïQ‹î$ïQ‹ sîCïQ‹qî ýïOásî ýïLŽ qî$ïLŽîÞïLŽsî|ïLŽîaïLŽî ýïJå qî½ïJåîvïJåsîïJåîúïJåî ýïI< qîÒïI<î‹ïI<sî)ïI<îïI<î ýïG’qîñïG’î«ïG’sî²ïG’î—ïG’î ýïEé qî"ïEéîÛïEésîyïEéî^ïEéî ýïD@ qî8ïD@îñïD@sî�ïD@îtïD@î ýïB– qî”ïB–îMïB–sîëïB–îÐïB–î ýï@í qî}ï@íî6ï@ísîÔï@íî¹ï@íî ýï?D qîÌï?Dî…ï?Dsî#ï?Dîï?Dî ýï=šqî¸ï=šîqï=šsîï=šîôï=šð!î ýï;ñqî>ï;ñî÷ï;ñsî•ï;ñîzï;ñð#î ýï:Hqî�ï:HîHï:Hsîæï:HîËï:Hî ýï8žqîúï8žî³ï8žsîQï8žî7ï8žî ýï6õ qîþï6õî·ï6õsîUï6õî:ï6õî ýï5Lqîfï5Lîï5Lsî½ï5Lî¢ï5Lð"î ýï3¢qîQï3¢î ï3¢sî¨ï3¢î�ï3¢uî ìï.¦ îÓî¤îž vî ýï,)sî.ï,)qî+ï,)îÓï,)sîÊï,)î-ï,) î Ÿ î)Sî.×î4³ î=\ î1ï*‚î¸ îþî ‹î&ìî*^ î2 î3– î;¼î1ï(Úîg î&©î(6î*áî5�î@dîAñqî1ï'3sî"ï'3î…ï'3 î h î(�î-uîï%Šî- î' î} î% î,‡î6îáï#âîî$î*± î2 î6cîï"9î4î'î7î‹î!]î#7î'Øî*{î,Ïî.÷î3î6Ôî:˜î=<îAÓîáï ’ îoîA î¦î!òî%1î'Ýî* î/ÿî4oî7_î:ôî>1î@~îC îEÝîáïêîÎîtîÀ î!‚î#Îî'}î(é î/ÿî1¤î5Šî7Öîm îEÂîáïò îîÁîî'8î)„î-3î.Ÿ î4uî6î< îBŠîD}îáïK îï¢îÒî¢îöîbî§îMî$°î&^î)Mî+î,; î3»î6Iî:ÓîC£îEîáïú îfî îvî†î! î'çî,hî.¼î3Rî6¤î;Yî?<îA!îC„îF‹îáïSî»îtîgsî ýï îeî˜î}vî ýï ƒsîéï ƒqîçï ƒîŽï ƒsî…ï ƒîèï ƒ î!Z î*î/“î5oî\îCîGîáïV|î-î'î-îªîöî!¥î#î(Tî)ùî+Éî,ýî2î3¼î8’î<Œî@™îE/îáïTÔî…îÑ î îUî¹î$ î(öîïS!îÒî&î’î<î7îlî ¿î&Yî'üî+:î-Ýî0Ùî4+ î:$ xîA ïS!îBPïS!uîEºïS!îFkïS!îáïQz xî"ïQzîÓïQzuîÓïQzî¯ïQzîøîL î%wî'Ëî)ßî+ƒî0î4iî8Lî; îáïOÓ î\î î"yî%Í î-!î3) î;ëîA©îCŽîáïN+îÛîéîî7î"ªî&¤î,î-¹î0È î8…î<�î@ÉîE×îïLyîœîèî~îê îoî!î"ú î*‡î-ƒî<‡î?+ îF+îáïJÑîî6îùîW î& î, î1Éî4î6iî9;î;Üî@ÿîB¥ îáïI*î9î�îÙî‹î ³î"ÿî'Ÿî)Eî-(î/tî1Èî4iî9�î>„îA—îBíîáïGƒ î2îÒî!¿î#eî%±î ìïBj îÓî¤îC î ýï?îÊîòîìîJ î!î.Òî1Âî3‘î7}îï=Qî›î_ îìîXîKî!qî%Ñî'vî+Èî0¾î2î4Œî7µî;·î?ÿ îEÒîG‹îáï;ªîîÎîq î‚î;î#—î%ã îï9÷î›î_î³î îÀîeîÛî!î%Œî'gî)ÿ î1Qî6Gî9Þî;î@q vî ýï7qsîCï7qqîAï7qîéï7qsîßï7qîBï7q î ´ î)h î1K uîï5¾î-î` î“îï4 î îí îËî æ î(î*´î,�î/=î2î6åî8ˆ î@•îCÔîáï2dîÚîÍî[î9î ¥î$ î&nî(Ñ î/Eî3xî5Ì î<âî>‡îAÙîD±îáï0¼î5î(îNî î#Oî&Ñ î-Éî1wî4Pî8î:­ îAþîERîáï/îjîŸîóî÷î[î"aî$­î*� î1‰î4-î71î9”î>î@žîDîFîáï-nî¯î&î*î‚î îYî#äî(î)­î,Ôî1«î3÷î6Kî:î:ï½sîCWï½îCºï½î1ïuîïcî-î` î“vî ýï Üsîï Üqîï Üî¬ï Üsî¢ï Üîï Ü î'x î0+ î8 qî@3ï ÜîAï Üsî1ï 5î wî)Èïö £TVm$¤!Unknown{openFileID,transID};GetLockOption:PROCEDURE[conversation:Conversation,openFileID:OpenFileID]RETURNS[lock:LockOption];!Unknown{openFileID,transID};Thismayreturnalockmodestrongerthantheonewithwhichthefilewasoriginallyopenedifoperationshavebeenperformedthatupgradethelock.SuchoperationsmayhavebeenperformedoneitherthisOpenFileIDorsomeotherOpenFileIDreferringtothesamefileunderthesametransaction.SetLockOption:PROCEDURE[conversation:Conversation,openFileID:OpenFileID,lock:LockOption];!LockFailed,StaticallyInvalid,Unknown{openFileID,transID};Thisactuallychangesthefilelock,soitmaywaitorfailaccordingtolock.ifConflict.Filelocksmayonlybeupgradedbythismeans;attemptstodowngradealockareignored.GetRecoveryOption:PROCEDURE[conversation:Conversation,openFileID:OpenFileID]RETURNS[recoveryOption:RecoveryOption];!Unknown{openFileID,transID};GetReferencePattern:PROCEDURE[conversation:Conversation,openFileID:OpenFileID]RETURNS[referencePattern:ReferencePattern];!Unknown{openFileID,transID};SetReferencePattern:PROCEDURE[conversation:Conversation,openFileID:OpenFileID,referencePattern:ReferencePattern];!StaticallyInvalid,Unknown{openFileID,transID};ProceduresthataccesspagesofthefileNote:foroperationsthatreferencethecontentsofafile(dataorproperties),itispossiblethatseveralclientsmaybeaccessingthefileconcurrentlyunderthesametransaction(usingthesameordifferentOpenFileIDs).Alpinemakesnoattempttopreventoradjudicateconflictingaccesstothesamedatainthissituation,excepttoassurethatreadsandwritesofsingleindividualfilepagesandpropertiesareatomicwithrespecttoeachother.PageRun:TYPE=AlpineEnvironment.PageRun;PageBuffer:TYPE=LONGDESCRIPTORFORARRAYOFWORD;VALUEPageBuffer:TYPE=PageBuffer;RESULTPageBuffer:TYPE=PageBuffer;maxPagesPerRun:CARDINAL=LAST[CARDINAL]/AlpineEnvironment.wordsPerPage;--ThisisallthatcanbedescribedwithaDESCRIPTOR(PageBuffer).TherestrictionappliesonlytoReadPagesandWritePages.ReadPages:PROCEDURE[conversation:Conversation,openFileID:OpenFileID,pageRun:PageRun,pageBuffer:RESULTPageBuffer,lock:LockOption_[read,wait]];!OperationFailed{inconsistentDescriptor,nonexistentFilePage},LockFailed,StaticallyInvalid,Unknown{openFileID,transID};ReadsdatafromthepagesdescribedbypageRunofthefileassociatedwithopenFileID,andputsitcontiguouslyintoclientmemoryintheblockdescribedbypageBuffer(whoselengthmustbeconsistentwithpageRun.countorelseOperationFailed[inconsistentDescriptor]israised).Iftheentirefileisnotalreadylockedinatleastthemodespecifiedbylock,setslocksinthatmodeontheindividualpages,andupgradesthefilelocktothecorrespondingintentionmodeifnecessary.WritePages:PROCEDURE[conversation:Conversation,openFileID:OpenFileID,pageRun:3uîïb&î-î` î“vî ýï_¡ sîVï_¡qîTï_¡îûï_¡sîòï_¡îUï_¡ î&Ç î/{ î7^ qî?‚ï_¡î@Vï_¡sîEsï_¡îEÖï_¡î1ï]ù uîï\Hî-î` î“îïZ–îîî!îVîPîæî%!î(Aî*�î-î0î3úî6Gî8›î;; îAEîEÏîáïXï î\îƒî¬î"î$×î)øî,Eî/–î3 î9‡î1îBîDLîáïU  vî ýïS sîïSqîïSîÄïSsî»ïSîïS î&� î/D î7' î?@î1ïQs uîïOÂî- î®î!-î'_ î/’îïNîî7îQî�îñî#Cî$üî&Tî)Dî,3î-ìî0Vî6xî8îAEîDîáïLiîÑîÍî�îoîIî âî%ƒî*îî,“î3Nî4ƒî7}î9Ðvî ýïIäsîÀïIäqî¾ïIäîeïIäsî \ïIäî ¿ïIä î)1 î1å î9È qîAìïIäîBÀïIäsî1ïH<îÊuîïF‹î-î` î“vî ýïDsî…ïDqîƒïDî*ïDsî!!ïDî!„ïD î)ö î2ª î:Œ qîB±ïDîC…ïDsî1ïB^îPuîï@¬î-î` î“vî ýï>'sîNï>'qîLï>'îóï>'sî êï>'î!Mï>' î)¿ î2s î:U î1ï<€îìuîï:Îî-î­îß î(î ìï5¹ îÓî¤î²îgî îWî ýï2VîÊîò îmî>î ÿî#Kî(—î*;î+oî-Ãî1Bî2û î9øî;Pî<¼îA»îD�î Ðï0¯îîóîÃî£îïî C î(î+Óî.î1‰ î8‚î<“î>ßîBIîDî Ðï/ î³îî6î )î%î&µî+mî-& î3• î:5î>Cî?èîB4îEžî Ðï-`îvî îòî.îÓî ìî#¾î'Gî)êî-Íî/pî3I î9�î;Õî?ŠîB- î Ðï+¹î$î�î‰îî¬îÓsî ýï(Uqî^ï(Uîï(Usîµï(Uîšï(Uî ýï&¤ qî“ï&¤îLï&¤sîêï&¤qîÏï&¤îˆï&¤î¥ î$gî':î+Æî-Åsî1uï&¤î ýï$òqî†ï$òî?ï$òsîÝï$òîÂï$ò î ýï#Aqî7ï#Aîñï#Asî�ï#Aîtï#A î ýïÝqî]ïÝî(ïÝsîþïÝqîãïÝî œïÝsî"ÈïÝqî#+ïÝsî)bïÝî)ÅïÝuî?éïÝî@cïÝîA`îDpîEÜî1ï6îî‘î`î2î".xî#bï6î$?ï6uî+Gï6î+Àï6 î3¥î6i î<ÅîA@îD<î1ï�îî¹ vî ýï sî~ï qî|ï î#ï sîï î}ï î#ï î,£ î4… î<ŸîBõî1ïb î»î&Õî*G î1òî3î7Uuîï°î-î&î'Žî4ì î2îBPîEœîáï îî î!Iî#î%£ð'î=Sî>¾îC{îE îáïaî±îîqîÕî’î!×î#}î%"î(Iî*•î.+î3šî5tî8Æî;^î>Üî@�îCSîFéîáï ºî- îeîrîî#¼î&î(\î+Vî,ûî/G î7àî=‘îA'îB} vî ýï 5 sîáï 5qîßï 5î†ï 5sî}ï 5îàï 5 î$R î- î4é î=wî)Èïÿ PTVm$1PageRun,pageBuffer:VALUEPageBuffer,lock:LockOption_[write,wait]];!AccessFailed{handleReadWrite},LockFailed,OperationFailed{nonexistentFilePage},StaticallyInvalid,Unknown{openFileID,transID};WritesdatafromclientmemoryintheblockdescribedbypageBuffertothepagesdescribedbypageRunofthefileassociatedwithopenFileID.Iftheentirefileisnotalreadylockedinatleastthemodespecifiedbylock,setslocksinthatmodeontheindividualpages,andupgradesthefilelocktothecorrespondingintentionmodeifnecessary.Thefilemusthavebeenopenedwithaccess=readWrite.LockPages:PROCEDURE[conversation:Conversation,openFileID:OpenFileID,pageRun:PageRun,lock:LockOption_[read,wait]];!LockFailed,StaticallyInvalid,Unknown{openFileID,transID};Explicitlysetslocksonthespecifiedpagesofthefile.UnlockPages:PROCEDURE[conversation:Conversation,openFileID:OpenFileID,pageRun:PageRun];!StaticallyInvalid,Unknown{openFileID,transID};Ifthespecifiedpagesofthefilearelockedinamodenostrongerthanread,thenremovesthoselocks.Itistheclient'sresponsibilitytoassureconsistencyofanysubsequentoperationswhosebehaviordependsonthedatathatwasreadunderthoselocks.Notethatlocksarereference-countedandarenotremoveduntiloneUnlockPageshasbeendoneforeachLockPagesorReadPagespreviouslyperformedonthesamepages.Attemptstoremovenonexistentlocksorlocksstrongerthanreadareignoredwithouterrorindication.Fileintentionlocksthatweresetwhileacquiringthepagelocksarenotreleased.ProceduresthataccesspropertiesofthefileProperty:TYPE=AlpineEnvironment.Property;PropertyValuePair:TYPE=AlpineEnvironment.PropertyValuePair;PropertySet:TYPE=PACKEDARRAYPropertyOFFalseBool;FalseBool:TYPE=BOOLEAN_FALSE;allProperties:PropertySet=ALL[TRUE];ByteCount:TYPE=AlpineEnvironment.ByteCount;FileVersion:TYPE=AlpineEnvironment.FileVersion;ReadProperties:PROCEDURE[conversation:Conversation,openFileID:OpenFileID,desiredProperties:PropertySet_allProperties,lock:LockOption_[read,wait]]RETURNS[properties:LISTOFPropertyValuePair];!LockFailed,StaticallyInvalid,Unknown{openFileID,transID};ReadsthepropertiesspecifiedbydesiredProperties,orderedasinthedeclarationofProperty.Locksthosepropertiesasspecifiedbylock.Currently,allpropertieswiththeexceptionofversionaretreatedtogetherwithrespecttolocking;theversionhasaseparatelock.Notethatreadingtheversionwillpreventanyothertransactionthatupdatesthefilefromcommitting,unlesstheversionlockislaterremoved(byUnlockVersion).WriteProperties:PROCEDURE[conversation:Conversation,openFileID:OpenFileID,properties:LISTOFPropertyValuePair,lock:LockOption_[write,wait]];!AccessFailed{handleReadWrite,ownerCreate,spaceQuota},LockFailed,OperationFailed{insufficientSpace,unwritableProperty},StaticallyInvalid,Unknown{openFileID,owner,transID};Writesthesuppliedproperties,afterfirstlockingtheminthespecifiedmode.Thetypeandversionpropertiesmaynotbewrittenbythismeans.TowritethebyteLength,createTime,highWaterMark,andstringNamepropertiesrequiresthatthe4sî1ïb&îq îûî,cî/Õ î7�î9î=Guîï`|î- î'î#‹ î+ î5îáï^Õî`î’ î'Åîï]+îjîpî®î]î!‚î#(î%tî)î.ðî0Ê î7§î9Kî;˜î?LîEîáï[ƒîŠî.îzîÎ î!&î$! î+¤î-2î/~î3Nî5¢î7î9qî>/îBtîDîE¾îáïYÜî-îÃî2î î^î!öî%tî'î)ìî-‚î/uî1Á î7ùî<î>©îDOîFœîáïX5îÛî€îÌ îeî$î'¬î) î/Qî2î4hî7´î:Ûî>îBŽîáïV�vî ýïTsî~ïTqî{ïTî#ïTsîïTî}ïT î#ï î,¢ î4… î<ŸîBõî1ïRhî£ îOîÛî"±uîïP¾î- î®î!-î'_ î/’îïO î:îÒîPîCî�î#þî'³î)Vî+¢vî ýïL– sîÈïL–qîÅïL–îmïL–sîdïL–îÇïL– î%9 î-í î5Ï î=éî1ïJïuîïIEî-î­îß î(îïG›îœîèîWî î¯îüî!Pî#¤î'èî)Žî*Ãî.Yî0Lî5ˆî8¨î<î?îD3îáïEôî·îGî²îþîŠ î$¨î&Mî*f î1iî3 î5¦ îï"@îjsîiï"@î:ï"@uîï •î- î®î!-î'_ î/’îïëîî\ îˆî÷î!Ñî,Žî1aî3î4Àî7 î>î?¥îáïDîïîp î›îTî#Ãî%�î(ï î/aî1\ î7‡î:ƒî<ÏîBÝîD�îáï�î5îµîñîìî"kî$î)Tî+¡î05î2«î3àî9#î³îA™îD<îáï ß î îýî`î0î ½î"—î%/îï 5î*î‰îÕ î< î$‰ î.ãî1‡ î8Ë î>öîD îFßwî)Èïöÿ 7TVm$qOpenFileIDbeopenwithaccess=readWrite.TowritereadAccessormodifyAccessrequiresthattheclientbethefile'sowneroramemberofthecreateaccesscontrollistforthefile'sowner,butdoesNOTrequirethatthefilebeopenwithaccess=readWrite.Towriteownerrequiresthatboththeaboveconditionsbesatisfied,andadditionallyrequiresthattheclientbeamemberofthecreateaccesscontrollistforthenewowner;thediskspaceoccupiedbythefileiscreditedtotheoldownerandchargedtothenewone.Ifthereisinsufficientspaceintheleaderpagetorepresentthenewproperties,OperationFailed[insufficientSpace]israised.Notethatifmultiplepropertiesarewrittenbyonecallandanerroroccurs,someofthepropertiesmayneverthelesshavebeenwrittensuccessfully.UnlockVersion:PROCEDURE[conversation:Conversation,openFileID:OpenFileID];!Unknown{openFileID,transID};Unlocksareadlockpreviouslysetontheversionproperty.AllcommentsonUnlockPagesapplyherealso.IncrementVersion:PROCEDURE[conversation:Conversation,openFileID:OpenFileID,increment:LONGINTEGER];!AccessFailed{handleReadWrite},StaticallyInvalid,Unknown{openFileID,transID};Arrangesthatattransactioncommittime,incrementwillbeaddedtotheversionproperty,insteadof1or0(dependingonwhetherornotthetransactionhasperformedanyupdatestothefile).Notethatthechangeinversionnumberisnotvisible,eventothetransactionthatincrementedit,untilcommittime.GetSize:PROCEDURE[conversation:Conversation,openFileID:OpenFileID,lock:LockOption_[read,wait]]RETURNS[size:PageCount];!LockFailed,Unknown{openFileID,transID};Returnsthefile'ssize,aftersettingalockonthesizeproperty.Notethatthereturnedvalueisthenumberofdatapages,anddoesnotincludeanyfileoverhead(e.g.,leaderpage).SetSize:PROCEDURE[conversation:Conversation,openFileID:OpenFileID,size:PageCount,lock:LockOption_[write,wait]];!AccessFailed{handleReadWrite,spaceQuota},LockFailed,OperationFailed{insufficientSpace},StaticallyInvalid,Unknown{openFileID,transID};Changesthefile'ssizetothenewsizespecified,aftersettinganupdateorwritelockonit.Additionally,decreasingthefile'ssizelockstheentirefileinthesamemode.Notethatthesizeisthenumberofdatapages,anddoesnotincludeanyfileoverhead(e.g.,leaderpage).Ifthenewsizeislessthanthefile'shighwatermark,setsthehighwatermarkequaltosize.RequiresthattheOpenFileIDbeopenwithaccess=readWrite.Appropriatelyadjuststhediskspacechargedtothefile'sowner;however,itisnotrequiredthattheclientbeamemberoftheowner'screateaccesscontrollist.Notethatallocationisconsumedimmediatelywhenafile'ssizeisincreased;butwhenthesizeisdecreased,theallocationisnotcreditedwiththefreedpagesuntiltransactioncommittime.Exceptions(seeAlpineEnvironmentfordescriptionsofthearguments)AccessFailed:ERROR[missingAccess:AlpineEnvironment.NeededAccess];LockFailed:ERROR[why:AlpineEnvironment.LockFailure];OperationFailed:ERROR[why:AlpineEnvironment.OperationFailure];StaticallyInvalid:ERROR;Raisedbyanyoperationifpassedunreasonablearguments,whereunreasonablenessmaybedeterminedstaticallyanddoesnotdependonthestateofthefilesystem.Themostcommoncauseisanenumeratedorsubrangeargumentoutofbounds,whichcangenerallyoccuronlyiftheclientpasseditthroughaLOOPHOLE.5uîáïb& îoî>î}îyî*î,/î/� î6hî8! î@jîE�îáï`î-îÜî¬îøî)î "î!Ûî#î(+î)Îî,î0î4"î8¸î:÷î=î?kîB›îFíîáï^×îåîxî îÝî)î!}î#Mî&‹î)‡î5!î7=î:›î>•îC¬îáï]0îóî?î îsî B î%Èî(l î/Âî4Úî7«î9øî=¦î?vî@«îEÅîáï[‰î-î'î5îËî î"2î$~î'Cî+¶î.î0åî4„î: î;äî>0î@…îAðîFþîáïYáî-îuîoîîî Äî#î%ÕîïX$îœîîs îbîî §î"ôî&öî*&î+Ëî1Œî3Øî6� îáïV}ð"î#”î$ÿî)Cî,–î/hî0¾î5ú î<&î>yîCîDàîáïTÖîwîîîjîòî!\î"ÿî%K î+wî.g î5Íî8ôî<î@ª vî ýïRE sîÐïREqîÎïREîvïREsîlïREîÏïRE î&A î.õ î6Ø uîïPˆî-î` î“îïNËî^î“î—î‘ î Ýî"ðî$äî'0î+Äî1kî3³î9ýî;ð îD#îáïM#îÜvî ýïJ“sî~ïJ“qî|ïJ“î$ïJ“sîïJ“î}ïJ“ î'ð î0£ î8† î@  qî1ïHëîsîGïHëîªïHëuîïG.î- î'î#‹î. î4< î�îD(îáïCÊî…î¹îrî§ î|îoî"î$8î&›î(ç î/àî2Vî8¯î;Gî@)îAÎîDîáïB#î4îîRîèîŽî"#î'î(tî*×î/Gî2[î4î6L î=Eî@ îG¢îáï@{îîævî ýï=êsî¯ï=êqî­ï=êîTï=êsîKï=êî®ï=ê î" î*Ô î2· î:Ðî>C îEîî1ï],andisguaranteednottoraiseanyoftheerrorsraisedbyCreateWorker.CreateWorker:PROC[conversation:Conversation,transID:TransID,coordinator:FileStore];!Unknown{coordinator,transID};Callfromclienttoworker.InformsthecalledAlpineinstancethatitistoserverasaworkerunderanexistingtransactiontransIDwhichisbeingcoordinatedbytheAlpineinstanceidentifiedbycoordinator.Thisprocedurereturns(i.e.doesnotraiseanerror)ifftransbecomesactive(preparedtodowork)onthecalledAlpineinstance.Ofcourse,thereisnoguaranteethatthisstatewilllastforanylengthoftime.AssertAlpineWheel:PROC[conversation:Conversation,transID:TransID,enable:BOOL_TRUE];!OperationFailed{regServersUnavailable,notAlpineWheel},Unknown{transID}.Whencalledwithenable=TRUE,causesallsubsequentcallsforthis(conversation,transID)pairtopassallaccesscontrolcheckswithoutfurtherchecking;raisesOperationFailed[notAlpineWheel]ifthecalleridentifiedbyconversationisnotamemberoftheAlpineWheelsgroupforthisserver.Whencalledwithenable=FALSE,causesnormalaccesscontrolcheckingtoresumeforthis(conversation,transID)pair.RequestedOutcome:TYPE=AlpineEnvironment.CommitOrAbort;Outcome:TYPE=AlpineEnvironment.Outcome;Finish:PROC[conversation:Conversation,transID:TransID,requestedOutcome:RequestedOutcome--{abort,commit}--,continue:BOOL_FALSE]RETURNS[outcome:Outcome--{abort,commit,unknown}--,newTrans:TransID];!(none);Callfromclienttocoordinator.Requeststhatthetransactionbefinishedinthespecifiedway.Ifthetransactionhasalreadycommittedoraborted,Finishsimplyreturnstheoutcome.Otherwise,Finishwaitsifnecessarytoassureaknownoutcome(whichmaydifferfromtheonerequested)andreturnsthatoutcome.newTransismeaningfulonlyifrequestedOutcome=commit,continue=TRUE,andoutcome=commit.Unknown:ERROR[what:AlpineEnvironment.UnknownType];OperationFailed:ERROR[why:AlpineEnvironment.OperationFailure];END.uî ìïb&î ìï`lî îöî ýï^³î¤î—îüî‰îÎîÝî ýï\ùîøîëîhîõî;îJî ýï[@îÓîÆî+î¸îþî qî ìïX²sî ýïVùî ìïTlqîÛïTlîÁïTl sîáïTlqî ýïR²sî ýïO? qîÒïO?î‹ïO?sî)ïO?îïO?î ýïM…qîúïM…î³ïM…sîQïM…î7ïM…î ýïKÌ qîiïKÌî"ïKÌsîÀïKÌî¥ïKÌvî ýïI>sîéïI>qîçïI>îŽïI>sîtïI>î×ïI> îI î%ýqî2DïI>î2ýïI>sî5ÙïI>qî7fïI>î8ïI>sî:’ïI>qî;yïI>îsîAjïI>îAÍïI>î1ïG—uîïEÝî-î&îïD$îîEîôî˜ î!î%ýî'2î)÷ î1Hî3pî7Sî9Ÿî=€îAÒîGîáïB|î†îVî¢ î%î³î)Óî,kî.î1î4îáï@ÕîTîðî”îÿ î#ëî&Nî'óî+.î-Çî/jî1¶î5—î9ƒî;] vî ýï>H sîoï>Hqîlï>Hîï>Hsîùï>Hî\ï>H î!Î î*‚î0î5ã î=» uîï<Žî-î` î”îï:ÕîîEîôî˜îwî#“î%ßî)Àî.î3Qî6#î7zî8æî:‹î>lî@%îAZîáï9-î°î£î³ î ­î%Çî)ªî+î.· î5úî7Ôî: î>rîáï7† îÃî� î!î!1î'\î+óî.Ÿî1¤î4î7Bî95î= î>ÐîB<îáï5ßîºî·î\îAî "î"î$aî(Bî,”î2°î4¶î9>î<ªî>î@îFCîáï47îzî®îCîÏî÷î�î"®î$Qvî ýï1ªsîFï1ªqîDï1ªîëï1ªsîÐï1ªî4ï1ª î$¦ î-Zî2Þî8ºqî=™ï1ªî>Rï1ªsîA.ï1ªqîB»ï1ªîCtï1ªsîEæï1ªîFIï1ªuîï/ðî-î&î'¯î2Ÿî8Ñ îï.7î îëîæî#xîï.7îÁï.7uî"+ï.7î#ï.7î'7î)2 î/ýî3î5?î7Ø î@hîEüîáï,�î†îtîoî}îî"oî'Iî+Éî1íî5¬îáï*èî¥îûîGî ü î&Þî(¸ î0wî1âî4Fî5{î:•î<9î>… îáï)Aî¸îßîxî6î 2î$î'î+Kxî-0ï)Aî-àï)Auî0àï)Aî1½ï)Aî5íî:Žî>œîC2îáï'šî†îîCîÜ î"lî(sî ýï$&qî«ï$&îdï$&sîï$&îçï$&î ýï"mqîiï"mî#ï"msîÁï"mî¦ï"mvî ýïàsî¥ïàqî£ïàîKïàsî0ïàî“ïà î î%¹î+=î1î1ï8uîeï8îÞï8î#êsî)Øï8î*´ï8qî0Ôï8î1�ï8sî4iï8qî5õï8î6¯ï8sî9“ï8qî:{ï8î;Oï8sî@lï8î@Ïï8î1ï‘uî$ï‘î�ï‘î©î"Ð sî)Êï‘î*¦ï‘î1juîï×î-îïîîEîôî˜ î!î&ºî)Œî+Ø î2Ñî4¡î9¥î;Kî=—îCîFîáïvî- î'îœîZî%äî'�î,Êî0ñî5+î9Ãî<îAÅ îáïÏîî{îÒîÈîmî#†î$»î)î.xî2Õî5Åî9Yî<—î>ãîAq îáï(î…îîîî¤î$Èî&4 î-8î04î1Šî<²î>—îC¾îáï€xîÆï€îï€uîéï€îÆï€îiîÇî¬sî ýïóqîâïóî›ïósî]ïóîÀïóî—î ýï fqî¸ï fîqï fsî3ï fî–ï fî ð$qî ýï ósî…ï óÿ ZTVm$DCHANGELOGChangedbyMBrownonJanuary21,198310:28pmAddedcreateLocalWorkerparmtoCreate.Renamedtrans->transIDtobeconsistentwithAlpineFile.ChangedbyMBrownonMarch1,19833:29pmMovedAssertAlpineWheelhere,fromAlpineOwner;itnowraisesOperationFailed[notAlpineWheel]insteadofAccessFailed[alpineWheel].2qî ìïb_îjsî ìï_äî¾î¹îî…î±î ïî$5î'ôuî ìï^=îîáîaîî$>î*+î-—î/Eî4`î6î7Ô î>îA sî ìï[Âî¾î¹îî…îëîxî"¾î%Ìuî ìïZî[îùîLî Š î).î*†î-`î1 î;î ¿ïXsîUîø îò wî)ÈïöÿTVm$|AlpineOwner.mesaProceduresforownerdatabasemaintenance.Lasteditedby:KollingonMarch8,19834:21pmMBrownonMarch3,19832:45pmTaftonApril2,19831:52pmSomeaspectsofownerdatabasemaintenancearedecentralized,inthatnormalAlpineusersmayperformthem.Theseincludeinspectingindividualownerrecordsandupdatingcertainfieldsofownerrecords(theseupdatesarerestrictedbyaccesscontrolchecksthatareafunctionoftheowner).OtheraspectsofownerdatabasemaintenancearereservedforAlpineadministrators.Theseincludecreatinganddeletingownerrecords,updatingdiskspacequotas,andenumeratingtheentiresetofowners.Onaparticularserver,theseoperationsmayonlybeinvokedbyindividualswhobelongtothatserver'sAlpineWheelsgroup.Sincetheseoperationsarepotentiallydestructive,theymustbeexplicitly"enabled"byacalltoAlpineTransaction.AssertAlpineWheel.DIRECTORYAlpineEnvironment;AlpineOwner:DEFINITIONS=BEGINAccessList:TYPE=AlpineEnvironment.AccessList;--necessary,orlupinebombsout.Conversation:TYPE=AlpineEnvironment.Conversation;OwnerName:TYPE=AlpineEnvironment.OwnerName;PageCount:TYPE=AlpineEnvironment.PageCount;TransID:TYPE=AlpineEnvironment.TransID;VolumeGroupID:TYPE=AlpineEnvironment.VolumeGroupID;WhenaprocedureraisesAccessFailed[alpineWheel]below,thisalwaysmeansthatthe(conversation,transID)pairpassedtotheprocedureneededtobeasserted(byAlpineTransaction.AssertAlpineWheel[enable:TRUE]),butwasnot.ProceduresforbothAlpineusersandAlpineadministrators.OwnerProperty:TYPE=AlpineEnvironment.OwnerProperty;OwnerPropertyValuePair:TYPE=AlpineEnvironment.OwnerPropertyValuePair;OwnerPropertySet:TYPE=AlpineEnvironment.OwnerPropertySet;allOwnerProperties:OwnerPropertySet=AlpineEnvironment.allOwnerProperties;ReadProperties:PROC[conversation:Conversation,transID:TransID,volumeGroupID:VolumeGroupID,owner:OwnerName,desiredProperties:OwnerPropertySet_allOwnerProperties]RETURNS[properties:LISTOFOwnerPropertyValuePair];!LockFailed{timeout},StaticallyInvalid,Unknown{owner,transID,volumeGroupID}.ReadsthepropertiesspecifiedbydesiredProperties,orderedasinthedeclarationofOwnerProperty.WriteProperties:PROC[conversation:Conversation,transID:TransID,volumeGroupID:VolumeGroupID,owner:OwnerName,properties:LISTOFOwnerPropertyValuePair,enforceTotalQuota:BOOL_FALSE];!AccessFailed{alpineWheel,ownerEntry},LockFailed{timeout},OperationFailed{ownerRecordFull,ownerRecordInUse,regServersUnavailable,totalQuotaExceeded},StaticallyInvalid,Unknown{owner,transID,volumeGroupID}.Writesthesuppliedproperties,leavingtheothersunchanged.Obtainsawritelockontheowneruî ìïb&î ìï`} îÓîúîôîz î ìï^Óî îöî ýï]*îÓîÆî+î¸îþî î ýï[€î¤î—îüî‰îÎîÝî ýïY×îøîëîhîõî;îJî ìïV„î ®îBîåîßîd î%?î'“ î0î1¦î4xî9î=kî@ÓîCÃî ¿ïTÝîýîàîŒ îÞ î$î(î,¸î/[î4ðî9pî<ùî>�îB–î ¿ïS6î£î…îÙ î¯î‰î!—î&-î*‰î-[î/¯î0äî6/î7Óî:î ìïQŒî Ðîcîîî† î%aî'µî,âî/ î3[î<†î@hî ¿ïOåîðî“î£î�î �î&1î)î,³î1Rî3ö î;¸î>îAÔîCèî ¿ïN=î•îëî îLî†î ñ î'mî*]î-Xî/(î4+î6 î<Âî?›îCíîE’î ¿ïL–î} î î½î uî#à î*[î,¯ î3M î:Nî=@î@‹îB[ î ¿ïJïî îçîî±îVð$qî ìïHrsî ýïFÈî ìïDK qîíïDKîÒïDK sîòïDKqî ýïB¢sî ýï?O qî$ï?OîÞï?Osî|ï?Oîaï?Ouî,2ï?Oî,«ï?Oî-© î3÷î5°î9Áî=ñsî ýï=¦ qîÒï=¦î‹ï=¦sî)ï=¦îï=¦î ýï;ü qî”ï;üîMï;üsîëï;üîÐï;üî ýï:S qî}ï:Sî6ï:SsîÔï:Sî¹ï:Sî ýï8©qîúï8©î³ï8©sîQï8©î7ï8©î ýï7 qîHï7îï7sîŸï7î„ï7uî ýï2îøî-îXî î# î+©î/Ëî2dî6½î:æî=¸î@ î Ðï0\îdî0îiîîZî#…î'úî)Ÿî+nî0†î Ðï.µð+xî( ï.µî(Ùï.µuî+Cï.µî+±ï.µî-î/hî2 î ìï)¹ îÓîúî î^îÇî kî$½sî ýï&f qîï&fî×ï&fsîuï&fîZï&fî ýï$½qîîï$½î¨ï$½sîFï$½î!+ï$½ð)î ýï!jqîùï!jî²ï!jsîPï!jî5ï!jð#î ýïÀîfî#èî%Íð%vî ýïC sîïCqîïCî¹ïCsîžïCîïC î"s î+'î0«î6‡ î1ïœ îZî" î*vî5¶îA8î1ïõqîƒïõîWïõsî$tïõî$×ïõ qî+Èïõî,�ïõî.­sî0¬ïõî1ÀïõuîïKî- îU îôî'sî-¥î2¨î8îï¢îî\ îˆî÷î!Ñî,Žî1aî3î4Àî7 î>î?¥ vî ýï%sîwï%qîtï%îï%sîï%îdï% î"Ö î+Šî1î6ë î1ï~ îZî" î*v qî1gï~î2 ï~î4Lsî6Lï~î7_ï~î1ïÖqîXïÖîïÖsî!íïÖqî#zïÖî$3ïÖsî'ïÖî'{ïÖuîï-î- î' îë î(9 î/a î5ÿîáï …î[î&Rî4+îáï Þî`î’î$•î*îï 5îjî¶îî î qî%î']î+b î3î8î9Dî<¢î?œîA�îCÛ ³TVm$�record.(Fornow,WritePropertiesfailsbyraisingOperationFailed[ownerRecordInUse]ifawriteofthequotaisrequestedandanothertransactionisconcurrentlychangingthespaceinusebythegivenowner.Retryingmaysucceed.)Theowner,andmembersoftheowner'sModifyaccesslist,canupdatetheCreateaccesslistpropertyofanownerrecord.Theowner,andmembersoftheowner'sCreateaccesslistcanupdatetherootFilepropertyofanownerrecord.Ifanupdateisrestrictedtothetheseproperties,buttheaccesscontrolchecksfail,thenWritePropertiesraisesAccessFailed[ownerEntry].ThespaceInUsepropertyisreadonly.IfenforceTotalQuota=TRUEandpropertiesincludesquota,thenWritePropertiesraisesOperationFailed[totalQuotaExceeded]ifthetotalofallquotasintheownerdatabase,includingthespecifiedupdate,exceedsthetotalnumberofdiskpagesonthevolumegroup.Onallupdates,certainhigh-levelinvariantsareenforced:owneraccesslistsalwayshaveworld=FALSEandowner=TRUE.AnupdatetoanaccesscontrollistmayraiseOperationFailed[ownerRecordFull].Thesystemguaranteestoreserveenoughspaceforaccesscontrolliststoragesothateachlistcancontaintwomaximum-lengthRNames,butdoesnotcontrolthedivisionofspacebetweenlists.Inordertoaddanelementtoonelistitmaybenecessarytoremoveanelementfromanother.ProceduresforAlpineadministratorsonly.Theseproceduresrequirethat(conversation,transID)beassertedasanAlpineWheel.Create:PROC[conversation:Conversation,transID:TransID,volumeGroupID:VolumeGroupID,owner:OwnerName,properties:LISTOFOwnerPropertyValuePair,enforceTotalQuota:BOOL_FALSE]RETURNS[spaceLeftOnVolumeGroup:PageCount];!AccessFailed{alpineWheel},LockFailed{timeout},OperationFailed{duplicateOwner,ownerDatabaseFull,ownerRecordFull,totalQuotaExceeded},StaticallyInvalid,Unknown{transID,volumeGroupID}.CreatesanewownerinthespecifiedVolumeGroup.Thepropertiesofthenewownerarederivedby(ineffect)settingallpropertiestotheirdefaultvalues,thencallingWritePropertieswiththespecifiedlistofproperties.Destroy:PROC[conversation:Conversation,transID:TransID,volumeGroupID:VolumeGroupID,owner:OwnerName];!AccessFailed{alpineWheel},LockFailed{timeout},OperationFailed{ownerRecordInUse,spaceInUseByThisOwner},StaticallyInvalid,Unknown{owner,transID,volumeGroupID}.DestroysanexistingownerinthespecifiedVolumeGroup.RaisesOperationFailed[spaceInUseByThisOwner]ifanyfilesexistwhosediskspaceischargedagainstowner.ReadNext:PROC[conversation:Conversation,transID:TransID,volumeGroupID:VolumeGroupID,previousOwner:OwnerName,desiredProperties:OwnerPropertySet_allOwnerProperties]RETURNS[owner:OwnerName,properties:LISTOFOwnerPropertyValuePair];!AccessFailed{alpineWheel},LockFailed{timeout},StaticallyInvalid,Unknown{owner,transID,volumeGroupID}.Statelessenumeratorfortheownerdatabase.previousOwner=NILstartsanenumeration,andowner=NILisreturnedattheendofanenumeration.Thiscalllockstheentireownerdatabaseinwritemodetoensureconsistency,whichisthereasonforrestrictingitsusetoAlpineadministrators.ReadDBProperties:PROC[conversation:Conversation,transID:TransID,volumeGroupID:VolumeGroupID]RETURNS[nOwners,nEntriesUsed,nEntries:NAT,totalQuota,totalSpaceInUse,volumeGroupSize:PageCount];!AccessFailed{alpineWheel},LockFailed{timeout},Unknown{transID,volumeGroupID}.Returnsaggregateinformationabouttheownerdatabase.2uîáïb&îáîðî#î#Øî&Æî(¡î-î7 îC†îDÜîFîáï`î…îÑî“îÿîêî Žî%} î,wî-â î5£î;pî=¼îA[îCîEaîG;îáï^×îmîDîÌî¼îï],îÒî$îÇîfî î!Vî&,î*Ýî.ëî1‚î4î8mî:¹î?îC$îáï[…î0îÓîÆîÀî Àî#ƒî'Õî*yî0î1»î4î8Þî=:îAHîC‡îáïYÞî>î‹î¢îðî!”î#‡î'�î+üî-Šî/}î3Ûî5F î;î<Áî? îBx îáïX6îCî�î�î3î �î#Rî&\î0î3Ñ î;Ë îDÉîáïV� î î[îÇîËîïTäîœîxîõïTäî®ïTäuî ‚ïTäî!2ïTäî#% î)Qî.�î2›î5¦î?\îáïS<îÚî&î'\î)¨î,Ñî.tî0oî4¶î6\î8¨î<¡îBîáïQ•î-îœîRî =î"‰î%²î*—î,:î/î2Òî4Åî7î;²îïOêîeî`î™î î"; î(wî*Ëî0¬î4¦î8³î;wî?ÐîB÷îF«xîáïNCuîüïNCî¬ïNCîŸî™xî~ïNCî7ïNCuî¡ïNCîïL—îOî¬îQîDîRî èî#'î&î)Rî3Kî>ñîA´îáïJð î îEîÂî zî$î&Aî*Oî.åî1$î5Íî7†î:Wî=î?¾îBLîáïIIîm îÞî!±î$î'î){î.î0]î5Iî6ìî:‹î?§îCGîE$îáïG¡î†îîî î°î>î }î!Õî$Åî&•î,‹î.0î2Ïî4Âî9¿î<ýî ìïB  îÓîúîL î î#÷î'Ù î.‰î3î5î î>~îDî ¿ï@ùî×î�îƒîÕvî ýï>zsîéï>zqîçï>zîŽï>zsîtï>zî×ï>z îI î%ýî+�î1] î<[ î1ï<ÒîØ îM qî&>ï<Òî&÷ï<Òî)#sî+"ï<Òî,6ï<Òî:òqî1ï;+sîÆï;+qîRï;+î ï;+sîðï;+qî½ï;+sî!¯ï;+î"ï;+î39 uîï9€î- î' î › î'à î.bî8Zîáï7Ùî÷î%Áî3î=™îáï61îîï4†îïî$îéîãî‰îÕî$D î-Ãî0† î6±î8Uî:¡î=fîA`îC´îáï2ßî»îÛî÷îLîG î#sî%î(Kî,Êî11î4;î8£îBYîEUîáï17îPî�î3 vî ýï.¹sî¤ï.¹qî¡ï.¹îIï.¹sî.ï.¹î‘ï.¹ î î&·î,<î2 î= î1ï-îØ uîï+fî- î' î › î'à î.bî8Zîáï)¿îî)‘î/Ãî4Åî:8îï(î”î‡î—î‘î 7î"ƒî'ò î0ìî5%îáï&lîåî ;î"Ôî%­î(êî,âî/Åî3dî4Ðî9Üî>ˆvî ýï#ísîîï#íqîìï#íî”ï#ísîyï#íîÜï#í îN î(î-†î3b î1ï"F îZ î'd î/Úî;îF›î1ï Ÿqîƒï ŸîWï Ÿsî$tï Ÿî$×ï Ÿî)~ î1ó qî8äï Ÿî9�ï Ÿî;Ésî1ï÷uîïLî- î' î › î'à î.bî8áî?îDîáï¥îïúî¡ îÆîîî:î#4î)– î2²xî4—ïúî5sïúuî7ïúî7 ïúî:½î<° îDËîáïRîÛxîÀïRîœïRuîEïRî¨ïRî°îî´î"î$Žî&1î($ î0?î3Oî5äî9bî;®î?îCxîáï«î‡îåî{î î^ î$ºî(�î* î,Uî0œî2Ä î9 î:üî=\î?îáïvî ýï…sîï…qîï…î¿ï…sî¤ï…îï… î$z î--î2²î8Ž î1ïÞ qîeïÞî9ïÞsî#VïÞî#¹ïÞî)â î2Ãqî8µïÞî9žïÞsî;*ïÞî<ïÞ î1ï6î¶î(y uîï ‹î- î' î › î'à î.bî4”î:·îï àîî@ î ’î$Tî& î*šîï 5 wî)Èïöÿ jTVm$°nOwnersisthenumberofownersinthedatabase,whilenEntriesUsedisthenumberofdatabaseentriesinuse(deletedentriesmayoccupyspace).WhennEntriesUsed=nEntries,anyCreatecallwillraiseOperationFailed[ownerDatabaseFull];acalltoReorganizeDBisrequired(seebelow)ReorganizeDB:PROC[conversation:Conversation,transID:TransID,volumeGroupID:VolumeGroupID,nEntries:NAT];!AccessFailed{alpineWheel},LockFailed{timeout},OperationFailed{insufficientSpace,ownerDatabaseFull},Unknown{transID,volumeGroupID}.Performsacompletereorganizationoftheownerdatabase,lockingitinwritemodeandtherebymakingitunavailableduringthereorganization.Reorganizationiscalledforwhentheownerdatabasebecomesfull(CreateraisesOperationFailed[ownerDatabaseFull]),orwhentheperformanceofownerdatabaseoperationsdegradesduetohashcollisionsordeletions.ThenewownerdatabasefileallowsuptonEntriesowners;ReorganizeDBraisesOperationFailed[ownerDatabaseFull]iftheexistingdatabasecontainsmorethanthismanyowners.ReorganizeDBraisesOperationFailed[insufficientSpace]ifthereisnotenoughscratchspaceonthevolumegrouptoperformthereorganization.ErrorsAccessFailed:ERROR[missingAccess:AlpineEnvironment.NeededAccess];LockFailed:ERROR[why:AlpineEnvironment.LockFailure];OperationFailed:ERROR[why:AlpineEnvironment.OperationFailure];StaticallyInvalid:ERROR;Unknown:ERROR[what:AlpineEnvironment.UnknownType];END.3uîïb&î®îîfîKîîî"lî$î&^î,<î/Æ î8î9€î;Ìî@±îBTîáï`î6îÜî<î>î “î#ƒî(î,pî0k î8ºî:Ÿî@bîBûîáï^×îwî îGî!@î.Sî/ˆî2î3 î<Òî>>îC�îáï]0vî ýïZµ sî¥ïZµqî£ïZµîKïZµsî0ïZµî“ïZµ î" î*¹î0=î6 î1ïY îZqî#LïYî$5ïYsî%ÁïYî&%ïYuîïWfî- î' î › î'à î.bî8ZîáïU¿î§î!Úî'üîïTî×î î« î#“î%6î'‚î+|î1Zî6%î7}î9#î<�î@îB»îáïRpîÅî î=î „î"Ðî, î5rî6Þî:¿î<çî@hîB´îáïPÉîgî·î-î!î$Âî.»î<&î=ßîAaîáïO" î“î7î0î!¶ î(1î-µî0Aî1æî5 î:ìî<¥ îB’îEUîáïMzîÛîaîµîÌî ½î"bî'Íî,Å î5Õî9”îáïKÓî{îÑîî$-î)³î/î2qî5‘î8*î;ØîáïJ, îñî±î%©î0èî2>î5©î7î9xî>0îBÐîFoîáïH„î-îÎî¤îIî Vî"¢î ìïCŽsî ýïA qî¦ïAî`ïAsî"ïAî…ïA î"Þî ýï>˜ qî³ï>˜îlï>˜sî/ï>˜î’ï>˜îî ýï<qî¸ï<îqï<sî3ï<î–ï<î ð$î ýï9¢qî�ï9¢îFï9¢sîžï9¢î ýï7'qîâï7'î›ï7'sî]ï7'îÀï7'î—qî ýï3Ùsî…ï3Ùwî)Èï1TVm$íAlpineVolume.mesaLasteditedbyKollingonMarch9,198311:08amMBrownonMarch1,19834:13pmTaftonApril2,19831:53pmThisisaninteriminterface.Weexpectittoevolveinthedirectionof:controlofvolumegrouplocking,controllingtheonline/offlinestatusofvolumegroups,etc.DIRECTORYAlpineEnvironment;AlpineVolume:DEFINITIONS=BEGINConversation:TYPE=AlpineEnvironment.Conversation;LockOption:TYPE=AlpineEnvironment.LockOption;TransID:TYPE=AlpineEnvironment.TransID;nullTransID:TransID=AlpineEnvironment.nullTransID;VolumeID:TYPE=AlpineEnvironment.VolumeID;VolumeGroupID:TYPE=AlpineEnvironment.VolumeGroupID;nullVolumeGroupID:VolumeGroupID=AlpineEnvironment.nullVolumeGroupID;ProceduresGetNextGroup:PROC[conversation:Conversation,transID:TransID_nullTransID,previousGroup:VolumeGroupID_nullVolumeGroupID,lock:LockOption_[none,wait]]RETURNS[volumeGroupID:VolumeGroupID];!Unknown{volumeGroupID};Statelessenumeratorfortheon-linevolumegroupsofthisAlpineinstance.previousGroup=nullVolumeGroupIDstartsanenumeration,andvolumeGroupID=nullVolumeGroupIDisreturnedattheendofanenumeration.Fornow,thetransIDandlockparmsareignored.Theproposedusageisasfollows:IftransID#nullTransIDandlock.mode#nonethensetsthespecifiedlockonthereturnedvolumegroup.Settingareadlockguaranteesthatthevolumegroupwillremainon-linefortheremainderofthetransaction.Settingawritelockexcludesallotheraccesstothevolumegroupfortheremainderofthetransaction(includingopeningfilesonthevolumegroup);thisrequiresthecallertobeanassertedAlpineWheel.GetGroup:PROC[conversation:Conversation,transID:TransID_nullTransID,volumeGroupID:VolumeGroupID,lock:LockOption_[none,wait]]RETURNS[volumes:LISTOFVolumeID];!Unknown{volumeGroupID};ReturnsthelistofvolumesbelongingtothespecifiedvolumeGroup.LockingisasforGetNextGroup.GetEnclosingGroup:PROC[conversation:Conversation,transID:TransID_nullTransID,volumeID:VolumeID,lock:LockOption_[none,wait]]RETURNS[volumeGroupID:VolumeGroupID];!Unknown{volumeID};ReturnstheVolumeGroupIDofthevolumegroupcontainingthespecifiedvolume.LockingisasforGetNextGroup.Errorsuî ìïb&î ìï`tî îöî ýï^ÂîÓîÆî+î¸îþî½î ýï]î¤î—îüî‰îÎîÝî ýï[_îøîëîhîõî;îJî ìïWûî üîhî[î îpîðî",î#„î%)î),î*Òî-î2²î4Ïî9eî;î?©îCî ¿ïVT îŠîÖ îGî !î!Åî&eî+qî ìïSÏsî ýïRî ìïO˜ qî�ïO˜îƒïO˜ sî£ïO˜qî ýïMæsî ýïJ‚ qîÒïJ‚î‹ïJ‚sî)ïJ‚îïJ‚î ýïHÑ qî"ïHÑîÛïHÑsîyïHÑî^ïHÑî ýïGqîúïGî³ïGsîQïGî7ïGî ýïEm îNîÒî·î ýïC»qîQïC»î ïC»sî¨ïC»î�ïC»î ýïB qîHïB îïB sîŸïB î„ïB î ýï@Xîœ î$mî&Rð$uî ìï;B vî ýï8½ sîÜï8½qîÙï8½î�ï8½sîfï8½îÉï8½ î"; î*ïî0tî5÷î7„ î1ï7 î0 î'î(�î6 î9~ îA*îB·î1ï5nqîðï5nîÄï5nsîáï5nîEï5n î'Buîï3½î-î`îï2 î¡ îÆîîî:î#Æî(fî,Áî.eî0ýî5Oî:æ îCÉîáï0dîtîî! î)#î+Ç î5µî7šîD,îáï.¼î@îäî1î¿îbîU îï- î¤î×î#î=îáî Úî$Þî'2î,äî/¨î5Aî9î:nî<'îA&îB´îáï+cîÆ î™î=î! î#…î&Òî)Ýî,uî.Áî40î7)î9î;iî@Çîáï)¼î”îBîwî{îu î&4î)î+Rî/òî3Éî6^î:éî?uîA�îáï(î<îàî, î!î%°î&äî*Cî-<î2­î4¨î8(î<6î=Ûî@'îDÇîáï&mî îUî°îSî  î$™ î*õî0î2Þî4Òî7î;¾î@‡îC îáï$Æî-îâî‡îWîJîb vî ýï"@sîîï"@qîìï"@î”ï"@sîyï"@îÜï"@ îN î(î-†î3 î4— î<Ç î1ï ™ îZî Ì î(xî*î.3qî1òï ™î2Æï ™sî7ãï ™î8Fï ™qî>-ï ™î>æï ™îAsî1ïò uîï@î-î`îïŽîîkîªîNîrî$–î&;î(‡î-ö î6Žî;êî=Uî?îáïç vî ýïasî²ïaqî°ïaîXïasî=ïaî ïa î% î-Æî3Jî8Îî:[ î1ïºî7î iî#Û î+‡î-î1Aqî5ïºî5Õïºsî:òïºî;Uïº î1ïuîïaî-î` îï¯îîk î¼î!`î#¬î(Lî," î2Åî5î:€î?xîDÔîF@îáïî î ìï óÿÜTVm$7AccessFailed:ERROR[missingAccess:AlpineEnvironment.NeededAccess];Unknown:ERROR[what:AlpineEnvironment.UnknownType];StaticallyInvalid:ERROR;END.2sî ýïb& qî¦ïb&î`ïb&sî"ïb&î…ïb& î"Þî ýï_«qîâï_«î›ï_«sî]ï_«îÀï_«î—î ýï]0qî�ï]0îFï]0sîžï]0qî ýïYásî…ïYáwî)Èïöÿ�TVm$QAlpInstance.mesaLasteditedby:KollingonJune3,19832:43pmTaft,June2,198311:16amDIRECTORYAlpineEnvironmentUSING[Conversation,FileStore,LockFailure,NeededAccess,OperationFailure,Principal,UnknownType],AlpineFileRpcControlUSING[InterfaceRecord],AlpineOwnerRpcControlUSING[InterfaceRecord],AlpineTransactionRpcControlUSING[InterfaceRecord],AlpineVolumeRpcControlUSING[InterfaceRecord],RPCUSING[EncryptionKey];AlpInstance:CEDARDEFINITIONS=BEGINFileStore:TYPE=AlpineEnvironment.FileStore;Principal:TYPE=AlpineEnvironment.Principal;EncryptionKey:TYPE=RPC.EncryptionKey;AccessFailed:READONLYERROR[missingAccess:AlpineEnvironment.NeededAccess];LockFailed:READONLYERROR[why:AlpineEnvironment.LockFailure];OperationFailed:READONLYERROR[why:AlpineEnvironment.OperationFailure];StaticallyInvalid:READONLYERROR;Unknown:READONLYERROR[what:AlpineEnvironment.UnknownType];PossiblyDamaged:READONLYSIGNAL;Handle:TYPE=REFObject;Object:TYPE=RECORD[trans:AlpineTransactionRpcControl.InterfaceRecord,file:AlpineFileRpcControl.InterfaceRecord,owner:AlpineOwnerRpcControl.InterfaceRecord,volume:AlpineVolumeRpcControl.InterfaceRecord,otherInterfaces:LISTOFREFANY,conversation:AlpineEnvironment.Conversation,fileStore:FileStore];Create:PROCEDURE[fileStore:FileStore,caller:Principal_NIL,key:EncryptionKey_ALL[0]]RETURNS[Handle];!Failed{authenticateFailed,other,unbound}.EstablishesanewruntimebindingtotheAlpineinstancespecifiedbyfileStore,andestablishesanRPCConversationwiththeserveronwhichthatinstanceislocated.caller=NILmeanscalleristhelogged-inuserandderivesthekeyfromthepassword.Note:ifacallusingaHandlefailsviaRPC.CallFailed[unbound],thisgenerallymeansthattheserverhascrashedandrestartedsincethehandlewascreated;discardthehandle(andanyhandlesderivedfromit)andcreateanewhandle.Failed:ERROR[why:Failure];Failure:TYPE={authenticateFailed,other,unbound};authenticateFailedmeansbadcallernameorkey,unboundmeansnoexportedversionintherequiredrange,otheriseverythingelse.END.EditLoguî ìïb&î ìï`xî îöî ýï^ÊîÓîÆîûîˆîÎîÝî ýï]îPî†îîXîqî ìïZšsî ýïXëqîOïXëî5ïXësî~ïXëîâïXë î%• î+à î3ù î=bî1ïWD îZ î ýïU–qîÒïU–î·ïU–sîïU–îdïU–î ýïSèqî€ïSèîfïSèsî¯ïSèî ïSèî ýïR9qîoïR9îUïR9sî"žïR9î#ïR9î ýïP‹qî1ïP‹îïP‹sî `ïP‹î ÃïP‹î ýïNÝqîZïNÝî?ïNÝsî‰ïNÝîìïNÝî ìïL[ qîïL[îÑïL[î� sî†ïL[qî ýïJ­sî ýïGQ qîiïGQî"ïGQsîÀïGQî¥ïGQî ýïE¢ qîHïE¢îïE¢sîŸïE¢î„ïE¢î ýïCô qî ïCôîÃïCôsîaïCôqîFïCôîïCôsîŒïCôîäïCô î ýï@˜ qî¦ï@˜îzï@˜î¨sî #ï@˜î †ï@˜ î)àî ýï>ê qî³ï>êî‡ï>êîµsî0ï>êî“ï>êî#î ýï=;qî¸ï=;îŒï=;î¹sî"5ï=;î"˜ï=;î& ð$î ýï;�qî�ï;�îaï;�îŽsî! ï;�î ýï9ßqîâï9ßî¶ï9ßîãsî_ï9ßîÂï9ßî"˜î ýï81qîï81îRï81î€sî"ìï81î ýï5¯qîVï5¯îï5¯sî­ï5¯qî’ï5¯îfï5¯sîCï5¯îVï5¯î ýï3-qîèï3-î¡ï3-sî?ï3-qî$ï3-îøï3-sîï3-îï1îïð,îï/Ñîñð%îï."îµð&îï,tîqð'îï*Æqîîï*Æî§ï*ÆîÓîÒî‚sî"ï*Æîï) î�îï'j î vî ýï$èsîéï$èqîçï$èîŽï$èsîï$èî~ï$è î| î$Æî(ôî.Æqî0Sï$èî1;ï$èsî2^ï$èî3;ï$èî6I î?ÜqîAiï$èîB=ï$èsîC¯ï$èîDï$èqî1ï#@sî"ï#@î…ï#@uîï!’î-îî"íîïä îî6îûîî"Üî$�î&Íî+î0^î5Íî7§ î=pî@ îF®îáï=îH îjîfî²î#”î%‡î)jî,<î1{î2æî7Ýî;’xî=wï=î>Tï=uî?üï=îAï=îD$îGÙîáï•î-î îñî”î!î#Qî%Ýî)î+gîïçî_îµîêî€îîLî!î$î&8î6Fî8Þî>¨îBÐîE¢îáï@îÃî9îî¼î"Dî%¤î'ðî,Oî.ïî4î8¯î:ûî?YîBvîáï™îÄîaîŸîpî î$ î%Bî(sî ýïqîºïîtïsî6ïî™ïî î ýïhqî?ïhîøïhsî–ïhî{ïhî"üî&óuîïºîNîvî î#Áî'eî)î,î1Žî5¶î7©î=0îAÄîCjîáïî$î?îÀî, î#©qî ýï ‘sî…ï ‘uî ìï 5î çÿ�TVm$mInitial:Kolling:February14,19832:45pm:packagetoaidclients,inconjunctionwithAlpTransactionandAlpFile.2uî ýïa‘îžîqî9îvî!¼î$Êî(î-Uî.úî1Bî5Îî7t î>½î Ðï_é îRîõwî)ÈïöÿeTVm$6AlpFile.mesaLasteditedby:KollingonJune3,19832:44pmTaftonJune2,198311:29amDIRECTORYAlpineEnvironmentUSING[AccessRights,FileID,LockFailure,LockOption,NeededAccess,OpenFileID,OperationFailure,OwnerName,PageCount,PageRun,PropertyValuePair,RecoveryOption,ReferencePattern,UnknownType,UniversalFile,VolOrVolGroupID],AlpineFileUSING[allProperties,PropertySet,RESULTPageBuffer,standardFile,VALUEPageBuffer],AlpTransactionUSING[Handle],FileUSING[Type];AlpFile:CEDARDEFINITIONS=BEGINAccessRights:TYPE=AlpineEnvironment.AccessRights;allProperties:PropertySet=AlpineFile.allProperties;FileID:TYPE=AlpineEnvironment.FileID;LockOption:TYPE=AlpineEnvironment.LockOption;OpenFileID:TYPE=AlpineEnvironment.OpenFileID;OwnerName:TYPE=AlpineEnvironment.OwnerName;PageCount:TYPE=AlpineEnvironment.PageCount;PageRun:TYPE=AlpineEnvironment.PageRun;PropertySet:TYPE=AlpineFile.PropertySet;PropertyValuePair:TYPE=AlpineEnvironment.PropertyValuePair;RecoveryOption:TYPE=AlpineEnvironment.RecoveryOption;ReferencePattern:TYPE=AlpineEnvironment.ReferencePattern;RESULTPageBuffer:TYPE=AlpineFile.RESULTPageBuffer;standardFile:File.Type=AlpineFile.standardFile;UniversalFile:TYPE=AlpineEnvironment.UniversalFile;VALUEPageBuffer:TYPE=AlpineFile.VALUEPageBuffer;VolOrVolGroupID:TYPE=AlpineEnvironment.VolOrVolGroupID;AccessFailed:READONLYERROR[missingAccess:AlpineEnvironment.NeededAccess];LockFailed:READONLYERROR[why:AlpineEnvironment.LockFailure];OperationFailed:READONLYERROR[why:AlpineEnvironment.OperationFailure];StaticallyInvalid:READONLYERROR;Unknown:READONLYERROR[what:AlpineEnvironment.UnknownType];PossiblyDamaged:READONLYSIGNAL;Handle:TYPE=REFObject;Object:TYPE=RECORD[trans:AlpTransaction.Handle,openFileID:OpenFileID];InadditiontotheerrorsdocumentedforthecorrespondingAlpineprocedures,alloftheproceduresdefinedinthisinterfacecanalsoerrorRPC.CallFailed[RPC.CallFailure].Open:PROCEDURE[transHandle:AlpTransaction.Handle,universalFile:UniversalFile,access:AccessRights_readOnly,lock:LockOption_[intendRead,wait],recoveryOption:RecoveryOption_log,referencePattern:ReferencePattern_random]RETURNS[handle:Handle,fileID:FileID];Create:PROCEDURE[transHandle:AlpTransaction.Handle,volumeID:VolOrVolGroupID,owner:uî ìïb& î ìï`}î îöî ýï^ÔîÓîÆîûîˆîÎîÝî ýï]+îøîëî!î®îóî³qî ìïZ®sî ýïYqîOïYî5ïYsî~ïYîâïY î%€î*T î2m î:q î1ïW] îJî%h î-Þ î5<î;|î1ïU¶îËî'ê î1² î:‘î ýïT qîÖïT î¼ïT sîïT îhïT î® î'‡î4  î1ïRfî ýïP½ qî¤ïP½î‰ïP½sîÓïP½î6ïP½î ýïOqîÕïOîºïOsîïOîgïOî ìïL—qîoïL—î:ïL—îê sîïïL—qî ýïJîsî ýïG› qî½ïG›îvïG›sîïG›îúïG›î ýïEò îd îåîÊî ýïDIqîñïDIî«ïDIsîIïDIî.ïDIî ýïB  qî"ïB îÛïB sîyïB î^ïB î ýï@÷ qî8ï@÷îñï@÷sî�ï@÷îtï@÷î ýï?N qî”ï?NîMï?Nsîëï?NîÐï?Nî ýï=¥ qî}ï=¥î6ï=¥sîÔï=¥î¹ï=¥î ýï;üqî^ï;üîï;üsîµï;üîšï;üî ýï:R qî÷ï:Rî°ï:RsîNï:Rî3ï:Rî ýï8©qîíï8©î¦ï8©sîDï8©î)ï8©ð$î ýï7qî¸ï7îqï7sîï7îôï7ð!î ýï5Wqî>ï5Wî÷ï5Wsî•ï5Wîzï5Wð#î ýï3®qî7ï3®îñï3®sî�ï3®îtï3®î ýï2 îeî˜î}î ýï0\ qîþï0\î·ï0\sîUï0\î:ï0\î ýï.³qî†ï.³î?ï.³sîÝï.³îÂï.³î ýï- qîfï- îï- sî½ï- î¢ï- ð"î ýï)· qî¦ï)·îzï)·î¨sî #ï)·î †ï)· î)àî ýï( qî³ï(î‡ï(îµsî0ï(î“ï(î#î ýï&eqî¸ï&eîŒï&eî¹sî"5ï&eî"˜ï&eî& ð$î ýï$¼qî�ï$¼îaï$¼îŽsî! ï$¼î ýï#qîâï#î¶ï#îãsî_ï#îÂï#î"˜î ýï!jqîï!jîRï!jî€sî"ìï!jî ýïíqîVïíîïísî­ïíqî’ïíîfïísîCïíîVïíî ýïpqîèïpî¡ïpsî?ïpqî$ïpîøïpsîïpîïÇîïîï îñ uî ýïÌî Ûîîºîîç î"Oî$wî&à î/\î3® î:µî<°î>Tî@  î Ðï$î{î!îºîDîÒî Ÿî#ûvî ýï¨sî.ï¨qî+ï¨îÓï¨sî`ï¨îÃï¨ î î.² î7Z î@9î1ï îwîî"eî%× î-‚î/ î75î:êî1ïY îrîÿî «î+fî6-î7ºqî=>ïYî>ïYsîBÅïYîC)ïYî1ï ²îiîïvî ýï 5sîéï 5qîçï 5îŽï 5sîï 5î~ï 5 î »î/mî6sîBºÿŠTVm$YOwnerName,initialSize:PageCount,type:File.Type_standardFile,recoveryOption:RecoveryOption_log,referencePattern:ReferencePattern_random]RETURNS[handle:Handle,refUniversalFile:REFUniversalFile];Close:PROCEDURE[handle:Handle];Delete:PROCEDURE[handle:Handle];ReadPages:PROCEDURE[handle:Handle,pageRun:PageRun,pageBuffer:RESULTPageBuffer,lock:LockOption_[read,wait]];WritePages:PROCEDURE[handle:Handle,pageRun:PageRun,pageBuffer:VALUEPageBuffer,lock:LockOption_[write,wait]];ReadProperties:PROCEDURE[handle:Handle,desiredProperties:PropertySet_allProperties,lock:LockOption_[read,wait]]RETURNS[properties:LISTOFPropertyValuePair];WriteProperties:PROCEDURE[handle:Handle,properties:LISTOFPropertyValuePair,lock:LockOption_[write,wait]];LockPages:PROCEDURE[handle:Handle,pageRun:PageRun,lock:LockOption_[read,wait]];UnlockPages:PROCEDURE[handle:Handle,pageRun:PageRun];GetAccessRights:PROCEDURE[handle:Handle]RETURNS[access:AccessRights];GetLockOption:PROCEDURE[handle:Handle]RETURNS[lock:LockOption];SetLockOption:PROCEDURE[handle:Handle,lock:LockOption];GetRecoveryOption:PROCEDURE[handle:Handle]RETURNS[recoveryOption:RecoveryOption];GetReferencePattern:PROCEDURE[handle:Handle]RETURNS[referencePattern:ReferencePattern];SetReferencePattern:PROCEDURE[handle:Handle,referencePattern:ReferencePattern];GetSize:PROCEDURE[handle:Handle,lock:LockOption_[read,wait]]RETURNS[size:PageCount];SetSize:PROCEDURE[handle:Handle,size:PageCount,lock:LockOption_[write,wait]];GetUniversalFile:PROCEDURE[handle:Handle]RETURNS[universalFile:UniversalFile];UnlockVersion:PROCEDURE[handle:Handle];IncrementVersion:PROCEDURE[handle:Handle,increment:INT];END.EditLogInitial:Kolling:February14,19835:08pm:packagetoaidclients,inconjunctionwithAlpInstanceandAlpTransaction.2sî1ïb& î¦ î!u î(Óî,]î2�î4 îï`î>ï`sîBÅï`îC)ï`î1ï^×îiqî" ï^×î"àï^×sî$¼ï^×î%Ûï^× vî ýï\\sîCï\\qîAï\\îéï\\sîuï\\îØï\\îÙvî ýïYásîÞïYáqîÛïYáîƒïYásîïYáîsïYáîsvî ýïWfsî~ïWfqî|ïWfî#ïWfsî°ïWfîïWfî î%Kî+¢î1á î9lî1ïU¿î£ îOîÛî"±vî ýïSD sîáïSDqîßïSDî†ïSDsîïSDîvïSDî vî%®î,î2E î9Ïî1ïQ�î£ îOîÛî#vî ýïO" sîïO"qîïO"î¹ïO"sîEïO"î¨ïO"î"©î'áî3 î:¡î<. îDtî1ïMz îÜîiî?qî"þïMzî#ÒïMzsî(†ïMzî(éïMz qî/ÚïMzî0“ïMzî2¿sî4¾ïMzî5�ïMzvî ýïJÿsîwïJÿqîtïJÿîïJÿsî¨ïJÿî ïJÿî# î(D qî/4ïJÿî/îïJÿî2sî4ïJÿî4êïJÿî?èî1ïIX îÜîiî¢vî ýïFÝsî~ïFÝqî{ïFÝî#ïFÝsî°ïFÝîïFÝî î%Kî+¡î1áî5S î<ÿî>ŒîBbvî ýïDb sîÈïDbqîÅïDbîmïDbsîúïDbî]ïDbî!]î&•î,ëvî ýïAçsîïAçqîïAçî¬ïAçsî8ïAçîœïAçî#œqî(ßïAçî)³ïAçsî.fïAçî.ÉïAçî3P vî ýï?l sîVï?lqîTï?lîûï?lsîˆï?lîëï?lî"ëqî(.ï?lî)ï?lsî-¶ï?lî.ï?lî1‹ vî ýï<ñ sîï<ñqîï<ñîÄï<ñsîQï<ñî´ï<ñî"´î'ìî+_ vî ýï:vsîÀï:vqî¾ï:vîeï:vsîòï:vî Uï:vî%Uqî*˜ï:vî+lï:vsî0 ï:vî0ƒï:vî:¹vî ýï7ûsî…ï7ûqîƒï7ûî*ï7ûsî ·ï7ûî!ï7ûî&qî+]ï7ûî,1ï7ûsî0åï7ûî1Hï7ûî<vî ýï5€sîNï5€qîLï5€îóï5€sî €ï5€î ãï5€î%ãî+î5×vî ýï3sî¯ï3qî­ï3îTï3sîáï3îDï3îDî#|î&ï î.šî0'î3ýqî7¼ï3î8�ï3sî=Dï3î=§ï3î@Ì vî ýï0Šsîxï0Šqîvï0Šîï0Šsîªï0Šî ï0Šî î#Eî&j î-Éî1; î8çî:sî>¬vî ýï.sîï.qîï.î¶ï.sîBï.î¥ï.î#¦qî(éï.î)½ï.sî.pï.î.Óï. î7|vî ýï+” sîÐï+”qîÎï+”îvï+”sîï+”îeï+”î"fvî ýï)sî~ï)qî|ï)î$ï)sî°ï)îï)î$î)L qî0<ï)î0¦ï)sî2Hï)î2«ï)qî ýï&žsî…ï&žuî ìï#Oî çî ýï îžîqî9îvî!¼î$Êî(î-Uî.úî1Bî5Îî7t î>½îA¹ î ÐïYîtwî)ÈïöÒTVm$…AlpTransaction.mesaLasteditedbyKollingonJune3,19832:44pmTaftonJune2,198311:22amDIRECTORYAlpineEnvironmentUSING[allOwnerProperties,CommitOrAbort,FileStore,LockFailure,LockOption,NeededAccess,nullVolumeGroupID,OperationFailure,Outcome,OwnerName,OwnerPropertySet,OwnerPropertyValuePair,PageCount,TransID,UnknownType,VolumeID,VolumeGroupID],AlpInstanceUSING[Handle],AlpineTransactionUSING[RequestedOutcome];AlpTransaction:CEDARDEFINITIONS=BEGINallOwnerProperties:OwnerPropertySet=AlpineEnvironment.allOwnerProperties;FileStore:TYPE=AlpineEnvironment.FileStore;LockOption:TYPE=AlpineEnvironment.LockOption;nullVolumeGroupID:VolumeGroupID=AlpineEnvironment.nullVolumeGroupID;Outcome:TYPE=AlpineEnvironment.Outcome;OwnerName:TYPE=AlpineEnvironment.OwnerName;OwnerPropertySet:TYPE=AlpineEnvironment.OwnerPropertySet;OwnerPropertyValuePair:TYPE=AlpineEnvironment.OwnerPropertyValuePair;PageCount:TYPE=AlpineEnvironment.PageCount;RequestedOutcome:TYPE=AlpineTransaction.RequestedOutcome;TransID:TYPE=AlpineEnvironment.TransID;VolumeID:TYPE=AlpineEnvironment.VolumeID;VolumeGroupID:TYPE=AlpineEnvironment.VolumeGroupID;AccessFailed:READONLYERROR[missingAccess:AlpineEnvironment.NeededAccess];LockFailed:READONLYERROR[why:AlpineEnvironment.LockFailure];OperationFailed:READONLYERROR[why:AlpineEnvironment.OperationFailure];StaticallyInvalid:READONLYERROR;Unknown:READONLYERROR[what:AlpineEnvironment.UnknownType];PossiblyDamaged:READONLYSIGNAL;Handle:TYPE=REFObject;Object:TYPE=RECORD[inst:AlpInstance.Handle,transID:TransID];InadditiontotheerrorsdocumentedforthecorrespondingAlpineprocedures,alloftheproceduresdefinedinthisinterfacecanalsoerrorRPC.CallFailed[RPC.CallFailure].Atthemoment,AlpineignoresthetransIDandlockparametersforGetVolumeGroup,GetNextVolumeGroup,andGetEnclosingVolumeGroup.Create:PROCEDURE[instHandle:AlpInstance.Handle,createLocalWorker:BOOLEAN_TRUE]RETURNS[handle:Handle];CreateWithTransID:PROCEDURE[instHandle:AlpInstance.Handle,transID:TransID,createLocalWorker:BOOLEAN_TRUE]RETURNS[handle:Handle];CreateWorker:PROCEDURE[handle:Handle,coordinator:FileStore];Finish:PROCEDURE[handle:Handle,requestedOutcome:RequestedOutcome,continue:BOOLEAN_FALSE]RETURNS[outcome:Outcome];AssertAlpineWheel:PROCEDURE[handle:Handle,enable:BOOLEAN];uî ìïb&î ìï`wî îöî ýï^ÉîÓîÆîûîˆîÎîÝî ýï]îøîëî!î®îóî³qî ìïZ—sî ýïXéqîOïXéî5ïXésî~ïXéîâïXéî)) î3ù î:C î1ïWA î4 î#žî1î<9î1ïUš î¦î&€î6P î=¯î1ïSó îøî#+î ýïRD qîžïRDî„ïRDsîÍïRDî0ïRDî ýïP•qîsïP•îYïP•sî¢ïP•îïP•î ìïNqî ïNî×ïNî‡ sî ŒïNqî ýïLdsî ýïIîfî#èî%Íð%î ýïGX qîiïGXî"ïGXsîÀïGXî¥ïGXî ýïE© qî"ïE©îÛïE©sîyïE©î^ïE©î ýïCûîœ î$mî&Rð$î ýïBLqîiïBLî#ïBLsîÁïBLî¦ïBLî ýï@� qî”ï@�îMï@�sîëï@�îÐï@�î ýï>îqîùï>îî²ï>îsîPï>îî5ï>îð#î ýï=@qîîï=@î¨ï=@sîFï=@î!+ï=@ð)î ýï;‘ qî}ï;‘î6ï;‘sîÔï;‘î¹ï;‘î ýï9âqî«ï9âîdï9âsîï9âîçï9âð#î ýï83qîúï83î³ï83sîQï83î7ï83î ýï6…qîQï6…î ï6…sî¨ï6…î�ï6…î ýï4Ö qîHï4Öîï4ÖsîŸï4Öî„ï4Öî ýï1y qî¦ï1yîzï1yî¨sî #ï1yî †ï1y î)àî ýï/Ê qî³ï/Êî‡ï/Êîµsî0ï/Êî“ï/Êî#î ýï.qî¸ï.îŒï.î¹sî"5ï.î"˜ï.î& ð$î ýï,lqî�ï,lîaï,lîŽsî! ï,lî ýï*¾qîâï*¾î¶ï*¾îãsî_ï*¾îÂï*¾î"˜î ýï)qîï)îRï)î€sî"ìï)î ýï&�qîVï&�îï&�sî­ï&�qî’ï&�îfï&�sîCï&�îVï&�î ýï$ qîèï$ î¡ï$ sî?ï$ qî$ï$ îøï$ sîï$ îuï$ î�î+<î0Àuî ýï ­î Ûîîºîîç î"Oî$wî&à î/\î3® î:µî<°î>Tî@  î Ðïî{î!îºîDîÒî Ÿî#ûî8ßî:Òî=îB î Ðï^îzîÆîáî„î~ î%\î'„î2‡î@pî Ðï·vî ýï4sîéï4qîçï4îŽï4sî…ï4îèï4 î ^î- qî9Rï4î: ï4sî?\ï4qî@éï4îA¢ï4sîDï4qî1ï�sî"ï�î…ï�î…vî ýï sîìï qîêï î’ï sî ˆï î ëï î(aî5 î:’î1ïcqîxïcî1ïcsî$‚ïcqî&ïcî&Èïcsî);ïcqî*"ïcî*öïcsî0ïcî0wïcî5wvî ýïá sîoïáqîlïáîïásî¡ïáîïáî"î'< î/ vî ýï^sî¥ï^qî'ï^îÏï^sî\ï^î¿ï^î¿î"÷î/ î;¬qîAÌï^îB…ï^sîGÖï^qî1ï ·sîÏï ·qî¶ï ·îŠï ·sî=ï ·î¡ï ·î"µvî ýï 5sîFï 5qîDï 5îëï 5sîxï 5îÛï 5î$Ûî*qî.òï 5î/«ï 5sî4’ï 5î4õï 5ÁTVm$±GetVolumeGroup:PROCEDURE[handle:Handle,volumeGroupID:VolumeGroupID,lock:LockOption_[none,wait]]RETURNS[volumes:LISTOFVolumeID];GetNextVolumeGroup:PROCEDURE[handle:Handle,previousGroup:VolumeGroupID_nullVolumeGroupID,lock:LockOption_[none,wait]]RETURNS[volumeGroupID:VolumeGroupID];GetEnclosingVolumeGroup:PROCEDURE[handle:Handle,volumeID:VolumeID,lock:LockOption_[none,wait]]RETURNS[volumeGroupID:VolumeGroupID];CreateOwner:PROCEDURE[handle:Handle,volumeGroupID:VolumeGroupID,owner:OwnerName,properties:LISTOFOwnerPropertyValuePair,enforceTotalQuota:BOOLEAN_FALSE]RETURNS[spaceLeftOnVolumeGroup:PageCount];DestroyOwner:PROCEDURE[handle:Handle,volumeGroupID:VolumeGroupID,owner:OwnerName];ReadNextOwner:PROCEDURE[handle:Handle,volumeGroupID:VolumeGroupID,previousOwner:OwnerName_NIL,desiredProperties:OwnerPropertySet_allOwnerProperties]RETURNS[owner:OwnerName,properties:LISTOFOwnerPropertyValuePair];ReadOwnerProperties:PROCEDURE[handle:Handle,volumeGroupID:VolumeGroupID,owner:OwnerName,desiredProperties:OwnerPropertySet_allOwnerProperties]RETURNS[properties:LISTOFOwnerPropertyValuePair];WriteOwnerProperties:PROCEDURE[handle:Handle,volumeGroupID:VolumeGroupID,owner:OwnerName,overCommitQuotasIfNeeded:BOOLEAN_FALSE,properties:LISTOFOwnerPropertyValuePair];ReadOwnerDBProperties:PROCEDURE[handle:Handle,volumeGroupID:VolumeGroupID]RETURNS[nOwners,nEntriesUsed,nEntries:NAT,totalQuota,totalSpaceInUse,volumeGroupSize:PageCount];ReorganizeOwnerDB:PROCEDURE[handle:Handle,volumeGroupID:VolumeGroupID,nEntries:NAT];END.EditLogInitial:Kolling:February14,19833:56pm:packagetoaidclients,inconjunctionwithAlpInstanceandAlpFile.2vî ýïb& sîtïb&qîrïb&îïb&sî¦ïb&î ïb&î$ î)A î4? î?hî1ï` îÜîiî—qî#Vï`î$*ï`sî(Þï`î)Aï`qî/(ï`î/áï`î2 sî4 ï`î5 ï`vî ýï^sîaï^qî_ï^îï^sî!“ï^î!÷ï^î&÷î,/ î6/ îAî1ï\\î®î# î*Ìî,Yî0†qî4Fï\\î5ï\\sî9Íï\\î:0ï\\ î1ïZµvî ýïX:sî8ïX:qî6ïX:îÝïX:sî$jïX:î$ÍïX:î)Îî/î6 î=>î@° î1ïV“î¾îëqî«ïV“îïV“sî!2ïV“î!•ïV“ î,“vî ýïT sîÕïTqîÓïTîzïTsîïTîjïTî!kî&¢ î1  î<Éî1ïRp î¦ qî!—ïRpî"PïRpî$|sî&{ïRpî'�ïRpî6KqîBrïRpîC,ïRpsî1ïPÉqî¾ïPÉîwïPÉsî\ïPÉqîCïPÉîïPÉsîÊïPÉî-ïPÉî/U vî ýïNN sî�ïNNqî�ïNNî5ïNNsîÂïNNî%ïNNî"%î'] î2[ î=„î1ïL§ vî ýïJ, sîÚïJ,qîØïJ,î€ïJ,sî ïJ,îoïJ,î#pî(¨ î3¥ î>Ï î1ïH„îNqîÛïH„îÃïH„sîæïH„îÃïH„î*î5„î7qî1ïFÝsî¸ïFÝîïFÝî î%7 qî,(ïFÝî,áïFÝî/ sî1 ïFÝî2 ïFÝvî ýïDbsîÿïDbqîýïDbî¥ïDbsî!1ïDbî!”ïDbî&•î+Í î6Ê îAôî1ïB» î¦î%æî1hî2õqî1ïAsî¸ïAîïA qî ïAîÅïAî!ñsî#ðïAî%ïAvî ýï>˜sîcï>˜qî`ï>˜îï>˜sî!”ï>˜î!øï>˜î&øî,0 î7- îBWî1ï<ñ î¦qî,äï<ñî-žï<ñsî2îï<ñqî4{ï<ñî54ï<ñsî8ï<ñî8öï<ñ qî?æï<ñî@ ï<ñîBËsî1ï;Jvî ýï8Ïsîï8Ïqîï8Ïî«ï8Ïsî#8ï8Ïî#›ï8Ïî(›î-Ó î8Ñ qî1ï7'sî¸ï7'îï7'îD î'%qî-ï7'î-ÿï7'sî/Œï7'î0hï7' î7�î1ï5€îô vî ýï3sî‘ï3qî�ï3î7ï3sî Ãï3î!&ï3î&'î+_ î6\ îA†qî1ï1^sî¦ï1^î ï1^qî ýï.ãsî…ï.ãuî ìï+”î çî ýï(Eîžîqî9îvî!¼î$Êî(î-Uî.úî1Bî5Îî7t î>½îA¹ î Ðï&žîtwî)ÈïöXTVm$áÿ TIMESROMANþæÿ HELVETICAþŸÿ TIMESROMANþŸÿ TIMESROMANþŸÿLOGOü´ÿLAURELþŸÿ TIMESROMANþŸÿ TIMESROMANþæÿ TIMESROMANþYg  $ 2-Ø; èHIV“d Cq© ›‹ ¥—¶šz¡W¨î°—µ½ ‰È ¦Ò òÝ 'èœé òóô ˜ý y ÚfÖa'. í7ò>j/A%?› 4ÄÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿAlpineInterfaces.etc 7-Jun-83 17:45:56