# Distribution Working Group - [Intro for Leads](olympia/migration.md) ## Tasks - **Bounty**: [Collect info for group reports](https://discord.com/channels/811216481340751934/943152435432669266/960206661753143367) - Develop tools to implement [Quality of Service](giza/README.md#quality-of-service), https://github.com/Joystream/community-repo/issues/656 - Deputy role: Based on available buckets, which channels should be distributed where? - Create DP map: [discussion](https://discord.com/channels/811216481340751934/813361923172335648/939636962925641868) ![Telemtry](img/telemetry-map.png) Image source: https://telemetry.joystream.org/#/Joystream ## Olympia Reports now on [Notion](https://www.notion.so/joystream/Distribution-1f4cfbbb2e934c79bf20b8db7f019d32) ## Giza With [release of the Giza Testnet](https://blog.joystream.org/giza-released/) selected channels were [migrated from Sumer](https://github.com/traumschule/community-repo/tree/patch-2/working-groups/distributors/Sumer-Giza-migration) previous IPFS based storage system to complete in-house hosting with [storage nodes](/helpdesk/tree/master/roles/distributors) for bigger portions of assets and local [distribution nodes](/helpdesk/tree/master/roles/distributors). ![Giza Testnet](img/joystream-org-giza.png) Details about inception of the group are reported [here](https://pioneer.joystreamstats.live/#/forum/threads/928?replyIdx=12) (@freakstatic [assigned](https://pioneer.joystreamstats.live/#/forum/threads/917?replyIdx=14&page=2) this task to @l1dev who handed it @ilich). - Lead: [@l1dev](https://pioneer.joystreamstats.live/#/proposals/1112) ([Concept](Distribution_Concept.md)) - Contact: [#distributors](https://discord.com/channels/811216481340751934/933726271832227911) ### Reports - [Giza 42](giza1.md) ## Tools - GraphQL Playground comes with every [Query node](https://github.com/Joystream/joystream/tree/masyer/query-node): https://hydra.joystream.org/graphql (see [Queries](#queries) below) ![Distribution Families](img/bucket1.png) ![Storage Buckets](img/bucket2.png) - Workers: https://joystreamstats.live/tokenomics (look for `distributionWorkingGroup`) ![](img/jsstats-dwg.png) - Test availability of bags on all nodes: https://joystreamstats.live/distribution ![](img/jsstats-distribution.png) ### Queries Query nodes accept a specific [syntax](https://graphql.org/learn/queries/). Each query takes optional `offset` and `limit` arguments (up to 10k depending on setup). When pasting a query he `PRETTIFY` button in graphql expands it. `query { distributionBucketOperators (limit: 2, offset: 3) { workerId } }` This returns workers 4 and 7 (see sorting below). Note that features like advanced filtering are not in scope and need to be implemented client side. For more details start a [history lesson](https://github.com/Joystream/joystream/issues/358). Do not miss to try below queries. #### Sorting queries ``` orderBy: [DistributionBucketOperatorOrderByInput!] enum DistributionBucketOperatorOrderByInput { createdAt_ASC createdAt_DESC updatedAt_ASC updatedAt_DESC deletedAt_ASC deletedAt_DESC distributionBucket_ASC distributionBucket_DESC workerId_ASC workerId_DESC status_ASC status_DESC metadata_ASC metadata_DESC } ``` #### Distribution Families with endpoint operators ``` query { distributionBucketFamilies { id metadata{description} buckets {id distributing acceptingNewBags operators {workerId metadata{extra nodeEndpoint nodeLocation{countryCode,coordinates{latitude longitude}}}} } } } ``` #### Distribution Buckets with bags ``` query distributionBuckets { distributionBuckets { id createdAt distributing acceptingNewBags operators { id workerId metadata {nodeEndpoint} } bags { id } }} ``` #### Find asset locations Filters need to be applied to the first (or second) level (query node doesn't support nested queries: ``` query { storageDataObjects(where: { id_eq: "9506" }) { id storageBag { id distributionBuckets { id operators { metadata { nodeEndpoint } } } } } } ``` #### Storage Objects with license, bucket status and location For curators to review new entries - the lead can assign each *offset* to a worker: ``` query getDataObjectsByVideoId { storageDataObjects(limit: 100, offset: 1) { id size deletionPrize storageBagId ipfsHash videomedia { id description licenseId license { code } media { storageBag { id owner { __typename } storageBuckets { id operatorMetadata { nodeLocation { countryCode } nodeEndpoint } createdById operatorStatus { __typename } dataObjectsSize acceptingNewBags dataObjectsCount dataObjectsSizeLimit } distributionBuckets { id bucketIndex familyId distributing createdById acceptingNewBags } } } } } } ```