chores(nbd-client): create packages

This commit is contained in:
Florent Beauchamp
2022-10-03 17:16:01 +02:00
parent 7e678a38e3
commit e7443e94a9
6 changed files with 32 additions and 25 deletions

View File

@@ -15,6 +15,12 @@
"license": "AGPL-3.0-or-later",
"version": "0.0.1",
"engines": {
"node": ">=8.10"
"node": ">=14.0"
},
"dependencies": {
"@vates/async-each": "^1.0.0",
"@xen-orchestra/async-map": "^0.1.2",
"promise-toolbox": "^0.21.0",
"xen-api": "^1.2.2"
}
}

View File

@@ -1,9 +1,9 @@
import NbdClient from './client.mjs'
import NbdClient from '../index.js'
import { Xapi } from 'xen-api'
import readline from 'node:readline'
import { stdin as input, stdout as output } from 'node:process'
import { asyncMap } from '@xen-orchestra/async-map'
import { downloadVhd, getFullBlocks, getChangedNbdBlocks } from './utils'
import { downloadVhd, getFullBlocks, getChangedNbdBlocks } from './utils.mjs'
const xapi = new Xapi({
auth: {
@@ -15,9 +15,9 @@ const xapi = new Xapi({
})
await xapi.connect()
let networks = await xapi.call('network.get_all_records')
const networks = await xapi.call('network.get_all_records')
let nbdNetworks = Object.values(networks).filter(
const nbdNetworks = Object.values(networks).filter(
network => network.purpose.includes('nbd') || network.purpose.includes('insecure_nbd')
)
@@ -45,7 +45,7 @@ do {
try {
vmRef = xapi.getObject(vmuuid).$ref
} catch (e) {
//console.log(e)
// console.log(e)
console.log('maybe the objects was not loaded, try again ')
await new Promise(resolve => setTimeout(resolve, 1000))
}
@@ -97,7 +97,7 @@ const cbt = Buffer.from(await xapi.call('VDI.list_changed_blocks', snapshotRef,
console.log('got changes')
console.log('will connect to NBD server')
const [nbd, ..._] = await xapi.call('VDI.get_nbd_info', snapshotTarget)
const nbd = (await xapi.call('VDI.get_nbd_info', snapshotTarget))[0]
if (!nbd) {
console.error('Nbd is not enabled on the host')
@@ -106,7 +106,7 @@ if (!nbd) {
}
nbd.secure = true
//console.log(nbd)
// console.log(nbd)
const client = new NbdClient(nbd)
await client.connect()

View File

@@ -1,4 +1,4 @@
import NbdClient from './client.mjs'
import NbdClient from '../index.js'
import { Xapi } from 'xen-api'
import { asyncMap } from '@xen-orchestra/async-map'
import { downloadVhd, getFullBlocks } from './utils.mjs'
@@ -14,8 +14,8 @@ const xapi = new Xapi({
})
await xapi.connect()
let vmuuid = '123e4f2b-498e-d0af-15ae-f835a1e9f59f',
vmRef
const vmuuid = '123e4f2b-498e-d0af-15ae-f835a1e9f59f'
let vmRef
do {
try {
vmRef = xapi.getObject(vmuuid).$ref
@@ -46,7 +46,7 @@ const snapshotRef = xapi.getObject(snapshots[snapshots.length - 1].uuid).$ref
console.log('will connect to NBD server')
const [nbd, ..._] = await xapi.call('VDI.get_nbd_info', snapshotRef)
const nbd = (await xapi.call('VDI.get_nbd_info', snapshotRef))[0]
if (!nbd) {
console.error('Nbd is not enabled on the host')

View File

@@ -1,9 +1,9 @@
import NbdClient from './client.mjs'
import NbdClient from '../index.js'
import { Xapi } from 'xen-api'
import readline from 'node:readline'
import { stdin as input, stdout as output } from 'node:process'
import { asyncMap } from '@xen-orchestra/async-map'
import { downloadVhd, getFullBlocks } from './utils'
import { downloadVhd, getFullBlocks } from './utils.mjs'
const xapi = new Xapi({
auth: {
@@ -15,9 +15,9 @@ const xapi = new Xapi({
})
await xapi.connect()
let networks = await xapi.call('network.get_all_records')
const networks = await xapi.call('network.get_all_records')
console.log({ networks })
let nbdNetworks = Object.values(networks).filter(
const nbdNetworks = Object.values(networks).filter(
network => network.purpose.includes('nbd') || network.purpose.includes('insecure_nbd')
)
@@ -71,7 +71,7 @@ const snapshotRef = xapi.getObject(snapshots[snapshots.length - 1].uuid).$ref
console.log('will connect to NBD server')
const [nbd, ..._] = await xapi.call('VDI.get_nbd_info', snapshotRef)
const nbd = (await xapi.call('VDI.get_nbd_info', snapshotRef))[0]
if (!nbd) {
console.error('Nbd is not enabled on the host')
@@ -96,7 +96,7 @@ for (const nbBlocksRead of [32, 16, 8, 4, 2, 1]) {
for (const concurrency of [32, 16, 8, 4, 2]) {
const { speed } = await getFullBlocks({ nbdClient, concurrency, nbBlocksRead })
stats[blockSize][concurrency] = speed
stats[concurrency] = speed
}
}

View File

@@ -1,10 +1,11 @@
import { asyncEach } from '@vates/async-each'
import { CancelToken } from 'promise-toolbox'
import zlib from 'node:zlib'
export async function getChangedNbdBlocks(nbdClient, changed, concurrency, blockSize) {
let nbModified = 0,
size = 0,
compressedSize = 0
let nbModified = 0
let size = 0
let compressedSize = 0
const start = new Date()
console.log('### with concurrency ', concurrency, ' blockSize ', blockSize / 1024 / 1024, 'MB')
const interval = setInterval(() => {
@@ -40,8 +41,8 @@ export async function getChangedNbdBlocks(nbdClient, changed, concurrency, block
export async function getFullBlocks({ nbdClient, concurrency = 1, nbBlocksRead = 1, fd, maxDuration = -1 } = {}) {
const blockSize = nbBlocksRead * 64 * 1024
let nbModified = 0,
size = 0
let nbModified = 0
let size = 0
console.log('### with concurrency ', concurrency)
const start = new Date()
console.log(' max nb blocks ', nbdClient.nbBlocks / nbBlocksRead)
@@ -73,7 +74,7 @@ export async function getFullBlocks({ nbdClient, concurrency = 1, nbBlocksRead =
clearInterval(interval)
if (new Date() - start < 10000) {
console.warn(
`data set too small or perofrmance to high, result won't be usefull. Please relaunch with bigger snapshot or higher maximum data size `
`data set too small or performance to high, result won't be usefull. Please relaunch with bigger snapshot or higher maximum data size `
)
}
console.log('duration :', new Date() - start)

View File

@@ -32,7 +32,7 @@ const gitDiff = (what, args = []) =>
.split('\n')
.filter(_ => _ !== '')
const gitDiffFiles = (files = []) => gitDiff('files', files)
const gitDiffIndex = () => gitDiff('index', ['--cached', 'HEAD'])
const gitDiffIndex = () => gitDiff('index', ['--cached', 'HEAD~1'])
// -----------------------------------------------------------------------------