2020-09-17 23:02:40 +03:00
|
|
|
// Copyright (c) Vitaliy Filippov, 2019+
|
2021-02-06 01:26:07 +03:00
|
|
|
// License: VNPL-1.1 (see README.md for details)
|
2020-09-17 23:02:40 +03:00
|
|
|
|
2020-05-13 00:08:31 +03:00
|
|
|
const LPOptimizer = require('./lp-optimizer.js');
|
|
|
|
|
|
|
|
const crush_tree = [
|
|
|
|
{ level: 1, children: [
|
|
|
|
{ level: 2, children: [
|
|
|
|
{ level: 3, id: 1, size: 3 },
|
|
|
|
{ level: 3, id: 2, size: 3 },
|
|
|
|
] },
|
|
|
|
{ level: 2, children: [
|
|
|
|
{ level: 3, id: 3, size: 3 },
|
|
|
|
{ level: 3, id: 4, size: 3 },
|
|
|
|
] },
|
|
|
|
] },
|
|
|
|
{ level: 1, children: [
|
|
|
|
{ level: 2, children: [
|
|
|
|
{ level: 3, id: 5, size: 3 },
|
|
|
|
{ level: 3, id: 6, size: 3 },
|
|
|
|
] },
|
|
|
|
{ level: 2, children: [
|
|
|
|
{ level: 3, id: 7, size: 3 },
|
|
|
|
{ level: 3, id: 8, size: 3 },
|
|
|
|
] },
|
|
|
|
] },
|
|
|
|
{ level: 1, children: [
|
|
|
|
{ level: 2, children: [
|
|
|
|
{ level: 3, id: 9, size: 3 },
|
|
|
|
{ level: 3, id: 10, size: 3 },
|
|
|
|
] },
|
|
|
|
{ level: 2, children: [
|
|
|
|
{ level: 3, id: 11, size: 3 },
|
|
|
|
{ level: 3, id: 12, size: 3 },
|
|
|
|
] },
|
|
|
|
] },
|
|
|
|
];
|
|
|
|
|
|
|
|
const osd_tree = LPOptimizer.flatten_tree(crush_tree, {}, 1, 3);
|
|
|
|
console.log(osd_tree);
|
|
|
|
|
|
|
|
async function run()
|
|
|
|
{
|
|
|
|
const cur_tree = {};
|
|
|
|
console.log('Empty tree:');
|
2020-08-16 21:54:55 +03:00
|
|
|
let res = await LPOptimizer.optimize_initial({ osd_tree: cur_tree, pg_size: 3, pg_count: 256 });
|
2020-05-13 00:08:31 +03:00
|
|
|
LPOptimizer.print_change_stats(res, false);
|
|
|
|
console.log('\nAdding 1st failure domain:');
|
|
|
|
cur_tree['dom1'] = osd_tree['dom1'];
|
2020-08-16 21:54:55 +03:00
|
|
|
res = await LPOptimizer.optimize_change({ prev_pgs: res.int_pgs, osd_tree: cur_tree, pg_size: 3 });
|
2020-05-13 00:08:31 +03:00
|
|
|
LPOptimizer.print_change_stats(res, false);
|
|
|
|
console.log('\nAdding 2nd failure domain:');
|
|
|
|
cur_tree['dom2'] = osd_tree['dom2'];
|
2020-08-16 21:54:55 +03:00
|
|
|
res = await LPOptimizer.optimize_change({ prev_pgs: res.int_pgs, osd_tree: cur_tree, pg_size: 3 });
|
2020-05-13 00:08:31 +03:00
|
|
|
LPOptimizer.print_change_stats(res, false);
|
|
|
|
console.log('\nAdding 3rd failure domain:');
|
|
|
|
cur_tree['dom3'] = osd_tree['dom3'];
|
2020-08-16 21:54:55 +03:00
|
|
|
res = await LPOptimizer.optimize_change({ prev_pgs: res.int_pgs, osd_tree: cur_tree, pg_size: 3 });
|
2020-05-13 00:08:31 +03:00
|
|
|
LPOptimizer.print_change_stats(res, false);
|
|
|
|
console.log('\nRemoving 3rd failure domain:');
|
|
|
|
delete cur_tree['dom3'];
|
2020-08-16 21:54:55 +03:00
|
|
|
res = await LPOptimizer.optimize_change({ prev_pgs: res.int_pgs, osd_tree: cur_tree, pg_size: 3 });
|
2020-05-13 00:08:31 +03:00
|
|
|
LPOptimizer.print_change_stats(res, false);
|
|
|
|
console.log('\nRemoving 2nd failure domain:');
|
|
|
|
delete cur_tree['dom2'];
|
2020-08-16 21:54:55 +03:00
|
|
|
res = await LPOptimizer.optimize_change({ prev_pgs: res.int_pgs, osd_tree: cur_tree, pg_size: 3 });
|
2020-05-13 00:08:31 +03:00
|
|
|
LPOptimizer.print_change_stats(res, false);
|
|
|
|
console.log('\nRemoving 1st failure domain:');
|
|
|
|
delete cur_tree['dom1'];
|
2020-08-16 21:54:55 +03:00
|
|
|
res = await LPOptimizer.optimize_change({ prev_pgs: res.int_pgs, osd_tree: cur_tree, pg_size: 3 });
|
2020-05-13 00:08:31 +03:00
|
|
|
LPOptimizer.print_change_stats(res, false);
|
|
|
|
}
|
|
|
|
|
|
|
|
run().catch(console.error);
|