Browse Source

update-dynamic-bag-policy, "multiple" flags, CONFIG_PATH env

Leszek Wiesner 3 years ago
parent
commit
f9db18876c

+ 13 - 9
distributor-node/scripts/test-commands.sh

@@ -3,13 +3,17 @@
 SCRIPT_PATH="$(dirname "${BASH_SOURCE[0]}")"
 cd $SCRIPT_PATH
 
+export AUTO_CONFIRM=true
+export CONFIG_PATH="../config.yml"
 CLI=../bin/run
-CONFIG_PATH="../config.yml"
-${CLI} leader:set-buckets-per-bag-limit -l 10 -c ${CONFIG_PATH} -y
-FAMILY_ID=`${CLI} leader:create-bucket-family -c "${CONFIG_PATH}" -y`
-BUCKET_ID=`${CLI} leader:create-bucket -f "${FAMILY_ID}" -a yes -c "${CONFIG_PATH}" -y`
-${CLI} leader:update-bag -b static:council -f "${FAMILY_ID}" -a "${BUCKET_ID}" -c "${CONFIG_PATH}" -y
-${CLI} leader:update-bucket-status -f "${FAMILY_ID}" -B "${BUCKET_ID}"  --acceptingBags yes -c "${CONFIG_PATH}" -y
-${CLI} leader:update-bucket-mode -f "${FAMILY_ID}" -B "${BUCKET_ID}" --mode on -c "${CONFIG_PATH}" -y
-${CLI} leader:delete-bucket -f "${FAMILY_ID}" -B "${BUCKET_ID}" -c "${CONFIG_PATH}" -y
-${CLI} leader:delete-bucket-family -f "${FAMILY_ID}" -c "${CONFIG_PATH}" -y
+
+${CLI} leader:set-buckets-per-bag-limit -l 10
+FAMILY_ID=`${CLI} leader:create-bucket-family ${CONFIG}`
+BUCKET_ID=`${CLI} leader:create-bucket -f ${FAMILY_ID} -a yes`
+${CLI} leader:update-bag -b static:council -f ${FAMILY_ID} -a ${BUCKET_ID}
+${CLI} leader:update-bucket-status -f ${FAMILY_ID} -B ${BUCKET_ID}  --acceptingBags yes
+${CLI} leader:update-bucket-mode -f ${FAMILY_ID} -B ${BUCKET_ID} --mode on
+${CLI} leader:update-dynamic-bag-policy -t Member -p ${FAMILY_ID}:5
+${CLI} leader:update-dynamic-bag-policy -t Member
+${CLI} leader:delete-bucket -f ${FAMILY_ID} -B ${BUCKET_ID}
+${CLI} leader:delete-bucket-family -f ${FAMILY_ID}

+ 1 - 1
distributor-node/src/command-base/default.ts

@@ -53,7 +53,7 @@ export default abstract class DefaultCommandBase extends Command {
     }),
     configPath: flags.string({
       required: false,
-      default: './config.yml',
+      default: process.env.CONFIG_PATH || './config.yml',
       description: 'Path to config JSON/YAML file (relative to current working directory)',
       char: 'c',
     }),

+ 6 - 2
distributor-node/src/commands/leader/update-bag.ts

@@ -16,17 +16,21 @@ export default class LeaderUpdateBag extends AccountsCommandBase {
     }),
     add: flags.integerArr({
       char: 'a',
-      description: 'IDs of buckets to add to bag',
+      description: 'ID of a bucket to add to bag',
       default: [],
+      multiple: true,
     }),
     remove: flags.integerArr({
       char: 'r',
-      description: 'IDs of buckets to remove from bag',
+      description: 'ID of a bucket to remove from bag',
       default: [],
+      multiple: true,
     }),
     ...DefaultCommandBase.flags,
   }
 
+  static examples = [`$ joystream-distributor leader:update-bag -b 1 -f 1 -a 1 -a 2 -a 3 -r 4 -r 5`]
+
   async run(): Promise<void> {
     const { bagId, familyId, add, remove } = this.parse(LeaderUpdateBag).flags
     const leadKey = await this.getDistributorLeadKey()

+ 53 - 0
distributor-node/src/commands/leader/update-dynamic-bag-policy.ts

@@ -0,0 +1,53 @@
+import { flags } from '@oclif/command'
+import { DynamicBagTypeKey } from '@joystream/types/storage'
+import AccountsCommandBase from '../../command-base/accounts'
+import DefaultCommandBase from '../../command-base/default'
+
+export default class LeaderUpdateDynamicBagPolicy extends AccountsCommandBase {
+  static description = `Update dynamic bag creation policy (number of buckets by family that should store given dynamic bag type).
+    Requires distribution working group leader permissions.`
+
+  static flags = {
+    type: flags.enum<DynamicBagTypeKey>({
+      char: 't',
+      description: 'Dynamic bag type',
+      options: ['Member', 'Channel'],
+      required: true,
+    }),
+    policy: flags.build({
+      parse: (v) => {
+        const pair = v.split(':')
+        if (pair.length !== 2 || !/^\d+$/.test(pair[0]) || !/^\d+$/.test(pair[1])) {
+          throw new Error(`Expected {familyId}:{numberOfBuckets} pair, got: ${v}`)
+        }
+        return [parseInt(pair[0]), parseInt(pair[1])] as [number, number]
+      },
+    })({
+      char: 'p',
+      description: 'Key-value pair of {familyId}:{numberOfBuckets}',
+      multiple: true,
+    }),
+    ...DefaultCommandBase.flags,
+  }
+
+  static examples = [`$ joystream-distributor leader:update-dynamic-bag-policy -t Member -p 1:5 -p 2:10 -p 3:5`]
+
+  async run(): Promise<void> {
+    const { type, policy } = this.parse(LeaderUpdateDynamicBagPolicy).flags
+    const leadKey = await this.getDistributorLeadKey()
+
+    this.log(`Updating dynamic bag policy (${type})...`)
+    await this.sendAndFollowTx(
+      await this.getDecodedPair(leadKey),
+      this.api.tx.storage.updateFamiliesInDynamicBagCreationPolicy(
+        type,
+        // FIXME: https://github.com/polkadot-js/api/pull/3789
+        this.api.createType(
+          'DynamicBagCreationPolicyDistributorFamiliesMap',
+          new Map((policy || []).sort(([keyA], [keyB]) => keyA - keyB))
+        )
+      )
+    )
+    this.log('Dynamic bag creation policy succesfully updated!')
+  }
+}

File diff suppressed because it is too large
+ 1 - 1
types/augment-codec/all.ts


File diff suppressed because it is too large
+ 0 - 0
types/augment-codec/augment-types.ts


+ 2 - 1
types/augment/all/defs.json

@@ -1064,5 +1064,6 @@
         "size": "u64"
     },
     "DataObjectIdMap": "BTreeMap<DataObjectId,DataObject>",
-    "DistributionBucketIdSet": "BTreeSet<DistributionBucketId>"
+    "DistributionBucketIdSet": "BTreeSet<DistributionBucketId>",
+    "DynamicBagCreationPolicyDistributorFamiliesMap": "BTreeMap<DistributionBucketFamilyId,u32>"
 }

+ 3 - 0
types/augment/all/types.ts

@@ -486,6 +486,9 @@ export interface DynamicBagCreationPolicy extends Struct {
   readonly families: BTreeMap<DistributionBucketFamilyId, u32>;
 }
 
+/** @name DynamicBagCreationPolicyDistributorFamiliesMap */
+export interface DynamicBagCreationPolicyDistributorFamiliesMap extends BTreeMap<DistributionBucketFamilyId, u32> {}
+
 /** @name DynamicBagId */
 export interface DynamicBagId extends Enum {
   readonly isMember: boolean;

File diff suppressed because it is too large
+ 0 - 0
types/augment/augment-types.ts


+ 3 - 0
types/src/storage.ts

@@ -214,6 +214,8 @@ export class DistributionBucketFamily extends JoyStructDecorated({
   distributionBuckets: BTreeMap.with(DistributionBucketId, DistributionBucket),
 }) {}
 
+export class DynamicBagCreationPolicyDistributorFamiliesMap extends BTreeMap.with(DistributionBucketFamilyId, u32) {}
+
 export const storageTypes: RegistryTypes = {
   StorageBucketId,
   StorageBucketsPerBagValueConstraint,
@@ -245,5 +247,6 @@ export const storageTypes: RegistryTypes = {
   DataObject,
   DataObjectIdMap,
   DistributionBucketIdSet,
+  DynamicBagCreationPolicyDistributorFamiliesMap,
 }
 export default storageTypes

Some files were not shown because too many files changed in this diff