DIRECTORY CrAEToAE, AEToCrAE, AlpineP2202V2, AlpineV2ServerInternal, AlpineEnvironment, AlpineEnvironmentP2201V1, AlpineFile, AlpineOwner, AlpineTransaction, AlpineVolume; AlpineV2ServerBImpl: CEDAR PROGRAM IMPORTS CrAEToAE, AEToCrAE, AlpineV2ServerInternal, AlpineOwner, AlpineVolume EXPORTS AlpineP2202V2 ~ BEGIN OPEN CTA: CrAEToAE, ATC: AEToCrAE, AE: AlpineEnvironment; DoWork: PROC [work: PROC] ~ AlpineV2ServerInternal.DoWork; Conversation: PROC [ session: AlpineP2202V2.Session ] RETURNS [ conv: AlpineEnvironment.Conversation] ~ AlpineV2ServerInternal.Conversation; ReadOwnerProperties: PUBLIC AlpineP2202V2.ReadOwnerPropertiesType ~ { Work: PROC ~ TRUSTED { properties _ ATC.OwnerProperties[AlpineOwner.ReadProperties [Conversation[session], CTA.TransID[transID], CTA.VolumeGroupID[volumeGroupID], CTA.OwnerName[owner], CTA.OwnerPropertySet[desiredProperties]]]; }; DoWork[Work]; replyVerifier _ session.verifier; }; WriteOwnerProperties: PUBLIC AlpineP2202V2.WriteOwnerPropertiesType ~ { Work: PROC ~ TRUSTED { AlpineOwner.WriteProperties [Conversation[session], CTA.TransID[transID], CTA.VolumeGroupID[volumeGroupID], CTA.OwnerName[owner], CTA.OwnerProperties[properties], enforceTotalQuota]; }; DoWork[Work]; replyVerifier _ session.verifier; }; CreateOwner: PUBLIC AlpineP2202V2.CreateOwnerType ~ { Work: PROC ~ TRUSTED { spaceLeftOnVolumeGroup _ ATC.PageCount[AlpineOwner.Create [Conversation[session], CTA.TransID[transID], CTA.VolumeGroupID[volumeGroupID], CTA.OwnerName[owner], CTA.OwnerProperties[properties], enforceTotalQuota]]; }; DoWork[Work]; replyVerifier _ session.verifier; }; DestroyOwner: PUBLIC AlpineP2202V2.DestroyOwnerType ~ { Work: PROC ~ TRUSTED { AlpineOwner.Destroy[Conversation[session], CTA.TransID[transID], CTA.VolumeGroupID[volumeGroupID], CTA.OwnerName[owner]]; }; DoWork[Work]; replyVerifier _ session.verifier; }; NextOwner: PUBLIC AlpineP2202V2.NextOwnerType ~ { Work: PROC ~ TRUSTED { aowner: AE.OwnerName; aproperties: LIST OF AE.OwnerPropertyValuePair; [aowner, aproperties] _ AlpineOwner.ReadNext[Conversation[session], CTA.TransID[transID], CTA.VolumeGroupID[volumeGroupID], CTA.OwnerName[previousOwner], CTA.OwnerPropertySet[desiredProperties]]; owner _ ATC.OwnerName[aowner]; properties _ ATC.OwnerProperties[aproperties]; }; DoWork[Work]; replyVerifier _ session.verifier; }; ReadOwnerDBProperties: PUBLIC AlpineP2202V2.ReadOwnerDBPropertiesType ~ { Work: PROC ~ TRUSTED { atotalQuota, atotalSpaceInUse, avolumeGroupSize: AE.PageCount; [nOwners, nEntriesUsed, nEntries, atotalQuota, atotalSpaceInUse, avolumeGroupSize] _ AlpineOwner.ReadDBProperties[Conversation[session], CTA.TransID[transID], CTA.VolumeGroupID[volumeGroupID]]; totalQuota _ ATC.PageCount[atotalQuota]; totalSpaceInUse _ ATC.PageCount[atotalSpaceInUse]; volumeGroupSize _ ATC.PageCount[avolumeGroupSize]; }; DoWork[Work]; replyVerifier _ session.verifier; }; ReorganizeOwnerDB: PUBLIC AlpineP2202V2.ReorganizeOwnerDBType ~ { Work: PROC ~ TRUSTED { AlpineOwner.ReorganizeDB[Conversation[session], CTA.TransID[transID], CTA.VolumeGroupID[volumeGroupID], nEntries]; }; DoWork[Work]; replyVerifier _ session.verifier; }; UnlockOwnerDB: PUBLIC AlpineP2202V2.UnlockOwnerDBType ~ { Work: PROC ~ TRUSTED { AlpineOwner.Unlock[Conversation[session], CTA.TransID[transID], CTA.VolumeGroupID[volumeGroupID]]; }; DoWork[Work]; replyVerifier _ session.verifier; }; GetNextGroup: PUBLIC AlpineP2202V2.GetNextGroupType ~ { Work: PROC ~ TRUSTED { volumeGroupID _ ATC.VolumeGroupID[AlpineVolume.GetNextGroup[Conversation[session], CTA.TransID[transID], CTA.VolumeGroupID[previousGroup], CTA.LockOption[lock]]]; }; DoWork[Work]; replyVerifier _ session.verifier; }; GetGroup: PUBLIC AlpineP2202V2.GetGroupType ~ { Work: PROC ~ TRUSTED { volumes _ ATC.VolumeIDs[AlpineVolume.GetGroup[Conversation[session], CTA.TransID[transID], CTA.VolumeGroupID[volumeGroupID], CTA.LockOption[lock]]]; }; DoWork[Work]; replyVerifier _ session.verifier; }; GetEnclosingGroup: PUBLIC AlpineP2202V2.GetEnclosingGroupType ~ { Work: PROC ~ TRUSTED { volumeGroupID _ ATC.VolumeGroupID[AlpineVolume.GetEnclosingGroup[Conversation[session], CTA.TransID[transID], CTA.VolumeID[volumeID], CTA.LockOption[lock]]]; }; DoWork[Work]; replyVerifier _ session.verifier; }; AccessFailed: PUBLIC AlpineP2202V2.AccessFailedType ~ CODE; AuthenticationError: PUBLIC AlpineP2202V2.AuthenticationErrorType ~ CODE; LockFailed: PUBLIC AlpineP2202V2.LockFailedType ~ CODE; ConnectionError: PUBLIC AlpineP2202V2.ConnectionErrorType ~ CODE; StaticallyInvalid: PUBLIC AlpineP2202V2.StaticallyInvalidType ~ CODE; PossiblyDamaged: PUBLIC AlpineP2202V2.PossiblyDamagedType ~ CODE; OperationFailed: PUBLIC AlpineP2202V2.OperationFailedType ~ CODE; Unknown: PUBLIC AlpineP2202V2.UnknownType ~ CODE; END. zAlpineV2ServerBImpl.mesa Carl Hauser, November 13, 1987 1:33:18 pm PST Owner DB Manipulations Volume Manipulations Κ7˜šœ™Icode™-—J™šΟk ˜ Kšœ ˜ Kšœ ˜ Kšœ˜Kšœ˜K˜K˜Kšœ ˜ Kšœ ˜ K˜Kšœ ˜ K˜—K˜KšΟnœœ˜"KšœF˜MKšœ˜Kšœ˜K˜Kšœœ œ œ˜9K˜šžœœœ"˜:K˜—šž œœ$œP˜ŽK˜K˜—šœœ™šžœ2˜Ešžœœœ˜KšœΜ˜ΜK˜—K˜ K˜!Kšœ˜K˜—šžœ3˜Gšžœœœ˜KšœΆ˜ΆK˜—K˜ K˜!Kšœ˜K˜—šž œ*˜5šžœœœ˜KšœΥ˜ΥK˜—K˜ K˜!Kšœ˜K˜—šž œ+˜7šžœœœ˜Kšœy˜yK˜—K˜ K˜!Kšœ˜K˜—šž œ(˜1šžœœœ˜K˜Kšœ œœœ˜/Kšœ$žœ—˜ΓK˜Kšœ.˜.K˜—K˜ K˜!Kšœ˜K˜—šžœ4˜Išžœœœ˜Kšœ>˜>KšœažœP˜ΑKšœ(˜(Kšœ2˜2Kšœ2˜2K˜—K˜ K˜!Kšœ˜K˜—šžœ0˜Ašžœœœ˜Kšœ ž œZ˜rK˜—K˜ K˜!Kšœ˜K˜—šž œΟb œ˜9šžœœœ˜Kšœ žœP˜bK˜—K˜ K˜!Kšœ˜K˜——™šž œ+˜7šžœœœ˜Kšœ.žœs˜’K˜—K˜ K˜!Kšœ˜K˜—šžœ'˜/šžœœœ˜Kšœ$žœo˜”K˜—K˜ K˜!Kšœ˜K˜—šžœ0˜Ašžœœœ˜Kšœ.žœn˜K˜—K˜ K˜!Kšœ˜K˜—Kšœœ"œ˜;Kšœœ)œ˜IKšœ œ œ˜7Kšœœ%œ˜AKšœœ'œ˜EKšœœ%œ˜AKšœœ%œ˜Ašœ œœ˜1K˜——Kš˜—…—ͺ[