[Agora-System](/sqedw7tHRye1RoAt5O108A) --- [API](/TreDITwVTiK_KRemt9QOLA) --- [Message Sequences](/AUbhB5KxSb2jQJBloKtC1g) --- [Asset (Proposal)](/cICGuug-Tde1sGuvpsBAJQ) --- [PoC Definition](/aSqmHZ4uRW-iC9N_Pesd5g) --- [Old Stuff](/B4Nn8Zn9RVyGJDk4bHYHbw) --- [Demo](/rAv27FvBQXmv_rLpKQB25w) # AGORA PoC v0.2 | Message Sequences [toc] ## Template ```plantuml actor CLI as CLI order 0 actor aGUIra as Client order 10 participant Keeper as Keep order 20 participant Marketplace as MP order 30 participant SearchEngine as SE order 40 participant AssetManager as AM order 50 participant ExecutionManager as EM order 60 participant NodeExecutor as NE order 70 ``` ## Register at $n-1$ ```plantuml participant NewComponent as nc participant HigherLevelComponent as hlc participant OtherComponents as oc nc -> hlc: POST /register: Credentials hlc -> nc: GET /config nc --> hlc: ComponentMetadataInfo [without CID] hlc --> nc: RegistrationSuccessfulMessage(CID) group optional hlc -> oc: POST AdvertiseNewComponent(Message) end alt registration exception hlc --> nc: RegistrationFailed end ``` ## Unregister from $n-1$ ```plantuml participant LowerLevelComponent as nc participant HigherLevelComponent as hlc participant OtherComponents as oc nc -> hlc: POST RequestUnregistration(Credentials) hlc --> nc: UnregistrationSuccessfulMessage group optional hlc -> oc: AdvertiseUnregistration(Message) end ``` ## Pull Update of Metadata from $n-1$ ```plantuml participant HigherLevelComponent as hlc order 20 participant LowerLevelComponent as llc order 30 hlc -> llc: GET GetMetadata() llc --> hlc: Metadata ``` ## Push Update of Metadata to $n-1$ ```plantuml participant LowerLevelComponent as llc order 20 participant HigherLevelComponent as hlc order 30 llc -> hlc: POST PushNewMetadata() ``` ## Keeper: List Marketplaces ```plantuml actor aGUIra as Client order 10 participant Keeper as Keep order 20 Client -> Keep: GET ListMarketplaces() Keep --> Client: Marketplace[] ``` ## Ban Rules ### Create / Update Ban-Rule to Ban-Rule-List for $n+1$ Components ```plantuml actor ComponentManager as mgrorder 10 participant LowerLevelComponent as llc order 30 participant HigherLevelComponent as hlc order 20 participant OtherComponents as oc order 40 mgr -> hlc: POST AddBanRule(Credentials, Rule) hlc -> llc !!: BanAffectedNotification hlc --> mgr: AddBanRuleSuccessful group optional hlc -> oc: BanSpokenOutNotification(URI) end ``` + unimportant error messages are not listed (like "ruleset couldn't be parsed") ### Delete Ban-Rule to Ban-Rule-List for $n+1$ Components ```plantuml actor ComponentManager as mgrorder 10 participant HigherLevelComponent as hlc order 20 mgr -> hlc: RemoveBanRule(Credentials, Rule) hlc --> mgr: RemoveBanRuleSuccessful ``` + unimportant error messages are not listed (like "ruleset couldn't be parsed") ## Get Version ```plantuml actor Client as client participant Component as comp client -> comp: GetVersion() comp --> client: Version ``` ## Get Metadata ```plantuml actor Client as client participant Component as comp client -> comp: GetMetadata() comp --> client: Metadata ``` ## Get Configuration ```plantuml actor Client as client participant Component as comp client -> comp: GetConfiguration() comp --> client: Configuration ``` ## Get Certificate ```plantuml actor Client as client participant Component as comp client -> comp: GetCertificate() comp --> client: Certificate ``` ## Join Logical Keeper [Pending] ```plantuml actor NewKeeperAdmin as nka participant ExistingLogicalKeeper as elk order 20 participant NewKeeper as nk order 10 nk -> elk: JoinLogicalKeeper(Ceretificate) ``` ## Execute Query [Pending] Premise: + authentication is done ```plantuml actor aGUIra as Client order 10 participant Marketplace as MP order 30 participant AssetManager as AM order 50 'collections DataAsset as Asset order 55 collections Asset as Asset order 55 participant ExecutionManager as EM order 60 participant NodeExecutor1 as NE order 70 collections NodeExecutor2 as NENext order 85 participant ExecutionPlatform as EP order 80 participant ExecutionPlatform2 as EPNext order 90 Client -> EM: SubmitAgoraQuery(Query) activate EM EM -> MP: StartTransaction(User) MP --> EM: BillingTxInfo EM --> Client: AgoraQueryLocation(ID) EM -> AM: GetAssetMetadata AM --> EM: AssetMetadata EM -> NE: GetMetadata NE --> EM: Metadata EM -> NENext: GetMetadata NENext --> EM: Metadata 'Note (Jorge): Makes sure all the assets exists and can be consumed, plus the stats to perform optimizations' EM -> NE: SubmitAgoraXR(ExecutionRepresentation) ', BillingTxInfo' activate NE EM -> MP: AddBillingTxStep(Metrics, BillingTxInfo) deactivate EM group optional NE -> AM: GetAssetMetadata AM --> NE: AssetMetadata 'Note(Jorge): Some additional metadata the Node Executor might require, it is a bottleneck' end NE -> NENext: SubmitAgoraXR(ExecutionRepresentation) activate NENext alt fetch data beforehands (Example of Dataset) 'NE -> Asset: GetData (GetAsset)' 'Note(Jorge): Get Access/Credentials to use the asset' 'Note (Jorge): Asset Manager gives access and the Data' NE -> AM: GetData (GetAsset) AM --> NE: Data/Credentials/Human 'Discuss about what the get asset for each case is' end NE -> EP: RunQuery(Query [, Data]) deactivate NE activate EP 'NE -> MP: AddBillingTxStep(Metrics, BillingTxInfo) ... alt fetch data just-in-time EP -> Asset: GetData Asset --> EP: Data end ... group repeat NENext -> EPNext: RunQuery(Query [, Data]) activate EPNext ... alt fetch data just-in-time EPNext -> Asset: GetData Asset --> EPNext: Data end ... EP --> NE: Response deactivate EP ... EPNext --> NENext: Response deactivate EPNext NE <-> NENext: SendData(Data) ... end NENext -> AM: WriteOutput 'As a private asset, only the user who triggered the query has access' deactivate NENext AM -> Asset: PutData group loop until done Client -> AM: CheckIfUpdated AM --> Client: CheckIfUpdatedResponse end ``` + Query includes AssetURIs + Output Asset is + Assumptions: + More than one Execution Node is feasible, but details must be defined for such "case", for instance, "orchestration", aggregated or final results + Assets involved in the Query are already + Feedback + [x] think about other kinds of assets + code, that needs to be executed on an ExecutionPlatform + [ ] notification of users + maybe via e-mail + Final result is sent to a known new Data/Storage Asset, the user can access that asset. Explicitly defined in format and place by the user. + Intermediate results and data can be transfered either between Execution Platforms, when possible, or through the Node Executors. + This information should be in the Metadata ## Create Pipeline Asset :::danger Review the Asset Registration Process at [Register Asset](/AUbhB5KxSb2jQJBloKtC1g#Register-Asset) ::: Assumption: The goal of a Pipeline Asset (which is a special Asset) is to "run/execute" it within Agora at some point in the future. The Pipeline Manager is a specialized Asset Manager for managing those Pipeline Assets. Validation is done in two phases, first phase is done in the aGUIra composer. Second phase is optional for the Agora Ecosystem with Execution Layer. prerequisites: + client assumes to know assets already ```plantuml actor aGUIra as Client order 10 collections AssetManager as AM order 50 participant PipelineManager as PM order 48 participant ExecutionManager as EM order 60 collections NodeExecutor as NE order 70 Client -> PM: POST /assetmanager/asset activate PM 'check whether all assets exist and get metadata' PM -> EM: POST /executionmanager/execute/dryrun activate EM EM -> AM: GET /assetmanager/asset/:id activate AM AM --> EM: Metadata deactivate AM EM -> NE: GET /nodeexecutor/asset/:id activate NE NE --> EM: Metadata deactivate NE EM --> PM: DryRunResult deactivate EM PM --> Client: CreateAssetResult deactivate PM ``` ## CRUD Operations over an Asset :::warning This is a preliminary version, meant to test the initial SimpleMetadata schema. Valid until 02/May/2022. ::: ### Asset Registration at Asset Manager (Create) Assuming one AssetManager is registered in multiple Marketplaces. ```plantuml actor aGUIra as Client order 10 participant AssetManager as AM order 50 Client -> AM: POST(Metadata) /assets AM -> AM: Valid registration group if successful AM -> Client: Metadata end ``` ### Search Engine Crawling ```plantuml participant SearchEngine as SE order 30 participant Keeper as KE order 40 participant AssetManager as AM order 60 collections Marketplaces as MP order 50 SE -> KE: GET /marketplaces KE --> SE: 200 List<Marketplace> SE -> MP: GET /assetmanagers MP --> SE: 200 List<AssetManager> SE -> AM: GET /assets AM --> SE: 200 List<AssetMetadata> SE -> SE: Index Entries ```