|
@@ -3,47 +3,153 @@
|
|
import fs from 'fs'
|
|
import fs from 'fs'
|
|
import path from 'path'
|
|
import path from 'path'
|
|
const fsPromises = fs.promises
|
|
const fsPromises = fs.promises
|
|
-import { Client, ClientConfig } from 'pg'
|
|
|
|
|
|
+import { Client, ClientConfig,QueryResult } from 'pg'
|
|
import { exit } from 'process'
|
|
import { exit } from 'process'
|
|
|
|
|
|
async function doJob(): Promise<void> {
|
|
async function doJob(): Promise<void> {
|
|
const uploadDirectory = '/Users/shamix/uploads2'
|
|
const uploadDirectory = '/Users/shamix/uploads2'
|
|
- const objectNumber = 100
|
|
|
|
|
|
+ const fileSize = 100
|
|
|
|
|
|
- const config : ClientConfig = {
|
|
|
|
- user: 'postgres',
|
|
|
|
- password: 'postgres',
|
|
|
|
- database: 'query_node_processor'
|
|
|
|
|
|
+ const objectNumber = 100000
|
|
|
|
+ const bagNumber = 10
|
|
|
|
+ const bucketNumber = 150
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ const updateDb = false
|
|
|
|
+ const generateFiles = true
|
|
|
|
+
|
|
|
|
+ if (updateDb) {
|
|
|
|
+ const config : ClientConfig = {
|
|
|
|
+ user: 'postgres',
|
|
|
|
+ password: 'postgres',
|
|
|
|
+ database: 'query_node_processor'
|
|
|
|
+ }
|
|
|
|
+ const client = new Client(config)
|
|
|
|
+ await client.connect()
|
|
|
|
+
|
|
|
|
+ // Cleanup
|
|
|
|
+ await client.query('TRUNCATE storage_data_object')
|
|
|
|
+ await client.query('TRUNCATE storage_bucket CASCADE')
|
|
|
|
+ await client.query('TRUNCATE storage_bag CASCADE')
|
|
|
|
+ await client.query('TRUNCATE storage_bag_storage_bucket')
|
|
|
|
+
|
|
|
|
+ // Generate objects
|
|
|
|
+ await createBags(client, bagNumber)
|
|
|
|
+ await createBuckets(client, bucketNumber)
|
|
|
|
+ await createBagBucketLinks(client)
|
|
|
|
+ await createBucketWorkerLinks(client)
|
|
|
|
+ const dbTasks = createDataObjects(client, objectNumber)
|
|
|
|
+ await Promise.all(dbTasks)
|
|
|
|
+
|
|
|
|
+ await client.end()
|
|
}
|
|
}
|
|
- const client = new Client(config)
|
|
|
|
- await client.connect()
|
|
|
|
- await client.query('TRUNCATE storage_data_object')
|
|
|
|
|
|
|
|
- const data = new Uint8Array(100000000)
|
|
|
|
|
|
+ if (generateFiles) {
|
|
|
|
+ const fileTasks = createFiles(uploadDirectory, fileSize, objectNumber)
|
|
|
|
+ await Promise.all(fileTasks)
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function createDataObjects(client: Client, objectNumber: number): Promise<QueryResult<any>>[] {
|
|
const tasks: any[] = []
|
|
const tasks: any[] = []
|
|
|
|
+
|
|
|
|
+ const bagId = '1'
|
|
for(let i: number = 1; i <= objectNumber; i++){
|
|
for(let i: number = 1; i <= objectNumber; i++){
|
|
const name = i.toString()
|
|
const name = i.toString()
|
|
|
|
|
|
console.log(`Writing ${i} data object...`)
|
|
console.log(`Writing ${i} data object...`)
|
|
|
|
|
|
|
|
+ const dbTask = client.query(
|
|
|
|
+ `INSERT INTO storage_data_object(storage_bag_id, ipfs_hash, id, created_by_id, version, is_accepted, size)
|
|
|
|
+ values(${bagId}, ${name}, ${name}, 'some', '1', true, 100)`
|
|
|
|
+ )
|
|
|
|
+
|
|
|
|
+ tasks.push(dbTask)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return tasks
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function createFiles(uploadDirectory: string, fileSize: number, objectNumber: number): Promise<void>[] {
|
|
|
|
+ const data = new Uint8Array(fileSize)
|
|
|
|
+ const tasks: any[] = []
|
|
|
|
+ for(let i: number = 1; i <= objectNumber; i++){
|
|
|
|
+ const name = i.toString()
|
|
|
|
+
|
|
|
|
+ console.log(`Writing ${i} file...`)
|
|
|
|
+
|
|
const fileTask = fsPromises.writeFile(
|
|
const fileTask = fsPromises.writeFile(
|
|
path.join(uploadDirectory, name),
|
|
path.join(uploadDirectory, name),
|
|
data
|
|
data
|
|
- //Buffer.from(name, 'utf8')
|
|
|
|
)
|
|
)
|
|
|
|
|
|
- const dbTask = client.query(
|
|
|
|
- `INSERT INTO storage_data_object(storage_bag_id, ipfs_hash, id, created_by_id, version, is_accepted, size)
|
|
|
|
- values('CO', ${name}, ${name}, 'some', '1', false, 100)`
|
|
|
|
|
|
+ tasks.push(fileTask)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return tasks
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+async function createBags(client: Client, bagNumber: number): Promise<void> {
|
|
|
|
+ for(let i: number = 1; i <= bagNumber; i++){
|
|
|
|
+ const name = i.toString()
|
|
|
|
+
|
|
|
|
+ console.log(`Writing ${i} bag...`)
|
|
|
|
+
|
|
|
|
+ await client.query(
|
|
|
|
+ `INSERT INTO storage_bag(id, created_by_id, version, owner)
|
|
|
|
+ values(${name}, 'some', '1', '{}')`
|
|
)
|
|
)
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
|
|
- tasks.push(dbTask)
|
|
|
|
- tasks.push(fileTask)
|
|
|
|
|
|
+async function createBuckets(client: Client, bucketNumber: number): Promise<void> {
|
|
|
|
+ const missingWorkerId = `{"isTypeOf": "StorageBucketOperatorStatusMissing"}`
|
|
|
|
+ for(let i: number = 1; i <= bucketNumber; i++){
|
|
|
|
+ const name = i.toString()
|
|
|
|
+
|
|
|
|
+ console.log(`Writing ${i} bucket...`)
|
|
|
|
+
|
|
|
|
+ await client.query(
|
|
|
|
+ `INSERT INTO storage_bucket(id, created_by_id, version, operator_status, accepting_new_bags, data_objects_size_limit,data_object_count_limit)
|
|
|
|
+ values(${name}, 'some', '1', '${missingWorkerId}', true, 100000000, 100000000)`
|
|
|
|
+ )
|
|
}
|
|
}
|
|
|
|
+}
|
|
|
|
|
|
- await Promise.all(tasks)
|
|
|
|
|
|
|
|
- await client.end()
|
|
|
|
|
|
+async function createBagBucketLinks(client: Client): Promise<void> {
|
|
|
|
+ console.log(`Writing bag to bucket links...`)
|
|
|
|
+
|
|
|
|
+ // Bucket1 to Bag1
|
|
|
|
+ await client.query(
|
|
|
|
+ `INSERT INTO storage_bag_storage_bucket(storage_bag_id, storage_bucket_id)
|
|
|
|
+ values('1', '1')`
|
|
|
|
+ )
|
|
|
|
+ // Bucket2 to Bag1
|
|
|
|
+ await client.query(
|
|
|
|
+ `INSERT INTO storage_bag_storage_bucket(storage_bag_id, storage_bucket_id)
|
|
|
|
+ values('1', '2')`
|
|
|
|
+ )
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+async function createBucketWorkerLinks(client: Client): Promise<void> {
|
|
|
|
+ console.log(`Writing bucket worker links...`)
|
|
|
|
+
|
|
|
|
+ const assignedWorker0 = `{"isTypeOf": "StorageBucketOperatorStatusActive", "workerId": 0}`
|
|
|
|
+ const assignedWorker1 = `{"isTypeOf": "StorageBucketOperatorStatusActive", "workerId": 1}`
|
|
|
|
+
|
|
|
|
+ // Bucket1 to Worker0
|
|
|
|
+ await client.query(
|
|
|
|
+ `UPDATE storage_bucket
|
|
|
|
+ SET operator_status = '${assignedWorker0}'
|
|
|
|
+ WHERE id = '1'`
|
|
|
|
+ )
|
|
|
|
+ // Bucket2 to Worker1
|
|
|
|
+ await client.query(
|
|
|
|
+ `UPDATE storage_bucket
|
|
|
|
+ SET operator_status = '${assignedWorker1}'
|
|
|
|
+ WHERE id = '2'`
|
|
|
|
+ )
|
|
}
|
|
}
|
|
|
|
|
|
doJob().then(() => {
|
|
doJob().then(() => {
|