-- AlpineRemoteExportImpl.mesa -- Last edited by -- MBrown on February 1, 1984 3:34:05 pm PST -- Kolling on June 3, 1983 5:57 pm -- NOTES -- If calls to these procedures are FORKed, there is no way for anyone outside of this --module to determine whether or not exporting has succeeded. But there doesn't seem --to be anything to do but call a wizard when export fails, anyway. -- Repeated export failure due to communications problems should be noted in an --activity log. DIRECTORY AlpineDebugRpcControl, AlpineFileRpcControl, AlpineOwnerRpcControl, AlpineVolumeRpcControl, AlpineControl USING [], AlpineIdentity USING [myFileStore, myEncryptionKey], AlpineTransactionRpcControl, AlpineTransMgrRpcControl, FilePrivate, RPC, Process; AlpineRemoteExportImpl: PROGRAM IMPORTS AlpineDebugRpcControl, AlpineFileRpcControl, AlpineOwnerRpcControl, AlpineVolumeRpcControl, AlpineIdentity, AlpineTransactionRpcControl, AlpineTransMgrRpcControl, FilePrivate, RPC, Process EXPORTS AlpineControl = BEGIN version: RPC.VersionRange = [3, 3]; exportRetryInterval: Process.Ticks ← Process.SecondsToTicks[60]; ExportInterfaces: PUBLIC PROC [] = { AlpineTransMgrExportProcess[]; AlpineTransactionExportProcess[]; AlpineDebugExportProcess[]; AlpineFileExportProcess[]; AlpineOwnerExportProcess[]; AlpineVolumeExportProcess[]; }; AlpineTransMgrExportProcess: PROC [] = { DO { AlpineTransMgrRpcControl.ExportInterface[ interfaceName: [type: "AlpineTransMgr.alpine", instance: AlpineIdentity.myFileStore, version: version], user: AlpineIdentity.myFileStore, password: AlpineIdentity.myEncryptionKey ! RPC.ExportFailed => { IF why = communications THEN GOTO Wait }]; RETURN; EXITS Wait => Process.Pause[exportRetryInterval]; } ENDLOOP; }; AlpineTransactionExportProcess: PROC [] = { DO { AlpineTransactionRpcControl.ExportInterface[ interfaceName: [type: "AlpineTransaction.alpine", instance: AlpineIdentity.myFileStore, version: version], user: AlpineIdentity.myFileStore, password: AlpineIdentity.myEncryptionKey ! RPC.ExportFailed => { IF why = communications THEN GOTO Wait }]; RETURN; EXITS Wait => Process.Pause[exportRetryInterval]; } ENDLOOP; }; AlpineDebugExportProcess: PROC [] = { DO { AlpineDebugRpcControl.ExportInterface[ interfaceName: [type: "AlpineDebug.alpine", instance: AlpineIdentity.myFileStore, version: version], user: AlpineIdentity.myFileStore, password: AlpineIdentity.myEncryptionKey, parameterStorage: [gc: FilePrivate.stdPZone] ! RPC.ExportFailed => { IF why = communications THEN GOTO Wait }]; RETURN; EXITS Wait => Process.Pause[exportRetryInterval]; } ENDLOOP; }; AlpineFileExportProcess: PROC [] = { DO { AlpineFileRpcControl.ExportInterface[ interfaceName: [type: "AlpineFile.alpine", instance: AlpineIdentity.myFileStore, version: version], user: AlpineIdentity.myFileStore, password: AlpineIdentity.myEncryptionKey, parameterStorage: [gc: FilePrivate.stdPZone] ! RPC.ExportFailed => { IF why = communications THEN GOTO Wait }]; RETURN; EXITS Wait => Process.Pause[exportRetryInterval]; } ENDLOOP; }; AlpineOwnerExportProcess: PROC [] = { DO { AlpineOwnerRpcControl.ExportInterface[ interfaceName: [type: "AlpineOwner.alpine", instance: AlpineIdentity.myFileStore, version: version], user: AlpineIdentity.myFileStore, password: AlpineIdentity.myEncryptionKey, parameterStorage: [gc: FilePrivate.stdPZone] ! RPC.ExportFailed => { IF why = communications THEN GOTO Wait }]; RETURN; EXITS Wait => Process.Pause[exportRetryInterval]; } ENDLOOP; }; AlpineVolumeExportProcess: PROC [] = { DO { AlpineVolumeRpcControl.ExportInterface[ interfaceName: [type: "AlpineVolume.alpine", instance: AlpineIdentity.myFileStore, version: version], user: AlpineIdentity.myFileStore, password: AlpineIdentity.myEncryptionKey, parameterStorage: [gc: FilePrivate.stdPZone] ! RPC.ExportFailed => { IF why = communications THEN GOTO Wait }]; RETURN; EXITS Wait => Process.Pause[exportRetryInterval]; } ENDLOOP; }; END.--AlpineRemoteExportImpl